Bagaimana cara mendapatkan git-completion.bash agar dapat bekerja di Mac OS X?


92

Saya telah mengikuti http://blog.bitfluent.com/post/27983389/git-utilities-you-cant-live-without untuk menambahkan git-completion.bashke saya/opt/local/etc/bash_completion.d/git-completion

dan saya memasukkan PS1='\h:\W$(__git_ps1 "(%s)") \u\$ '.bashrc_profile saya

Tapi sekarang saya mendapatkan -bash: __git_ps1: command not foundsemua yang saya lakukan ini cd.

Bisakah Anda memberi tahu saya apa yang saya lewatkan?


Jawaban:


65

Saya menginstal git menggunakan MacPorts pada instalasi Snow Leopard baru saya. Setelah MacPorts diinstal dari gambar .dmg, ini akan menjadi perintah di Terminal.app:

sudo port selfupdate
sudo port install git-core +bash_completion

Jika Anda juga ingin dukungan untuk menarik dari repositori dan dokumen SVN, gunakan ini sebagai ganti dari baris kedua:

sudo port install git-core +bash_completion +doc +svn

Kemudian tambahkan berikut ini ke ~ / .profile atau ~ / .bash_profile Anda:

# Penyelesaian perintah shell MacPorts Bash
jika [-f / opt / local / etc / bash_completion]; kemudian
    . / opt / local / etc / bash_completion
fi

atau untuk MacPorts sejak versi 2.1.2 di Mountain Lion:

# Penyelesaian perintah shell MacPorts Bash
jika [-f /opt/local/etc/profile.d/bash_completion.sh]; kemudian
  . /opt/local/etc/profile.d/bash_completion.sh
fi

atau untuk MacPorts dengan versi git yang lebih baru:

if [-f /opt/local/share/git-core/git-prompt.sh]; kemudian
    . /opt/local/share/git-core/git-prompt.sh
fi

Catatan: bash 4.1 atau lebih tinggi diperlukan oleh bash_completion.sh. Jika penyelesaian tidak berhasil cobalah echo $BASH_VERSIONuntuk melihat apakah itu masalahnya. Jika demikian, masukkan bash MacPorts dengan mengetik bashdan coba git selesai lagi.


Saya hanya menyalin yang disisipkan, dan saya masih mendapatkan kesalahan yang dimiliki OP. = \. Bagaimana Anda tahu apa yang dimasukkan? Saya tidak tahu bash_completion bersumber
NullVoxPopuli

perhatikan dengan versi git / macport / bash-completion yang lebih baru, prompt ada di file yang berbeda. Lihat: trac.macports.org/ticket/36334 if [ -f /opt/local/share/git-core/git-prompt.sh ]; then . /opt/local/share/git-core/git-prompt.sh fi
Yehosef

3
Karena /opt/local/etc/profile.d/bash_completion.shmemerlukan $BASH_VERSION4.1 atau lebih baik, saya harus melakukan hal berikut pada Mac OS X 10.8.3 dengan MacPorts 2.1.3: Ganti shell login Mac OS X dari default /bin/bash(3.2.48 (1) -release) ke MacPorts /opt/local/bin/bash(4.2 .42 (2) -release) seperti dijelaskan di sini: stackoverflow.com/a/791244/287984. Pada dasarnyaif [ `grep /opt/local/bin/bash /etc/shells` ]; then echo /opt/local/bin/bash | chsh -s /opt/local/bin/bash; else echo /opt/local/bin/bash | sudo tee -a /etc/shells; chsh -s /opt/local/bin/bash; fi
Uwe Günther

Bekerja dengan baik untuk saya. Harus mengganti /bin/bashdi Terminal.app dengan /opt/local/bin/bashdari macports + semua .bash_profileperubahan yang disarankan di sini.
bgs

1
Untuk memindahkan untuk bash 4.1 atau lambat Anda dapat mengikuti petunjuk di sini: apple.stackexchange.com/questions/70132/...
ThomasW

55

Jika Anda menginstal git menggunakan homebrew, Anda mungkin akan sedikit menyesuaikan saran MacPorts dan menambahkannya ke .bash_profiledan.bashrc

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

