(Mac) -bash: __git_ps1: perintah tidak ditemukan

222

Saya mencoba untuk mengubah promt perintah saya di terminal. Saya terus mendapatkan kesalahan:

-bash: __git_ps1: command not found

Saya sudah mencoba hanya dengan mengetikkan ke terminal seperti: __git_ps1. Saya juga sudah mencobanya di.bash_profile

if [ -f ~/.git-completion.bash ]; then
  source ~/.git-completion.bash
  export PS1='[\W]$(__git_ps1 "(%s)"): '
fi

Karena Anda mungkin dapat melihat / memberi tahu, ya, saya telah menyelesaikan pelengkapan otomatis dan bekerja dengan sangat baik!

Saya menemukan pertanyaan ini: " PS1 env variable tidak berfungsi pada mac " yang memberikan kode

alias __git_ps1="git branch 2>/dev/null | grep '*' | sed 's/* \(.*\)/(\1)/'"

Jadi saya menambahkannya pada .bash_profileharapan saya bahwa itu akan mengubah sesuatu. Ya, benar. Itu baru saja mengubah output kesalahan.

Inilah .bash_profiledengan tambahannya:

alias __git_ps1="git branch 2>/dev/null | grep '*' | sed 's/* \(.*\)/(\1)/'"

if [ -f ~/.git-completion.bash ]; then
  source ~/.git-completion.bash
  export PS1='[\W]$(__git_ps1 "(%s)"): '
fi

Dan sekarang inilah output kesalahan yang diubah:

sed: (%s): No such file or directory

Catatan: Saya juga memindahkan alias di bawah sumber tanpa perbedaan. Saya memiliki git versi 1.7.12.1

Ini harus menjadi perubahan sederhana. Bisakah seseorang tolong saya?

Edit 10/13/12

Tidak, saya pasti tidak ingin mendefinisikan __git_ps1 sendiri tetapi hanya mencoba untuk melihat apakah itu akan dikenali dengan melakukannya. Ya, saya sudah .git-completion.bashmenginstal file. Inilah cara saya mendapatkan penyelesaian otomatis di mesin saya.

cd ~
curl -OL https://github.com/git/git/raw/master/contrib/completion/git-completion.bash
mv ~/git.completion.bash ~/.git-completion.bash

Sebuah ls -lakemudian daftar .git-completion.bashberkas.

Sunting 10/13/12 - Dipecahkan oleh Mark Longair (di bawah)

Kode berikut ini berfungsi untuk saya .bash_profilesementara yang lain tidak ...

if [ -f ~/.git-prompt.sh ]; then
  source ~/.git-prompt.sh
  export PS1='Geoff[\W]$(__git_ps1 "(%s)"): '
fi
Geoff
sumber
Saya git-completion.bashmendefinisikan __git_ps1sebagai fungsi shell. Apakah milikmu Bagaimana Anda tahu penyelesaian berhasil? Apa yang terjadi ketika Anda mengetikkan git h<TAB>?
rob mayoff
Ketika saya mengetik itu, ia berakhir dengan git help [space]
Geoff
Jawaban yang diterima baik tetapi prompt juga dapat diaktifkan dengan menekan git <tab>seperti yang tercantum dalam komit yang dirujuk oleh Mark Longair.
Jack Frost
Itu tidak hanya pertanyaan penjelasan yang bagus, tetapi juga sumber daya yang membantu membimbing solusi. Suara positif yang layak diterima.
Yannis Dran
Pemeriksaan -f berfungsi untuk memperbaiki kesalahan ini ketika menjalankan bash di dalam layar (1) pada OS X 10.8.5. Tidak tahu mengapa, karena file itu ada terlepas, tapi terima kasih tidak kurang!
Nick K9

Jawaban:

324

Anda telah menginstal versi git-completion.bashdari master- di riwayat pengembangan git, ini setelah komit yang membagi __git_ps1fungsi dari fungsionalitas penyelesaian menjadi file baru ( git-prompt.sh). Komit yang memperkenalkan perubahan ini, yang menjelaskan alasannya, adalah af31a456 .

Saya masih menyarankan agar Anda hanya mencari versi git-completion.bash(atau git-prompt.sh) yang dibundel dengan instalasi git Anda.

Namun, jika karena alasan tertentu Anda masih ingin menggunakan fungsi ini dengan menggunakan skrip yang diunduh secara terpisah master, Anda harus mengunduh dengan git-prompt.shcara yang sama:

curl -o ~/.git-prompt.sh \
    https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh

... dan tambahkan baris berikut ke Anda ~/.bash_profile:

