`Git` của Homebrew không sử dụng hoàn thành


144

Khi sử dụng git của OSX, sau khi tôi sửa đổi một tệp, tôi có thể thực hiện một cách đơn giản git commit <tab>và điều đó sẽ tự động hoàn thành tên tệp thành tên đã được sửa đổi. Tuy nhiên, nếu tôi cài đặt phiên bản git mới hơn từ homebrew và tôi sử dụng nó, tính năng đó không còn hoạt động nữa (nghĩa là tôi nhấn <tab>và nó chỉ yêu cầu tôi hỏi tôi muốn làm gì với tập tin đó ).

Bất cứ ai cũng có thể làm sáng tỏ lý do tại sao, và làm thế nào để giải quyết điều đó? Tôi thích sử dụng git của homebrew hơn, vì nó cập nhật hơn.

Shell của tôi là zsh và Không cài đặt bash-completionhoặc zsh-completionshoạt động (ngay cả sau khi làm theo hướng dẫn sau khi cài đặt của homebrew).

Ngoài ra, sau khi cài đặt git với homebrew, nó nói

Bash completion has been installed to: /usr/local/etc/bash_completion.d
zsh completion has been installed to: /usr/local/share/zsh/site-functions

Vì vậy, tôi không nên sử dụng một trong số đó?


Phiên bản nào zshgitbạn đang sử dụng?
simont

Mới nhất từ ​​homebrew. zsh 5.0.2 và git 1.8.1.3
user137369

Các gitcông việc hoàn thành khác có hoạt động không ( git co<TAB>==> git commitchẳng hạn)?
simont

2
Tôi nghi ngờ một vài vấn đề khác nhau kết thúc ở đây, nhưng cài đặt git qua brew đã khắc phục điều này cho tôi. Có vẻ zsh-completionskhông hài lòng với mac git, mặc dù trước đó nó hoạt động tốt (có thể được cập nhật một cách mù quáng thành 0.17.x).
ti7

Câu trả lời:


287

Bạn đang tìm:

brew install git bash-completion

Như trạng thái bình luận của warpc, bạn sẽ cần thêm các mục sau vào ~/.bash_profileđể hoạt động hoàn thành bash của homebrew:

if [ -f $(brew --prefix)/etc/bash_completion ]; then
    . $(brew --prefix)/etc/bash_completion
fi

Ở trên được đề cập trong phần cẩn thận khi bạn cài đặt công thức hoàn thành bash.


Lưu ý: nếu bạn đang sử dụng Bash v4 trở lên (thông qua brew install bash) thì bạn sẽ muốn sử dụng brew install bash-completion@2, để cho phép hoàn thành tab, hãy thêm những điều sau vào ~/.bash_profilenhư được mô tả trong các cảnh báo:

export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"

Việc xuất bổ sung là cần thiết cho git, docker, youtube-dl và các hoàn thành khác có thể được bao gồm trong $(brew --prefix)/etc/bash_completion.d/thư mục.


3
Vỏ của tôi là zsh. Điều đó có nghĩa là tôi nên làm gì brew install git zsh-completions? Ngoài ra, sau khi cài đặt git với homebrew, nó Bash completion has been installed to: /usr/local/etc/bash_completion.d zsh completion has been installed to: /usr/local/share/zsh/site-functionscó thể sử dụng một trong số đó không?
dùng137369

2
Không cài đặt bash-completionhoặc zsh-completionslàm việc (ngay cả sau khi làm theo hướng dẫn của homebrew sau khi cài đặt).
dùng137369

12
Bạn cũng đã thêm ~ / .bash_profile cho bash case nội dung này: if [-f $ (brew --prefix) / etc / bash_completion]; sau đó . $ (brew --prefix) / etc / bash_completion fi
warpc

5
Tôi đã cài đặt git mà không cần ủ. Bây giờ tôi muốn cài đặt bash_completion bằng brew. Tôi đã chạy brew install bash-xong và thêm mã ở trên nhưng không gặp may
MagePologistso