Cara terbaik untuk memeriksa apakah Anda telah menginstal git dengan benar menggunakan ist homebrew untuk dieksekusi

brew info git

dan periksa output untuk direktori instal penyelesaian git bash

Versi terbaru dari Git (1.7.12) juga membutuhkan yang berikut untuk mengaktifkan prompt.

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

Untuk lebih lanjut tentang __git_ps1, lihat superuser.com/a/477749/90231 jawaban dalam tumpukan ini.
RichVel

26

Yang perlu Anda lakukan adalah menempatkan git-completion.bashfile di bindirektori home pengguna Anda dan menempatkan yang berikut di dalam Anda .profileatau .bash_profilefile:

export PATH="$HOME/bin:$PATH"
source ~/bin/git-completion.bash
PS1='[\u@\h \w$(__git_ps1 " (%s)")]\$ '

Apa yang dilakukan adalah memastikan bahwa nampan lokal Anda ada di PATH dan sourceperintah membuat semuanya berjalan. Maka tentu saja perubahan PS1 menempatkan cabang saat ini diperiksa di prompt.

Jadi, tidak ada MacPort yang diinstal untuk menginstal versi GIT "penyelesaian" (terutama yang menjengkelkan jika Anda sudah menginstalnya).



1
Bagi mereka yang bertanya-tanya bagaimana cara menggabungkan hal PS1 dengan warna di prompt Anda lihat: stackoverflow.com/questions/816790/…
Nickolay

1
Lebih tepatnya, git-completion.bash hanya perlu berada di suatu tempat di Anda $PATH. Saya memutuskan untuk memasukkan milik saya /usr/local/bin/sehingga saya tidak perlu memodifikasi yang sudah ada $PATH.
metavida

13

Sementara jawaban saat ini benar untuk MacPorts lama, ada masalah baru dengan MacPorts terbaru menghasilkan kesalahan yang sama.

Paket penyelesaian-bash saat ini (2.0 r1) membutuhkan setidaknya bash 4.1 untuk berfungsi dengan baik. Seperti biasa OS X Terminal menggunakannya /bin/bashhanya mendapat 3.x. Anda harus mengubah pengaturan terminal untuk digunakan /opt/local/bin/bash -lseperti yang dijelaskan dalam dokumentasi MacPorts di sini: http://trac.macports.org/wiki/howto/bash-completion


Ini adalah jawaban yang paling benar karena saya baru mulai mengalami masalah setelah memperbarui macports. Satu-satunya downside untuk menggunakan macports bash dari terminal adalah bahwa sekarang memperingatkan saya tentang penghentian proses yang berjalan ketika saya mencoba untuk menutup jendela terminal saya - apakah Anda mengalami ini?
vitch


5

Mengganggu ini telah rusak lagi. Kali ini dengan orang-orang git dengan versi 1.7.12-1. Untuk memungkinkan orang memiliki fungsionalitas prompt saja tanpa fungsionalitas penyelesaian (yang dapat memperlambat segalanya), mereka refactored fungsionalitas prompt dari bash_completion / git dan ke dalam file sendiri git-prompt.sh.

Jadi menambahkan bash_completion seperti yang dijelaskan oleh @Lara hanya akan membuat Anda selesai (tab memukul melengkapi tag / nama cabang).

Untuk mendapatkan __git_ps1sehingga Anda dapat menggunakannya di prompt PS1 Anda, Anda juga perlu menambahkan berikut ini ke profil ~ /.

. /opt/local/share/doc/git-core/contrib/completion/git-prompt.sh

Beberapa latar belakang ada di sini - https://bbs.archlinux.org/viewtopic.php?pid=1163632#p1163632



3

Atau dengan Homebrew

brew install bash-completion git-extras

2
Terima kasih banyak. Seharusnya brew install bash-completion git-extras(lari bukan garis bawah).
simonair


2

Untuk Mountain Lion dan Mac-Ports saya perlu menggunakan baris berikut di .bash_profile untuk mendapatkan __git_ps1 dan pelengkap agar berjalan normal:

