`Git` Homebrew tidak menggunakan penyelesaian

144

Saat menggunakan git OSX, setelah saya memodifikasi file yang bisa saya lakukan git commit <tab>, dan itu akan secara otomatis melengkapi nama file dengan yang telah dimodifikasi. Namun, jika saya menginstal versi git yang lebih baru dari homebrew dan saya menggunakannya, fitur itu tidak lagi berfungsi (artinya saya menekan <tab>dan itu hanya "bertanya" pada file apa saya ingin melakukannya, bahkan termasuk yang tidak memiliki perubahan) ).

Adakah yang bisa menjelaskan mengapa, dan bagaimana mengatasinya? Saya lebih suka menggunakan git homebrew, karena ini lebih mutakhir.

Shell saya zsh, dan tidak menginstal bash-completionatau zsh-completionsbekerja (bahkan setelah mengikuti petunjuk post-install homebrew).

Juga, setelah menginstal git dengan homebrew katanya

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

Jadi bukankah saya bisa menggunakan salah satunya?

pengguna137369
sumber
Versi apa zshdan gityang Anda gunakan?
simont
Terbaru dari homebrew. zsh 5.0.2 dan git 1.8.1.3
user137369
Apakah gitpenyelesaian lainnya berfungsi ( git co<TAB>==> git commit, misalnya)?
simont
2
Saya menduga beberapa masalah berbeda berakhir di sini, tetapi menginstal git melalui minuman memperbaikinya untuk saya. Tampaknya zsh-completionstidak senang dengan mac git, meskipun itu berfungsi dengan baik sebelumnya (mungkin diperbarui secara membabi buta ke 0,17.x).
ti7

Jawaban:

287

Kamu sedang mencari:

brew install git bash-completion

Seperti yang dinyatakan oleh komentar warpc, Anda harus menambahkan yang berikut ini agar Anda ~/.bash_profilebisa menyelesaikan bash-homebrew:

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

Di atas disebutkan dalam peringatan ketika Anda menginstal rumus bash-completion.


Catatan: jika Anda menggunakan Bash v4 atau yang lebih baru (via brew install bash) maka Anda ingin menggunakannya brew install bash-completion@2, untuk mengaktifkan penyelesaian tab tambahkan hal berikut ~/.bash_profileseperti yang dijelaskan dalam peringatan:

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"

Ekspor tambahan diperlukan untuk git, buruh pelabuhan, youtube-dl, dan penyelesaian lainnya yang mungkin termasuk dalam $(brew --prefix)/etc/bash_completion.d/direktori.

