git lengkapi-otomatis untuk * cabang * di baris perintah?

351

Di mesin Linux saya, saya memiliki autocomplete untuk cabang dengan Git.

[Catatan kita berbicara tentang penyelesaian cabang git, bukan penyelesaian bash (mis. Perintah, file, dll). Jadi BUKAN jawaban Lane sama sekali]

Misalnya saya bisa mengetik git checkout+ TABdan mendapatkan daftar cabang.

Atau saya bisa mengetik git checkout feb*+ TABuntuk mendapatkan semua cabang yang dimulai dengan "feb".

Bagaimana saya bisa mendapatkan fungsionalitas ini di Mac?

Saya mencoba men-download dan menjalankan bash-completion/bash_completiondan bash-completion/bash_completion.sh.intapi tidak ada sukacita. Yang pertama memberi pesan kesalahan tentang declare: -A invalid_option. Yang kedua tidak memberikan kesalahan. Ketika saya git checkout+ TABmeskipun saya masih mendapatkan daftar file di direktori, bukan cabang. Saya di root proyek.

Pengisian otomatis untuk direktori dan perintah bash berfungsi dengan baik, jadi khusus untuk Git.

Michael Durrant
sumber

Jawaban:

484

ok, jadi saya membutuhkan skrip pelengkapan otomatis git .

Saya mendapatkannya dari url ini:

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

Tidak perlu khawatir tentang apa direktori Anda ketika Anda menjalankan ini sebagai direktori home Anda ( ~) digunakan dengan target.

Kemudian saya menambahkan ke ~/.bash_profilefile saya kode 'eksekusi jika ada' berikut:

if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
fi

Pembaruan: Saya membuat bit kode ini lebih ringkas untuk mengecilkan .bashrcfile saya , dalam hal ini saya sekarang menggunakan:

test -f ~/.git-completion.bash && . $_

Catatan: $_berarti argumen terakhir ke perintah sebelumnya. jadi . $_artinya jalankan - "itu" berada .git-completion.bashdalam kasus ini

Ini masih berfungsi pada Ubuntu dan OSX dan pada mesin tanpa skrip .git-completion.bashskrip.

Sekarang git Tab(sebenarnya itu git TabTab) bekerja seperti pesona!

ps: Jika ini tidak berhasil, Anda mungkin perlu berlari chmod u+x ~/.git-completion.bashuntuk memberikan diri Anda izin yang diperlukan:

  • chmod adalah perintah yang mengubah izin file
  • u berarti pengguna yang memiliki file, secara default penciptanya, yaitu Anda
  • + berarti mengatur / mengaktifkan / menambahkan izin
  • x berarti mengeksekusi izin, yaitu kemampuan untuk menjalankan skrip
Michael Durrant
sumber
1
Yap, restart terminal setelah menambahkan skrip bash membuatnya berfungsi. Saya duduk di sini bertanya-tanya mengapa itu terus mencoba untuk melengkapi otomatis ke Modelsfolder saya ketika saya menekan m Tabuntuk membuatnya selesai otomatis master.
Alex
1
Lihat juga unix.stackexchange.com/q/48862/10043 untuk tip berbeda
Michael Durrant
3
Jika jawaban yang diterima tidak berfungsi untuk siapa pun maka cobalah ini: source ~/.bash_profilesetelah menempelkan kode. Restart terminal juga akan melakukan hal yang sama.
Ben
Terima kasih! Saya mencoba beberapa hal lain tetapi tidak ada yang berhasil (termasuk github.com/bobthecow/git-flow-completion/wiki/… ini ). Solusi Anda bekerja seperti pesona;)
rgoliveira
1
(Anda tidak memiliki minuman gittetapi standar Apple git) brew install gitdan restart terminal bagi mereka yang menghadapi kesalahan aneh sepertigit checunknown option: --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config usage: git [--version] [--help] [-C <path>] [-c <name>=<value>] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] [-p | --paginate | --no-pager] [--no-replace-objects] [--bare] [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>] <command> [<args>]
Sachin
89

Beberapa orang lebih suka menggunakan manajer paket untuk mengotomatiskan penginstalan, pembaruan, dan konfigurasi paket Mac OS. Saya penggemar paket manajer, dan saya pikir Homebrew adalah manajer paket terbaik untuk Mac OS (beberapa orang akan mengatakan itu adalah manajer paket Mac OS de-facto).

Setelah Anda menginstal Homebrew, Anda cukup menginstal git bersamaan dengan bash-completion dengan brew install git bash-completion.

Anda kemudian harus memasukkan yang berikut ini di ~/.bash_profile:

if [ -f `brew --prefix`/etc/bash_completion.d/git-completion.bash ]; then
  . `brew --prefix`/etc/bash_completion.d/git-completion.bash
fi

(Catatan: Jika instalasi ini gagal dengan kesalahan 404, dan Anda sudah menginstal git, hapus saja bagian git dari instalasi buatan ini)

Info lebih lanjut tentang cara menginstal git dan penyelesaian-bash dengan brew di sini.

