Có rất nhiều câu trả lời cho câu hỏi này và giống như bản thân tôi, tôi cá là rất nhiều độc giả bối rối. Đối với trường hợp của tôi, tôi cũng đã có yêu cầu để các dotfiles của tôi hoạt động trên nhiều nền tảng với các phiên bản Git khác nhau. Tôi cũng không alias g=git
nhưng thay vào đó đã g
định nghĩa là một chức năng.
Để thực hiện điều này, tôi đã phải đưa các câu trả lời khác nhau vào đây thành một giải pháp. Mặc dù điều này nhắc lại các câu trả lời nhưng tôi nghĩ ai đó trong thuyền của tôi có thể thấy phần tổng hợp này hữu ích như tôi có khi tôi lần đầu tiên đến câu hỏi này.
Điều này giả định hoàn thành Git cũ hơn và mới hơn, mặc định Ubuntu và brew install git
trên MacOS. Trong trường hợp sau, việc hoàn thành cài đặt bia không được xử lý bằng bash (điều mà tôi sẽ chẩn đoán sau).
# Alias g to git
g() {
if [[ $# > 0 ]]; then
git "$@"
else
git status -sb
fi
}
# Preload git completion in Ubuntu which is normally lazy loaded but we need
# the __git_wrap__git_main function available for our completion.
if [[ -e /usr/share/bash-completion/completions/git ]]; then
source /usr/share/bash-completion/completions/git
elif [[ -e /usr/local/etc/bash_completion.d/git-completion.bash ]]; then
source /usr/local/etc/bash_completion.d/git-completion.bash
fi
if command_exists __git_complete; then
__git_complete g _git
elif command_exists __git_wrap__git_main; then
complete -o bashdefault -o default -o nospace -F __git_wrap__git_main g
fi