# Bash shell command completion
if [ -f /opt/local/share/doc/git-core/contrib/completion/git-completion.bash ]; then
  . /opt/local/share/doc/git-core/contrib/completion/git-completion.bash
fi

if [ -f /opt/local/share/doc/git-core/contrib/completion/git-prompt.sh ]; then
  . /opt/local/share/doc/git-core/contrib/completion/git-prompt.sh
fi

1

Saya menggunakan minuman, jadi bash_completionskrip master yang menjalankan semua yang ada di bash_completion.dtampaknya tidak disediakan. Solusi yang mengusulkan hanya menjalankan satu skrip untuk menambahkan penyelesaian git tidak dapat diperpanjang, karena paket yang berbeda akan menambahkan skrip penyelesaian yang berbeda, dan Anda mungkin ingin menjalankan semuanya. Karena itu saya menambahkan ini (diadaptasi dari Arch Linux) ke akhir /etc/bashrc:

# source compat completion directory definitions
BASH_COMPLETION_COMPAT_DIR=/usr/local/etc/bash_completion.d
if [[ -d $BASH_COMPLETION_COMPAT_DIR && -r $BASH_COMPLETION_COMPAT_DIR && \
    -x $BASH_COMPLETION_COMPAT_DIR ]]; then
    for i in $(LC_ALL=C command ls "$BASH_COMPLETION_COMPAT_DIR"); do
        i=$BASH_COMPLETION_COMPAT_DIR/$i
        [[ -f $i && -r $i ]] && . "$i"
    done
fi

1

Setidaknya dengan Xcode 6, Anda sudah memilikinya git-completion.bash. Itu ada di dalam bundel aplikasi Xcode.

Cukup tambahkan ini ke .bashrc Anda:

source `xcode-select -p`/usr/share/git-core/git-completion.bash

Ini adalah satu-satunya jawaban yang benar-benar bekerja untuk saya. Jawaban lain menghasilkan kesalahan aneh ketika Anda mengetik perintah yang tidak lengkap sepertigit br<TAB>
r00m

0

Selain posting Adam K. Johnson

Anda juga dapat menempatkan yang berikut ...

# MacPorts Bash shell command completion
if [ -f /opt/local/etc/bash_completion ]; then
    . /opt/local/etc/bash_completion
fi

... di / etc / profile Anda, jika Anda mau.

Dengan cara itu semua pengguna pada sistem akan mendapat manfaat dari setiap skrip penyelesaian bash yang dipasang di direktori "/opt/local/etc/bash_completion.d/".


0

Sementara jawaban di atas oleh grundprinzip dari 2011 masih berfungsi dengan baik, saya ingin menambahkan jawaban yang lebih baru sekarang bahwa sekarang ada paket bash-completion paket Homebrew ( formula , repo ) yang membuat ini lebih mudah. (Ini termasuk penyelesaian untuk git serta alat umum lainnya.)

Hari ini macOS dikirimkan dengan Bash 3, tetapi Anda bisa brew install bashmendapatkan Bash 4. Jika Anda menjalankan Bash 4, instal cabang 2.x yang lebih baru dari penyelesaian bash.

Bash 4

  1. Lari:

    brew install bash-completion@2
  2. Tambahkan ke ~/.bash_profile:

    if [ -f /usr/local/share/bash-completion/bash_completion ]; then
      . /usr/local/share/bash-completion/bash_completion
    fi

Bash 3

Jika Anda ingin tetap menggunakan stock bash 3.x di macOS, ikuti petunjuk ini sebagai gantinya.

  1. Lari:

    brew install bash-completion
  2. Tambahkan ke ~/.bash_profile:

    echo "[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion" >> ~/.bash_profile

Referensi: http://davidalger.com/development/bash-completion-on-os-x-with-brew/


-2

Saya pikir Anda mungkin lupa sumber file di login .bashrcAnda, Anda dapat menambahkan sesuatu seperti:

. ./path/to/your/file.ext

Menggunakan .diikuti oleh spasi menjalankan file dalam konteks saat ini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.