Jalur
sumber
27
Menambahkan gitdan menambahkan bash-completionsama sekali tidak sama dengan menambahkan. .git-completion.bash Mereka adalah program yang berbeda dan mereka melakukan hal-hal yang sangat berbeda - satu melakukan bash command autocompletion dan yang lainnya git command autocompletion dan 'nair the twain akan bertemu;)
Michael Durrant
bekerja seperti pesona, terima kasih banyak. Bisakah Anda jelaskan apa gunanya skrip yang telah Anda tambahkan pada saya ~/.bash_profile?
Vikas Bansal
Terlepas dari apa yang orang lain katakan tentang jawaban ini, itu adalah yang membuat git autocomplete bekerja di terminal.
Iain
32

Jalankan ini di terminal:

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

Lalu, lakukan ini:

vi ~/.bash_profile

Tambahkan baris ini:

if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
fi

Itu saja. Ini berhasil untuk saya.

Caique Pereira
sumber
1
(Langkah ke-2) Jika ada yang lebih memilih untuk membuka bash_profile dengan editor teks, lakukan saja ini: open -e .bash_profile
Nicolas Bodin-Ripert
2
Pada perawan Mac OS High Sierra, ~/.bash_profilefile tidak ada. Tidak apa-apa cukup buat file dan tempatkan ifskrip itu di sana dan simpan. Muat ulang shell Anda setelah itu dan itu akan berhasil.
agm1984
11

gitdan git-completion.bashsudah datang dengan alat baris perintah macOS ( xcode-select --install). Untuk mengaktifkan bash autocomplete, tambahkan ini ke ~/.bash_profile.

[ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash ] && . /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash

Ini juga akan memungkinkan pelengkapan otomatis untuk cabang git.

Harsh Vakharia
sumber
Cukup yakin saya sudah menginstal alat baris perintah, tetapi file itu tidak ada dalam kasus saya. Senang pergi dengan brew (dan karena git saya dengan brew juga, mungkin lebih bijaksana juga).
drevicko
Terima kasih! IMO, ini harus menjadi jawaban dengan tanda centang hijau.
geekisthenewcool
8

Inilah yang membingungkan sebagian dari Anda: Anda memiliki brew atau port yang diinstal, tetapi Anda menggunakan sistem git /usr/bin/. Untuk memeriksa ini:

which git

Jika Anda melihat /usr/bin/gitmaka salah satu minuman tidak dikonfigurasi dengan benar, atau Anda belum menginstal git melalui minuman.

Jika Anda menginstal git via brew, maka mengaktifkan bash untuk brew juga akan mengaktifkan bash untuk git. Ini karena /usr/local/etc/bash_completionsebenarnya sumber semuanya /usr/local/bash_completion.d, dan paket pembuatan untuk git menginstal skrip penyelesaian git di sana.

Brandon
sumber
Ini masuk akal, tetapi bagaimana Anda "mengaktifkan bash untuk pembuatan bir"? Anda kehilangan cara melakukannya, ini harus menjadi bagian dari jawaban Anda
skplunkerin
Saya baru saja melakukan ini (berfungsi, terima kasih) melalui simplified.guide/macos/bash-completion , tetapi penyelesaian otomatis tertunda beberapa detik ... odd
skplunkerin
4

Anda dapat menginstal bash dan git dari MacPorts dengan opsi "bash_completion" diaktifkan. Ini mungkin cara termudah untuk mempertahankan git dan kelengkapan terbaru.

http://denis.tumblr.com/post/71390665/adding-bash-completion-for-git-on-mac-os-x-snow-leopard

Untuk menginstal MacPorts: http://www.macports.org/install.php/

informasi tambahan

Sedangkan untuk mencari pengaturan penyelesaian pada sistem Linux Anda, lihat di /etc/bash_completion.d/git (ini adalah file yang panjang). Menyalin itu dengan sendirinya mungkin tidak akan berhasil, karena dirancang untuk bersumber dari kerangka penyelesaian melalui / etc / bash_completion (yang bersumber dari /etc/profile.d/bash_completion.sh; file di / etc / profile .d bersumber dari / etc / profile).

Kimmo Suominen
sumber
2

Jika penyelesaian git Anda sebagian rusak, bahkan setelah sumber https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash, Anda mungkin hanya perlu memperbarui versi git Anda.

Sebagai contoh, ketika saya mengetik git check+ TAB, itu akan melengkapi secara otomatis git checkout. Tetapi ketika saya mengetik git checkout+ TAB, itu tidak menampilkan daftar cabang, hanya HEAD.

Perbaikan untuk saya adalah memperbarui gitversi saya . Saya menggunakan 2.7.0, yang tampaknya tidak kompatibel dengan yang terbaru git-completion.bash. Saya berlari brew upgrade git, yang memperbaruinya menjadi 2.13.0, dan sekarang ia dengan benar melengkapi nama cabang saya.

wisbucky
sumber
Saya mendapatkan masalah yang sama, tetapi saya harus menjalankan brew upgrade gitdan brew link git (dengan menimpa diaktifkan)
Tope
1
Terima kasih atas tangkapan @Tope. Saya telah berubah updatemenjadi upgrade.
wisbucky
2