source ~/.git-prompt.sh

Maka PS1variabel Anda yang termasuk __git_ps1 '%s'harus bekerja dengan baik.

Mark Longair
sumber
Anda benar bahwa saya tidak ingin mendefinisikan __git_ps1 sendiri. Saya hanya mencoba untuk melihat apakah itu akan mengenalinya dan tidak. Saya memiliki .git-completion.bash di root saya. Saya akan memperbarui pertanyaan saya di atas untuk menyertakan cara penyelesaian otomatis berfungsi ...
Geoff
@ designer84: terima kasih atas informasi tambahan - Saya pikir sudah jelas sekarang apa masalahnya, dan saya telah memperbarui jawaban saya dengan penjelasan.
Mark Longair
Mengapa ini tidak berhasil? jika [-f /usr/local/git/contrib/completion/git-completion.bash]; lalu sumber /usr/local/git/contrib/completion/git-completion.bash export PS1 = '[\ W] $ (__ git_ps1 "(% s)"):' fi
Geoff
5
Pada OSX 10.9 dengan git 1.8.5.3 diinstal melalui Homebrew, keduanya git-prompt.shdan git-completion.bashditemukan di `brew --prefix git`/etc/bash_completion.d/.
dokkaebi
1
Di MacPorts, lintasan berubah ketika paket git-coredigantikan oleh git, lihat pertanyaan ini
Ramon de la Fuente
60

Setelah memutakhirkan ke OSX 10.9 Mavericks saya harus merujuk file berikut untuk mendapatkan penyelesaian perintah git shell dan git meminta untuk bekerja lagi.

Dari .bash_profile saya atau yang serupa:

if [ -f /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-completion.bash ]; then
    . /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-completion.bash
fi

source /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh

#shell prompt example
PS1='\u $(__git_ps1 "(%s)")\$ '
haysclark
sumber
Ini juga masalah saya di osv 10.9
jeremyjjbrown
Sementara respons yang diterima dari @marklongair adalah deskripsi yang baik, saya menemukan pertanyaan ini melalui pencarian pesan kesalahan Google (setelah memutakhirkan ke OS 10.10) dan jawaban ini adalah solusi paling sederhana untuk masalah saya (hanya mengubah jalur ke lokasi baru ).
RedBassett
Ini bekerja untuk saya di 10.10.5 Yosemite, namun saya mengubah lokasi git-prompt menjadi ~/.git_prompt.sh. Solusi lain tidak berhasil.
Rein
Saya menambahkan baris yang disarankan ke .bash_profile , tetapi saya masih mendapatkan kesalahan:bash: __docker_machine_ps1: command not found
IgorGanapolsky
43

Kamu harus

$ brew install bash bash-completion git

Kemudian sumber "$ (buatan --prefix) / etc / bash_completion" di .bashrc Anda.

Steven Shaw
sumber
Jawaban yang bagus, pasti cara terbaik jika git diinstal dengan brew. Tapi saya pikir Anda perlu sumber ini: source $ (brew --prefix)
/etc/bash_completion.d/git-prompt.sh
1
@ Februari Ya, lokasinya berubah. Saya sudah memperbarui jawabannya. Terima kasih.
Steven Shaw
Ini tidak berfungsi. Saya mendapatkan kesalahan: bash: /usr/local/etc/bash_completion.d/git-prompt.sh: Izin ditolak bash: __docker_machine_ps1: perintah tidak ditemukan
IgorGanapolsky
14

Berikut ini bekerja untuk saya seperti pesona:

Jalankan berikut di Terminal Anda:

curl -L https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh > ~/.bash_git

Buka / Buat bash_profile:

$ vi ~/.bash_profile

Tambahkan berikut ke file:

source ~/.bash_git
export PS1='\[\033[01;32m\]os \[\033[01;34m\]\w $(__git_ps1 "[%s]")\$\[\033[00m\] '
export GIT_PS1_SHOWDIRTYSTATE=1
export GIT_PS1_SHOWUPSTREAM="auto"

Akhirnya, sumber menggunakan:

$ source ~/.bash_profile

Ini akan menyelesaikan masalah bash: __git_ps1: command not found.

Anda juga akan berubah menjadi "os". Untuk mengubah "os" menjadi sesuatu yang lain, modifikasi string "os" di jalur ekspor PS1.

Usman
sumber
Saya masih mendapatkan kesalahan sh -c "hapus && / bin / bash" bash: __docker_machine_ps1: perintah tidak ditemukan setiap kali saya memasuki Docker CLI.
IgorGanapolsky
8