Graham Perks
sumber
3
Shell saya adalah zsh. Apakah itu berarti saya harus melakukannya brew install git zsh-completions? Juga, setelah menginstal git dengan homebrew katanya Bash completion has been installed to: /usr/local/etc/bash_completion.d zsh completion has been installed to: /usr/local/share/zsh/site-functions, jadi tidak bisakah saya menggunakan salah satunya?
user137369
2
Tidak menginstal bash-completionatau zsh-completionsbekerja (bahkan setelah mengikuti instruksi homebrew setelah menginstal).
user137369
12
Apakah Anda juga menambahkan ~ / .bash_profile untuk bash case konten ini: if [-f $ (brew --prefix) / etc / bash_completion]; kemudian . $ (brew --prefix) / etc / bash_completion fi
warpc
5
Saya sudah menginstal git tanpa minuman. Sekarang saya ingin menginstal bash_completion menggunakan brew. Saya menjalankan pembuatan install bash-completion dan menambahkan kode di atas tetapi tidak berhasil
MagePsycho
3
Perlu dicatat bahwa menginstal git melalui minuman sangat penting agar ini dapat bekerja. Saya tidak tahu bahwa versi apel git adalah bagian dari masalah. Saya menurunkan jawaban ini sebelum saya tahu itu dan sekarang saya tidak bisa menjawab :(
Reimus Klinsman
109

Penyelesaian tab git ini berfungsi pada OSX tanpa harus memulai ulang terminal Anda:

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
pengguna2347638
sumber
14
Ini sedikit curang untuk menyebutnya one-liner saat menggunakan &&. Skrip bash apa pun bisa berupa satu baris seperti itu.
user137369
1
Anda adalah MVP sejati!
heez
2
Jelas lebih baik daripada brew installmetode. Hanya karena itu berfungsi.
dchayka
2
Telah mencari selama berjam-jam pada solusi mengapa bash tidak mengambil perintah git-completion. Akhirnya, ini berhasil! Terima kasih banyak!
TheAmazingKnight
1
Ini adalah solusi aktual yang lebih mudah
Rigin Oommen
22

Jika ada orang lain yang membuat kesalahan bodoh saya, cobalah brew install git. Saya menggunakan gityang datang dengan Xcode dan tidak menyadari bahwa saya belum pernah menginstal git Homebrew untuk mendapatkan pelengkapan otomatis.

Harvey
sumber
19

untuk beberapa alasan saya kehilangan file di $(brew --prefix)/etc/bash_completionsehingga jawaban yang benar @Graham Perks tidak bekerja untuk saya

Itu akhirnya memperbaiki dalam kasus saya adalah:

brew unlink bash-completion
brew link bash-completion
Anentropik
sumber
Setelah mengikuti jawaban @Graham Pixel, ini akhirnya membuatnya jadi masalah bagi saya.
Lukas
Ini juga hanya bekerja untuk saya dengan Homebrew 1.6.0, git 2.17.0 (hub 2.2.9), dan bash-completion 1.3 pada OS X Sierra 10.12.6.
jared
10

Saya memecahkan masalah dengan mencari tahu yang $(brew --prefix)/etc/bash_completiondikembalikan Permission deniedsaat dieksekusi. Jadi setelah sederhana:

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

Semuanya sekarang berfungsi dengan baik. Saya bertanya-tanya mengapa Homebrew tidak membuat bash_completionfile dapat dieksekusi saat instalasi.

Asbjørn Ulsberg
sumber
5
Tidak, ini salah. bash_completiondimaksudkan sebagai sourcedefinisi sehingga berada di shell Anda; mengeksekusi tidak akan berpengaruh.
toddkaufmann
5

Menemukan solusi yang berfungsi. Ini sangat baru (ditulis 16 jam yang lalu, dan dilakukan 2 jam yang lalu), dan itu datang langsung dari homebrew .

brew install git --without-completions

Baru saja mencobanya, dan akhirnya berfungsi sebagaimana dimaksud.

pengguna137369
sumber
3
Saya tidak melihat bagaimana pemasangan gittanpa penyelesaian dapat meningkatkan situasi penyelesaian tidak berfungsi. Saya yakin jawaban Graham Perks ' stackoverflow.com/a/14970926/1199564 harus ditandai sebagai jawaban yang benar.
mgd
Saya memiliki masalah serupa dan saya telah menyelesaikan menginstal ulang git --without-completionsdan sumber bash-completion.bashfile dari .bash_profileyang paling mungkin ditimpa mengikuti prosedur standar.
Leonardo
1
Ini bukan jawaban yang benar. @ graham tunjangan adalah benar.
CantGetANick
@CantGetANick Jawaban Graham tidak menyelesaikan masalah saya, ini berhasil, itu sebabnya saya menandainya.
user137369
1
Setuju 100% dengan pengguna137369: Saya sudah menginstal paket bash-completion homebrew sehingga jawaban @ graham tidak mungkin bekerja untuk saya. Namun, brew install gitperbaiki semuanya (tidak perlu - tanpa-penyelesaian). Saya pikir ini juga jawaban yang benar.
bronson
5

Saya memiliki masalah yang sama dan bahkan menemukan posting ini pagi ini. Saya memperbaiki masalah dengan memperbarui minuman dengan brew updatedan menginstal ulang git dengan brew reinstall git.

Saya kemudian diberitahu tentang file lain yang memblokir proses penautan homebrew, dalam kasus saya itu /usr/local/share/zsh/site-functions/git-completion.bash. Menghapus file dan menjalankannya brew link gitmenyelesaikan masalah. Mengira itu hanya versi resep buruk yang kami temukan.

Jonathan Knapp
sumber
1
Anda juga akan melihat versi git yang Anda gunakan adalah Apple dan bukan versi yang diinstal oleh Homebrew. Setidaknya dalam kasus saya saya lakukan. Anda dapat memeriksa versi dengangit --version
Jonathan Knapp
Nggak. Itu masih tidak bekerja untuk saya. Saya selalu kembali menggunakan OSX's git, penyelesaiannya terlalu besar untuk dilepaskan.
user137369
penyelesaian git berhenti bekerja untuk saya setelah pembaruan ke Mavericks. Saya harus brew reinstall gitdan juga brew reinstall bash-completionmembuatnya bekerja lagi.
Krešimir Nesek
3

Jika Anda memiliki $BASH_VERSION<4.1, mis. 3.2.57(1)-releaseLanjutkan dengan:

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

Namun, jika Anda ingin brew install bashmendapatkan versi, 4.4.12(1)-release Anda dapat menggunakan penyelesaian yang lebih baik dan lebih lengkap di:

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

Perhatikan bahwa beberapa paket (buatan, buruh pelabuhan, tmux) masih akan memasukkan beberapa penyelesaian $(brew --prefix)/etc/bash_completion.d/sehingga Anda dapat menambahkan:

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

Akhirnya Anda harus dapat menambahkan skrip penyelesaian git jika karena alasan tertentu cara Anda menginstal git tidak menambahkannya ke salah satu dari mereka:

[[ -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

Anda bisa mendapatkan dan menambahkannya dengan yang di atas.

dlamblin
sumber
1

Bagi saya, saya harus meletakkan

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

ke dalam .bashrc(bukan .bash_profile) agar ini berfungsi.

".bash_profile dieksekusi untuk shell login, sedangkan .bashrc dieksekusi untuk shell non-login interaktif" - dari Apa perbedaan antara .bash_profile dan .bashrc? Tampak bagi saya bahwa MacOS Sierra tidak mengeksekusi .bash_profileketika membuka jendela terminal baru, hanya .bashrc.

Saya tidak akan memasukkannya ke dalam _bash_profile, karena dengan begitu saya harus reboot / logout agar pembaruan dapat berlaku.

antonyh
sumber
1

Ini bekerja untuk saya di Mojave (OSX 10.14.1):

brew install bash-completion

Kemudian tambahkan baris berikut ke ~ / .bash_profile Anda:

[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion
ar31an
sumber
Itu hanya mengalikan jumlah peringatan
Hussain Akram
1

Pada 2019, menggunakan Bash v5, Anda tidak perlu secara eksplisit sumber skrip penyelesaian git bash di .bash_profileatau.bashrc

  1. Pastikan Anda memiliki dua baris berikut di .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. Unduh skrip penyelesaian git bash ( https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash) dan simpan /usr/local/etc/bash_completion.d/sebagaigit

Itu dia! Bash akan secara otomatis mengambil file penyelesaian git dan mengaktifkan penyelesaian.


Catatan Sisi: Saya sarankan memasukkan semua perubahan .bashrcini karena ini memastikan bahwa ketika Anda masuk ke shell interaktif (mis. Dari pipenv shell), penyelesaian akan dimuat dengan benar karena bash akan sumber .bashrcdan BUKAN .bash_profile.

cgons
sumber
0

Ini mungkin ada hubungannya dengan libedit yang digunakan alih-alih readline di Lion.

Coba pasang readline sebelum git.

brew install readline
Alex
sumber
0

Bagi mereka yang sudah memiliki brash-completion diinstal Saya tidak memiliki skrip penyelesaian git yang diinstal dan tidak dapat menemukan keran untuk itu.

Jadi saya menambahkannya secara manual:

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

Perhatikan bahwa Anda harus mengganti nama file dan menghapus ekstensi agar berfungsi.

Jika Anda tidak memiliki penyelesaian atau git diinstal, instal dalam jawaban yang diterima.

brew install git bash-completion

Andrei
sumber
0

Jika Anda menggunakan homebrew untuk menginstal git, maka mungkin tidak perlu menginstal apa pun untuk mendukung penyelesaian git. File "git-completion.bash" ada di suatu tempat (milik saya ada di sini: /usr/local/git/contrib/completion/git-completion.bash)

Yang perlu Anda lakukan adalah menemukan file: sudo find / -type f -name "git-completion.bash"

Kemudian cari pathnya di .bash_profile Anda. Sebagai contoh saya perlu menambahkan baris ini ke ~ / .bash_profile saya:

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

Jangan lupa untuk mencari ~ / .bash_profile Anda atau buka kembali terminal Anda;)

dari: cara mengaktifkan git-tab-completion-bash-mac-os-x

Dozon Higgs
sumber
@ user137369 tidak - karena di sini Anda tidak perlu menginstal hal-hal yang sudah diinstal ...
Dozon Higgs
0

Saya tahu ini adalah posting lama, tetapi Anda tidak benar-benar perlu menginstal paket tambahan.

Homebrew memberi tahu Anda bahwa ada direktori dengan semua barang yang Anda butuhkan.

Anda bisa menambahkan baris berikut ke Anda .bash_profilejika Anda menggunakan Bash:

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

Mengaktifkan Penyelesaian Otomatis perintah GIT pada MAC-OS Mojave 10.14 Saya adalah seorang pengembang dan menggunakan GIT dari baris perintah sepanjang waktu. Ketika saya mempertimbangkan perspektif pengembangan, saya biasa mengeksekusi banyak perintah menggunakan baris perintah untuk operasi GIT. Sebagian besar waktu sangat menjengkelkan bahwa MAC OS tidak memiliki dukungan otomatis untuk penyelesaian perintah yang sebagian saya dukung. serta saran perintah, yang berarti apa saja perintah yang tersedia untuk karakter yang diketik. Jadi sangat sulit untuk mengetik perintah yang sangat panjang dan sebagian besar tugas yang berulang karena salah ketik. :(

Penyelesaian tab tentu akan lebih cepat dan mudah. Sayangnya, instalasi default git pada beberapa komputer Mac tidak memiliki penyelesaian tab yang diaktifkan.

Jadi saya mencari perbaikan untuk masalah ini dan ada beberapa solusi yang ditemukan dari pencarian web seperti StackOverflow, GitHub dan juga dari media. Sayangnya, solusi itu tidak berhasil untuk saya dan menjadi frustrasi dengan mencoba berbagai solusi berkali-kali.

Saya mencari dalam-dalam dan mencoba berbagai solusi dan untungnya, ini adalah perbaikan yang mudah. Berikut adalah langkah-langkah yang saya kumpulkan dari beberapa posting dan akhirnya berhasil seperti yang diharapkan. Jadi saya berharap untuk berbagi dengan orang lain yang memiliki masalah seperti saya ini.

Jika Anda pergi ke pencarian web dan Anda dapat menemukan banyak solusi yang menyebutkan file bash penyelesaian git. Bahkan panduan GitHub juga. Tapi saya sarankan Anda periksa dulu apakah file git-completion.bash sudah ada di komputer MAC Anda dengan git-core atau yang lainnya yang berasal dari instalasi. Anda dapat menggunakan perintah di bawah ini.

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

Anda akan mendapatkan hasil di bawah ini. (mungkin ada beberapa perbedaan sesuai dengan konten)

/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

Saya sarankan Anda untuk memilih yang diinstal dari git-core

Jika skrip git-completion.bash tidak ada di mesin Anda, silakan ambil dari yang disediakan di bawah ini dan simpan ke mesin lokal Anda dalam file baru bernama git-completion.bash di / usr / local / etc / direktori bash_completion.d /.

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

Jika Anda menggunakan Bash shell, Git dilengkapi dengan skrip penyelesaian otomatis yang bagus yang dapat Anda aktifkan. Unduh langsung dari kode sumber Git di

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

Jika skrip git-completion.bash ada di mesin Anda, tetapi tidak ada di direktori /usr/local/etc/bash_completion.d/, Anda harus membuat direktori itu dan menyalin file ke dalamnya. Perintah di bawah ini akan melakukan pekerjaan:

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

Setelah selesai di atas. Skrip git-completion.bash harus ada pada mesin lokal Anda di direktori / usr / local / etc / bash_completion.d /.

Sekarang Anda perlu menyegarkan profil Anda menggunakan perintah di bawah ini. Ini akan memuat file bash Anda yang ditambahkan ke konteks terminal.

source ~/.bash_profile

Bagus!!! kamu telah melakukannya. Mulai saja jendela terminal dan coba. Cukup ketik "git sta" maka akan muncul saran seperti di bawah ini:

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

lihat posting GitHub saya di sini:

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

Lihat posting Media saya di sini:

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

Dilanka M
sumber