Sejauh ini, referensi terbaik yang saya temukan untuk menyelesaikan masalah ini adalah di SpinDance , oleh Connor Livingston :

Jika skrip git-completion.bash tidak ada di mesin Anda, harap ambil dari tautan yang saya berikan di atas (yang ini ) dan simpan ke mesin lokal Anda dalam file baru bernama git-completion.bash di / direktori usr / local / etc / bash_completion.d / . Jika skrip git-completion.bash ada di komputer Anda, tetapi tidak ada di direktori /usr/local/etc/bash_completion.d/ , kita harus membuat salinannya di direktori itu. Sudo cepat cp /current/path/to/your/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bash harus melakukan trik. Bagi mereka yang ingin tahu tentang /usr/local/etc/bash_completion.d/ direktori: ini untuk menyimpan perintah penyelesaian baru, dan Anda mungkin harus membuatnya jika belum ada di mesin Anda.

Pada titik ini, skrip git-completion.bash harus ada pada mesin lokal Anda di direktori /usr/local/etc/bash_completion.d/ . Sekarang kita akan memasukkan skrip git completion ke bash dengan menunjuknya dari ~ / .bash_profile .

Catatan: tilde dalam kalimat sebelumnya merujuk ke direktori home di komputer Anda. Tambahkan baris berikut ke ~ / .bash_profile : source /usr/local/etc/bash_completion.d/git-completion.bash dan simpan. Langkah terakhir adalah memuat ulang profil bash Anda. Anda dapat mencapai ini dengan menjalankan source ~ / .bash_profile di sesi bash Anda saat ini.

ricardovegasaenz
sumber
1

Mencoba dan berfungsi dengan baik untuk cabang tetapi ketika Anda git st+ tabmaka itu menunjukkan kesalahan seperti ini

opsi tidak dikenal: --list-cmds = list-mainporcelain, lainnya, nohelpers, alias, daftar-lengkap, konfigurasi penggunaan: git [--version] [--help] [-C] [-c] [-c =] [--exec -path [=]] [--html-path] [--man-path] [--info-path] [-p | --paginate | --no-pager] [--no-ganti-objek] [--bare] [--git-dir =] [--work-tree =] [--namespace =] []

Mencari di internet dan menemukan bahwa --list-cmdsdi .git-completion.bashdalam versi terbaru dari git dan di mac saya versi git adalah2.17.2

Ini solusinya

Solusi 1

  1. Periksa versi git dengan menggunakan git --versionperintah
  2. Lalu masukkan nomor versi yang sama di url seperti yang saya lakukan

    curl https://raw.githubusercontent.com/git/git/v2.17.2/contrib/completion/git-completion.bash -o ~/.git-completion.bash
  3. Kemudian ikuti langkah-langkah yang sama seperti pada jawaban atas, masukkan kode di bawah ini ~/.bash_profile

    if [ -f ~/.git-completion.bash ]; then
      . ~/.git-completion.bash
    fi
    

Solusi 2

Anda harus mencoba untuk memperbarui versi git ke yang terbaru lalu akan berfungsi.

Inder Kumar Rathore
sumber
0

Instal oh-my-zsh dan atur zsh sebagai shell default Anda dan terima kasih saya nanti :)

Saša Šijak
sumber
Saya telah melakukan itu, tepatnya dengan harapan tidak harus menghadapinya - masih belum ada saran cabang setelah memukul tab
Jytug
Anda sebenarnya tidak membutuhkan oh-my-zsh , atau bahkan sistem plugin yang terpisah sama sekali! Git selesai keluar dari kotak, Anda hanya perlu mengaktifkannya.
SilverWolf
0

Sebagian besar pengguna akan gitmenginstal sebagai bagian dari alat baris perintah xcode di /usr/bin/gitdan aturan penyelesaian bash untuk git akan tersedia di /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash.

Dalam hal ini tidak perlu menginstal git dari Homebrew atau aturan penyelesaian sumber git dari raw.githubusercontent.com. Cukup buat symlink sebagai berikut:

cd /usr/local/etc/bash_completion.d/
ln -s /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash git

Catatan: pastikan Anda telah menginstal dan mengonfigurasi bash-completionpaket dari Homebrew.

Dima L.
sumber
-2

Temukan .bashrcfile Anda .

Buka dan tambahkan baris ini di bagian bawah:

source /etc/bash_completion.d/git

Crmpicco
sumber
1
Saya tidak punya /etc/bash_completion.d/folder apa pun , pada sistem yang relatif baru (OSX 10.10.3).
livingtech
Coba buat itu.
crmpicco
Bukan bash_completion, git_completion yang melakukan hal yang berbeda.
Michael Durrant
@MichaelDurrant Berhasil. Percayalah kepadaku. ;) Prowrestlingtees.com/media/catalog/product/cache/1/image/...
crmpicco
@crmpicco Bisakah Anda memberikan instruksi untuk membuat /etc/bash_completion.d/git? Itu akan membuat jawaban Anda lebih berharga.
Dannid