Solusi untuk MacOS Sierra dan git versi 2.10.1 <2017-2-06>

Langkah 1: Instal Git

Anda dapat melewati langkah ini jika Anda sudah menginstal git terbaru.

Unduh paket git dari browser https://git-scm.com/download/

Catatan: jika Anda menginstal dengan curl [option] https://...opsi untuk mengunduh, Anda harus memastikan sistem Anda mendukung SSL. Jadi bagi pendatang baru, mengunduh dari peramban dan menginstal langsung dari git installer jauh lebih mudah.

Verifikasi Instalasi:
  • Tampilkan di mana direktori git Anda di: which git
  • Tampilkan versi git Anda saat ini: git --versionversi saat ini seharusnya 2.10.1.

Langkah 2: Tambahkan profil git Anda ke shell Anda

  1. Buka profil shell Anda:
    • nano ~/.bash_profileatau nano ~/.bashrcTergantung di mana modifikasi Anda.
  2. Tambahkan kode berikut ke file:
    • source /usr/local/git/contrib/completion/git-completion.bash
    • source /usr/local/git/contrib/completion/git-prompt.sh

Catatan: lokasi instalasi git berubah dari opt / direktori ke usr / local / setelah upgrade OSX ke El Capitain, dan inilah sebabnya beberapa jawaban lama di atas tidak berfungsi lagi di MacOS Sierra.

  1. Tambahkan kode berikut ke konfigurasi PS1 Anda:

    • Opsi 1: tambahkan langsung ke PS1 Anda: export PS1='\w$(__git_ps1 "(%s)") > '

      Saya lebih suka pendekatan sederhana ini karena saya sudah tahu .git-completion.bashada di direktori home saya, dan saya bisa menambahkan format prompt lainnya di depannya. di sini adalah prompt pribadi saya untuk referensi Anda:export PS1='\t H#\! \u:\w$(__git_ps1 "{%s}") -->> '
    • Opsi 2: Tambahkan skrip pilihan

    jika [-f ~ / .git-completion.bash]; kemudian
          ekspor PS1 = '\ w $ (__ git_ps1 "(% s)")>'
    fi
  2. Simpan dan gunakan profil: source ~/.bash_profileatausource ~/.bashrc

Sekarang Anda akan melihat prompt git bekerja dengan baik dan menunjukkan Anda berada di cabang mana saat ini.

sumber
5

Saya memiliki masalah yang sama ketika meningkatkan ke Yosemite.

Aku hanya harus memodifikasi ~/.bashrcuntuk source /usr/local/etc/bash_completion.d/git-prompt.shbukan jalur lama.

kemudian sumber ulang Anda . ~/.bashrcuntuk mendapatkan efek.

kenyal
sumber
5

Solusi bersih Sierra tinggi dengan warna!

Tidak ada unduhan. Tidak ada minuman Tanpa Xcode

Cukup tambahkan ke ~ / .bashrc atau ~ / .bash_profile Anda

export CLICOLOR=1
[ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh ] && . /Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh
export GIT_PS1_SHOWCOLORHINTS=1
export GIT_PS1_SHOWDIRTYSTATE=1
export GIT_PS1_SHOWUPSTREAM="auto"
PROMPT_COMMAND='__git_ps1 "\h:\W \u" "\\\$ "'
luzik
sumber
4

__git_ps1 untuk bash sekarang ditemukan di git-prompt.sh di /usr/local/etc/bash_completion.d pada minuman saya instal versi git 1.8.1.5

Traday
sumber
2

ini berfungsi di OS 10.8 di .bash_profile

if [ -f ~/.git-prompt.sh ]; then
  source ~/.git-prompt.sh
  export PS1='YOURNAME[\W]$(__git_ps1 "(%s)"): '
fi
slozier
sumber
Tidak memperbaiki kesalahan: bash: __docker_machine_ps1: perintah tidak ditemukan
IgorGanapolsky
2

Untuk macports saya harus menambahkan: source /opt/local/share/git-core/git-prompt.shke ./profile saya

velop
sumber
1
@IgorGanapolsky Saya kira Anda tidak menginstal macports ? Lakukan saja touch ~/.profile. Tetapi Anda jelas membutuhkan file di: /opt/local/share/git-core/git-prompt.sh
velop
2

Jika Anda berharap untuk menggunakan Homebrew untuk meningkatkan Git dan Anda telah membiarkan sistem Anda menjadi ketinggalan zaman secara umum (seperti yang saya lakukan), Anda mungkin perlu membawa Homebrew sendiri yang terbaru (seperti pembaruan per brew) : File pohon yang tidak terlacak berikut ini akan ditimpa oleh gabungan: thanks @ chris-frisina)