3
Điều đáng chú ý là cài đặt git qua brew là điều cần thiết để làm việc này. Tôi đã không biết rằng phiên bản táo của git là một phần của vấn đề. Tôi đã đánh giá thấp câu trả lời này trước khi tôi biết điều đó và bây giờ tôi không thể đánh giá cao :(
Reimus Klinsman

109

Điều này hoàn thành tab git hoạt động trên OSX mà không phải khởi động lại thiết bị đầu cuối của bạn:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash && echo "source ~/.git-completion.bash" >> ~/.bash_profile && source ~/.bash_profile

14
Đó là một chút gian lận để gọi nó là một lót khi sử dụng &&. Bất kỳ tập lệnh bash nào cũng có thể là một tập lệnh như thế.
dùng137369

1
Bạn là MVP thực sự!
heez 2/11/2016

2
Chắc chắn tốt hơn brew installphương pháp. Đơn giản vì nó hoạt động.
dchayka

2
Đã tìm kiếm hàng giờ về một giải pháp cho lý do tại sao bash không chọn các lệnh hoàn thành git. Cuối cùng, điều này đã làm việc! Cảm ơn bạn rất nhiều!
TheAmazedKnight 17/1/18

1
Đây là giải pháp thực tế dễ dàng hơn
Rigin Oommen

22

Trong trường hợp bất cứ ai khác làm cho sai lầm ngu ngốc của tôi, hãy thử brew install git. Tôi đã sử dụng gitXcode đi kèm và không nhận ra rằng tôi chưa bao giờ cài đặt git của Homebrew để có được tự động hoàn thành.


19

vì một số lý do, tôi đã thiếu tệp tại $(brew --prefix)/etc/bash_completionvì vậy câu trả lời đúng của @Graham Perks không phù hợp với tôi

Nó đã kết thúc việc sửa chữa trong trường hợp của tôi là:

brew unlink bash-completion
brew link bash-completion

Sau khi làm theo câu trả lời của @Graham Pixel, điều này cuối cùng đã khiến tôi thích thú.
Lu-ca

Điều này cũng chỉ phù hợp với tôi với Homebrew 1.6.0, git 2.17.0 (hub 2.2.9) và bash-hoàn thành 1.3 trên OS X Sierra 10.12.6.
bắt đầu

10

Tôi đã giải quyết vấn đề bằng cách tìm ra rằng $(brew --prefix)/etc/bash_completiontrả lại Permission deniedkhi thực thi. Vì vậy, sau một đơn giản:

chmod +x $(brew --prefix)/etc/bash_completion

Mọi thứ đang hoạt động tốt. Tôi đang tự hỏi tại sao Homebrew không làm cho bash_completiontập tin thực thi khi cài đặt.


5
Không, điều này là sai. bash_completioncó nghĩa là source'd vì vậy các định nghĩa nằm trong vỏ của bạn; thực thi sẽ không có hiệu lực.
babkaufmann

5

Tìm thấy một giải pháp làm việc. Nó rất gần đây (tác giả 16 giờ trước và cam kết 2 giờ trước), và nó đến trực tiếp từ homebrew .

brew install git --without-completions

Chỉ cần thử nó, và cuối cùng nó hoạt động như dự định.


3
Tôi không thấy cách cài đặt gitmà không hoàn thành có thể cải thiện tình trạng hoàn thành không hoạt động. Tôi tin rằng stackoverflow của Graham Perks.com/a/14970926/1199564 nên được gắn cờ là câu trả lời đúng.
mgd

Tôi đã gặp một vấn đề tương tự và tôi đã giải quyết việc cài đặt lại git --without-completionsvà tìm nguồn cung cấp bash-completion.bashtệp từ .bash_profileđó có lẽ bị ghi đè theo quy trình chuẩn.
Leonardo

1
Đây không phải là một câu trả lời đúng. Câu trả lời của @graham là chính xác.
CantGetANick

Câu trả lời của @CantGetANick Graham không giải quyết được vấn đề của tôi, điều này đã làm, đó là lý do tại sao tôi đánh dấu nó.
dùng137369

1
Đồng ý 100% với người dùng137369: Tôi đã cài đặt gói hoàn thành bash của homebrew để câu trả lời của @ graham không thể làm việc cho tôi. Tuy nhiên, đã brew install gitsửa mọi thứ (không cần - không hoàn thành). Tôi nghĩ rằng đây cũng là một câu trả lời đúng.
bronson

5

Tôi đã có cùng một vấn đề và thậm chí tìm thấy bài đăng này sáng nay. Tôi đã khắc phục sự cố bằng cách cập nhật brew với brew updatevà sau đó cài đặt lại git với brew reinstall git.

Sau đó tôi đã được thông báo về một tệp khác đang chặn quá trình liên kết homebrew, trong trường hợp của tôi là như vậy /usr/local/share/zsh/site-functions/git-completion.bash. Loại bỏ các tập tin và chạy brew link gitgiải quyết vấn đề. Đoán nó chỉ là một phiên bản công thức xấu mà chúng tôi tình cờ thấy.


1
Bạn cũng sẽ nhận thấy phiên bản git bạn đang sử dụng là của Apple chứ không phải phiên bản do Homebrew cài đặt. Ít nhất trong trường hợp của tôi, tôi đã làm. Bạn có thể kiểm tra phiên bản vớigit --version
Jonathan Knapp

Không. Điều đó vẫn không làm việc cho tôi. Tôi đã luôn quay trở lại sử dụng git của OSX, việc hoàn thành đó chỉ là một tính năng quá lớn.
dùng137369

hoàn thành git đã ngừng làm việc cho tôi sau khi cập nhật lên Mavericks. Tôi đã phải brew reinstall gitvà cũng brew reinstall bash-completionđể làm cho nó hoạt động trở lại.
Krešimir Nesek

3

Nếu bạn có $BASH_VERSION<4.1, ví dụ: 3.2.57(1)-releasehãy tiếp tục với:

brew install bash-completion
# In ~/.bash_profile :
if [ -f $(brew --prefix)/etc/bash_completion ]; then
    . $(brew --prefix)/etc/bash_completion
fi

Tuy nhiên, nếu bạn brew install bashmuốn có phiên bản, 4.4.12(1)-release bạn có thể sử dụng các bản hoàn chỉnh tốt hơn và đầy đủ hơn trong:

brew install bash-completion@2
# In ~/.bash_profile:
[ -f "$(brew --prefix)/share/bash-completion/bash_completion" ] \
&& . "$(brew --prefix)/share/bash-completion/bash_completion"

Lưu ý rằng một số gói (brew, docker, tmux) vẫn sẽ đưa một số hoàn thành vào $(brew --prefix)/etc/bash_completion.d/để bạn có thể thêm:

for completion in "$(brew --prefix)/etc/bash_completion.d/"*
do
    . $completion
done

Cuối cùng, bạn sẽ có thể thêm tập lệnh hoàn thành git nếu vì lý do nào đó, cách bạn cài đặt git không thêm nó vào một trong hai tập lệnh sau:

[[ -f $(brew --prefix)/etc/bash_completion.d/git \
|| -f $(brew --prefix)/share/bash-completion/completions/git ]] \
|| curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash \
    -o $(brew --prefix)/etc/bash_completion.d/git

Bạn có thể nhận và thêm nó với ở trên.


2

Bước 1: Tải xuống tập lệnh hoàn thành tự động:

cd ~
curl -O https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash

Bước 2: Cập nhật .bash_profile và .bashrc

echo "source ~/git-completion.bash" >> .bash_profile

Qua https://www.anintegratedworld.com/git-tab-autocomplete-on-osx-10-11-el-capitan/

Nếu ở trên không hoạt động, hãy thử https://github.com/bobthecow/git-flow-completion/wiki/Install-Bash-git-completion


1

Đối với tôi, tôi đã phải đặt

source $(brew --prefix)/etc/bash_completion

vào .bashrc(không phải .bash_profile) để làm việc này.

".bash_profile được thực thi cho các shell đăng nhập, trong khi .bashrc được thực thi cho các shell không đăng nhập tương tác" - từ sự khác biệt giữa .bash_profile và .bashrc là gì? Tôi thấy rằng MacOS Sierra không thực thi .bash_profilekhi chỉ mở một cửa sổ đầu cuối mới .bashrc.

Tôi sẽ không đặt nó trong _bash_profile, vì sau đó tôi sẽ phải khởi động lại / đăng xuất để các bản cập nhật có hiệu lực.


1

Điều này làm việc cho tôi trong Mojave (OSX 10.14.1):

brew install bash-completion

Sau đó thêm dòng sau vào ~ / .bash_profile:

[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion

Nó chỉ nhân số lượng cảnh báo
Hussain Akram

1

Năm 2019, bằng cách sử dụng Bash v5, bạn không cần phải rõ ràng nguồn kịch bản hoàn thành git bash trong .bash_profilehoặc.bashrc

  1. Đảm bảo bạn có hai dòng sau trong .bashrc
export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"
  1. Tải về kịch bản hoàn git bash ( https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash) và lưu nó vào /usr/local/etc/bash_completion.d/nhưgit

Đó là nó! Bash sẽ tự động lấy tệp hoàn thành git và cho phép hoàn thành.


Lưu ý bên lề: Tôi khuyên bạn nên đưa tất cả các thay đổi này vào .bashrcvì điều này đảm bảo rằng khi bạn thả vào một vỏ tương tác (nghĩa là từ pipenv shell), các phần hoàn thành sẽ được tải chính xác vì bash sẽ nguồn .bashrcvà KHÔNG .bash_profile.


0

Nó có thể có liên quan đến libedit được sử dụng thay vì readline trong Lion.

Hãy thử cài đặt readline trước khi git.

brew install readline

0

Đối với những người đã cài đặt bash-xong. Tôi chưa cài đặt tập lệnh hoàn thành git và không thể tìm thấy bất kỳ thao tác nào cho việc đó.

Vì vậy, tôi đã thêm nó bằng tay:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o $(brew --prefix)/etc/bash_completion.d/git

Lưu ý rằng bạn phải đổi tên tệp và xóa phần mở rộng để nó hoạt động.

Nếu bạn chưa cài đặt xong hoặc git, hãy cài đặt nó trong câu trả lời được chấp nhận.

brew install git bash-completion


0

Nếu bạn đã sử dụng homebrew để cài đặt git, thì có lẽ không cần phải cài đặt bất cứ thứ gì để hỗ trợ hoàn thành git. Tệp "git-xong.bash" ở đâu đó (của tôi đã ở đây: /usr/local/git/contrib/completion/git-completion.bash)

Tất cả những gì bạn cần làm là tìm tệp: sudo find / -type f -name "git-xong.bash"

Sau đó, nguồn đường dẫn của nó trong .bash_profile của bạn. Ví dụ: tôi cần thêm dòng này vào ~ / .bash_profile:

source /usr/local/git/contrib/completion/git-completion.bash

Đừng quên lấy nguồn ~ / .bash_profile hoặc mở lại thiết bị đầu cuối của bạn;)

từ: how-enable-git-tab-xong-bash-mac-os-x


@ user137369 không - vì ở đây bạn không cần cài đặt những thứ đã được cài đặt ...
Dozon Higgs

0

Tôi biết đây là một bài viết cũ, nhưng bạn không thực sự cần phải cài đặt bất kỳ gói bổ sung nào.

Homebrew đang thông báo cho bạn rằng có một thư mục chứa tất cả những thứ bạn cần.

Bạn chỉ có thể thêm dòng sau vào .bash_profilenếu bạn đang sử dụng Bash:

source /usr/local/etc/bash_completion.d/git-completion.bash

-1

Bật Tự động hoàn thành các lệnh GIT trên MAC-OS Mojave 10.14 Tôi là nhà phát triển và sử dụng GIT từ dòng lệnh mọi lúc. Khi tôi xem xét phối cảnh phát triển, tôi đã sử dụng để thực thi rất nhiều lệnh bằng cách sử dụng dòng lệnh cho các hoạt động GIT. Hầu hết thời gian rất khó chịu khi MAC OS không có hỗ trợ tự động để hoàn thành lệnh mà tôi hỗ trợ một phần. cũng như các gợi ý lệnh, có nghĩa là các lệnh có sẵn cho các ký tự được nhập. Vì vậy, sẽ rất rắc rối khi gõ lệnh rất dài và chủ yếu là nhiệm vụ lặp đi lặp lại vì lỗi đánh máy sẽ sai. :

Hoàn thành tab chắc chắn sẽ nhanh hơn và dễ dàng hơn. Thật không may, cài đặt git mặc định trên một số máy tính Mac không được bật hoàn thành tab.

Vì vậy, tôi đã tìm kiếm một bản sửa lỗi cho vấn đề này và có một số giải pháp được tìm thấy từ tìm kiếm trên web như StackOverflow, GitHub cũng như từ phương tiện. Thật không may, những giải pháp đó không hiệu quả với tôi và đã nản lòng khi thử nhiều giải pháp khác nhau rất nhiều lần.

Tôi đã tìm kiếm sâu và thử các giải pháp khác nhau và may mắn thay, đó là một sửa chữa dễ dàng. Dưới đây là các bước tôi đã thu thập từ một số bài đăng và cuối cùng nó hoạt động như mong đợi. Vì vậy, tôi hy vọng sẽ chia sẻ với những người có vấn đề như tôi.

Nếu bạn vào tìm kiếm trên web và bạn có thể tìm thấy nhiều giải pháp trong đó đề cập đến tệp bash hoàn thành git. Ngay cả hướng dẫn GitHub là tốt. Nhưng tôi khuyên bạn nên kiểm tra trước nếu tệp git-xong.bash đã có trong máy tính MAC của bạn với lõi git hoặc thứ gì khác đến từ cài đặt. bạn có thể sử dụng lệnh dưới đây.

sudo find / -type f -name "git-completion.bash"

bạn sẽ nhận được kết quả dưới đây. (có thể có một số khác biệt theo nội dung)

/Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash
/Users/Dilanka/git-completion.bash
/Users/Dilanka/.oh-my-zsh/plugins/gitfast/git-completion.bash
/Users/Dilanka/Downloads/git-completion.bash

Tôi đề nghị bạn chọn cài đặt từ git-core

Nếu tập lệnh git-xong.bash không tồn tại trên máy của bạn, vui lòng truy xuất tập lệnh từ bên dưới được cung cấp ở trên và lưu nó vào máy cục bộ của bạn trong một tệp mới có tên git-xong.bash trong / usr / local / etc / thư mục bash_completion.d /.

https://git-scm.com/book/en/v1/Git-Basics-Tips-and-Tricks

Nếu bạn sử dụng shell Bash, Git đi kèm với một kịch bản hoàn thành tự động đẹp mà bạn có thể kích hoạt. Tải xuống trực tiếp từ mã nguồn Git tại

https://github.com/git/git/blob/master/contrib/completion/git-completion.bash

Nếu tập lệnh git-xong.bash tồn tại trên máy của bạn, nhưng không có trong thư mục /usr/local/etc/bash_completion.d/, bạn nên tạo thư mục đó và sao chép tệp vào đó. Lệnh dưới đây sẽ thực hiện công việc:

sudo mkdir /opt/local/etc/bash_completion.d
sudo cp /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bash

Sau khi hoàn thành ở trên. Tập lệnh git-xong.bash nên tồn tại trên máy cục bộ của bạn trong thư mục / usr / local / etc / bash_completion.d /.

Bây giờ bạn cần làm mới hồ sơ của bạn bằng cách sử dụng lệnh dưới đây. Nó sẽ tải tập tin bash đã thêm của bạn vào bối cảnh thiết bị đầu cuối.

source ~/.bash_profile

Tuyệt quá!!! bạn đã làm xong việc đó. Chỉ cần bắt đầu cửa sổ đầu cuối và thử nó. Chỉ cần gõ "git sta" nó sẽ hiển thị các đề xuất như dưới đây:

git sta
stage    stash    status
git chec<TAB> will show git checkout

xem bài đăng GitHub của tôi ở đây:

https://github.com/DIL8654/Enable-Auto-Completion-of-GIT-commads-on-MAC-OS-Mojave

Xem bài trung bình của tôi ở đây:

https://medium.com/@dilanka85/enable-auto-completion-of-git-commands-on-mac-os-mojave-10-14

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.