Pertama bawa Homebrew sejalan dengan versi saat ini

cd / usr /
git lokal mengambil asal
git reset --barang asli / master

Kemudian perbarui Git:

buat upgrade git

Masalah diselesaikan! ;-)

Hari Davis Waterbury
sumber
2

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
jrc
sumber
2
  1. Unduh file git-prompt.sh dan git-completion.bash dari penyelesaian Git ini
  2. Ganti nama file.
  3. Pindahkan file-file itu ke direktori home Anda.
  4. Tambahkan file sumber ke .bash_profile

    source ~/git-completion0.bash
    source ~/git-prompt0.sh
    and four to trigger the code block.
    
JCLopez
sumber
1

Saya tahu itu bukan jawaban nyata ...

Saya punya beberapa masalah aneh dengan sumber git-prompt.sh di .bashrc saya jadi saya mulai mencari solusi lain. Yang ini: http://www.jqno.nl/post/2012/04/02/howto-display-the-current-git-branch-in-your-prompt/ tidak menggunakan __git_ps1 dan penulis mengklaim itu berfungsi juga pada Mac (untuk saat ini berfungsi dengan baik di Ubuntu saya dan mudah untuk men-tweak).

Saya harap ini membantu!

op1ekun
sumber
1

Saya melakukan kursus tentang Udacity untuk git hub dan mengalami masalah yang sama. Ini kode terakhir saya yang membuat berfungsi dengan benar.

# Change command prompt
alias __git_ps1="git branch 2>/dev/null | grep '*' | sed 's/* \ .   (.*\)/(\1)/'"

if [ -f ~/.git-completion.bash ]; then
  source ~/.git-completion.bash
  export PS1='[\W]$(__git_ps1 "(%s)"): '
fi

source ~/.git-prompt.sh
export GIT_PS1_SHOWDIRTYSTATE=1
# '\u' adds the name of the current user to the prompt
# '\$(__git_ps1)' adds git-related stuff
# '\W' adds the name of the current directory
export PS1="$purple\u$green\$(__git_ps1)$blue \W $ $reset"

Berhasil! https://i.stack.imgur.com/d0lvb.jpg

superheron
sumber
0

Yang ini bekerja untuk saya, dan itu sudah berwarna keluaran git dan indikator di prompt apakah file telah diubah / ditambahkan, langsung dimasukkan ke dalamnya:

GIT_PS1_SHOWDIRTYSTATE=true

. /usr/local/Cellar/git/1.8.5.2/etc/bash_completion.d/git-completion.bash
. /usr/local/Cellar/git/1.8.5.2/etc/bash_completion.d/git-prompt.sh

PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '

Pastikan untuk menggunakan jalur yang benar! Saya menggunakan homebrew untuk menginstal git, gunakan brew list gituntuk mendapatkan path ke instalasi Anda saat ini.

Akan menyenangkan untuk tidak menggunakan jalur kode keras, tetapi tidak tahu cara mendapatkan jalur ke instalasi saat ini.

Info lebih lanjut di sini: http://en.newinstance.it/2010/05/23/git-autocompletion-and-enhanced-bash-prompt/

Joshua Muheim
sumber
0

Untuk git, ada /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh. Dan tolong lihat /etc/bashrc_Apple_Terminaljuga.

Jadi, saya taruh ini di ~/.bash_profile:

if [ -f /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh ]; then
  . /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh
  export GIT_PS1_SHOWCOLORHINTS=1
  export GIT_PS1_SHOWDIRTYSTATE=1
  PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }__git_ps1 '\u:\w' '\\\$ '"
fi
liudongmiao
sumber
Masih mendapatkan kesalahan ini:bash: __docker_machine_ps1: command not found
IgorGanapolsky
0

Kata Pengantar: maaf karena tidak mengomentari jawaban jawaban haysclark dan membuat yang baru, hanya tidak cukup perwakilan.

Harap jangan lakukan itu, jika Anda belum menginstal git melalui Xcode atau home-brew, Anda mungkin akan menemukan skrip bash yang mengacu pada haysclarks /Library/Developer/CommandLineTools/, dan bukan di /Applications/Xcode.app/Contents/Developer/, sehingga membuat baris untuk disertakan dalam .bashrc berikut ini:

if [ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash ]; then
    . /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash
fi

source /Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh

Anda akan membutuhkan baris tersebut jika Anda ingin menggunakan git-prompt juga.

Simone Chiesi
sumber