(Mac) -bash: __git_ps1: không tìm thấy lệnh


222

Tôi đang cố gắng thay đổi lệnh của tôi trong thiết bị đầu cuối. Tôi tiếp tục nhận được lỗi:

-bash: __git_ps1: command not found

Tôi đã thử nó chỉ bằng cách gõ nó vào thiết bị đầu cuối như : __git_ps1. Tôi cũng đã thử nó trong.bash_profile

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

Như bạn có thể thấy / nói, vâng, tôi đã cài đặt tự động hoàn thành và nó hoạt động rất tốt!

Tôi đã gặp câu hỏi này: " Biến env PS1 không hoạt động trên mac " cung cấp mã

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

Vì vậy, tôi thêm nó vào .bash_profilehy vọng rằng nó sẽ thay đổi một cái gì đó. Vâng, nó đã làm. Nó chỉ thay đổi đầu ra lỗi.

Đây là .bash_profilephần bổ sung:

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

Và bây giờ đây là đầu ra lỗi đã thay đổi:

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

Lưu ý: Tôi cũng đã di chuyển bí danh bên dưới nguồn không có sự khác biệt. Tôi có phiên bản git 1.7.12.1

Đây phải là một thay đổi đơn giản. Ai đó có thể vui lòng giúp tôi?

Chỉnh sửa 10/13/12

Không, tôi chắc chắn không muốn tự xác định __git_ps1 mà chỉ cố gắng xem liệu nó có được nhận ra hay không bằng cách làm như vậy. Có, tôi đã .git-completion.bashcài đặt tập tin. Đây là cách tôi đã hoàn thành tự động trên máy của mình.

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

A ls -lasau đó liệt kê các .git-completion.bashtập tin.

Chỉnh sửa 10/13/12 - Được giải quyết bởi Mark Longair (bên dưới)

Các mã sau đây làm việc cho tôi trong .bash_profilekhi những người khác không ...

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

My git-completion.bashđịnh nghĩa __git_ps1là hàm shell. Có phải của bạn không? Làm thế nào để bạn biết hoàn thành là làm việc? Điều gì xảy ra khi bạn nhập git h<TAB>?
cướp mayoff

Khi tôi gõ nó, nó kết thúc với trợ giúp git [dấu cách]
Geoff

Câu trả lời được chấp nhận là tốt nhưng lời nhắc cũng có thể được kích hoạt bằng cách nhấn git <tab>như đã lưu ý trong cam kết được tham chiếu bởi Mark Longair.
Jack Frost

Đó không chỉ là một câu hỏi giải thích tốt, mà còn là một nguồn tài nguyên hữu ích hướng dẫn giải pháp. Một upvote xứng đáng.
Yannis Dran

Kiểm tra -f đã hoạt động để khắc phục lỗi này khi chạy bash bên trong màn hình (1) trên OS X 10.8.5. Không biết tại sao, vì tập tin tồn tại bất kể, nhưng cảm ơn không ít!
Nick K9

Câu trả lời:


324

Bạn đã cài đặt phiên bản git-completion.bashtừ master- trong lịch sử phát triển của git, đây là sau khi một cam kết tách __git_ps1chức năng khỏi chức năng hoàn thành thành một tệp mới ( git-prompt.sh). Cam kết đưa ra sự thay đổi này, giải thích lý do căn bản, là af31a456 .

Tôi vẫn sẽ đề nghị bạn chỉ cần nguồn phiên bản git-completion.bash(hoặc git-prompt.sh) đi kèm với cài đặt git của bạn.

Tuy nhiên, nếu vì lý do nào đó bạn vẫn muốn sử dụng chức năng này bằng cách sử dụng các tập lệnh được tải xuống riêng biệt master, bạn nên tải xuống git-prompt.shtương tự:

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

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

source ~/.git-prompt.sh

Sau đó, PS1biến của bạn bao gồm __git_ps1 '%s'nên hoạt động tốt.


Bạn nói đúng rằng tôi không muốn tự xác định __git_ps1. Tôi chỉ cố gắng xem liệu nó có nhận ra nó không. Tôi có .git-xong.bash trên root của tôi. Tôi sẽ cập nhật câu hỏi của mình ở trên để bao gồm cách tôi hoàn thành tự động hoạt động ...
Geoff

@ designer84: cảm ơn vì thông tin bổ sung - Tôi nghĩ bây giờ rõ ràng vấn đề là gì và tôi đã cập nhật câu trả lời của mình bằng một lời giải thích.
Mark Longair

Tại sao cai nay không hoạt động? if [-f /usr/local/git/contrib/completion/git-completion.bash]; sau đó nguồn /usr/local/git/contrib/completion/git-completion.bash export PS1 = '[\ W] $ (__ git_ps1 "(% s)"):' fi
Geoff

5
Trên OSX 10.9 với git 1.8.5.3 được cài đặt qua Homebrew, cả hai git-prompt.shgit-completion.bashđược tìm thấy trong `brew --prefix git`/etc/bash_completion.d/.
dokkaebi

1
Trong MacPorts, đường dẫn đã thay đổi khi gói git-coređược thay thế bằng git, hãy xem câu hỏi này
Ramon de la Fuente

60

Sau khi nâng cấp lên OSX 10.9 Mavericks, tôi phải tham khảo các tệp sau để hoàn thành lệnh git shell và dấu nhắc git để hoạt động trở lại.

Từ .bash_profile của tôi hoặc tương tự:

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)")\$ '

Đây cũng là vấn đề của tôi trong osv 10.9
jeremyjjbrown

Mặc dù phản hồi được chấp nhận từ @marklongair là một mô tả hay, tôi đã tìm thấy câu hỏi này thông qua tìm kiếm thông báo lỗi của Google (sau khi nâng cấp lên OS 10.10) và câu trả lời này là giải pháp đơn giản nhất cho vấn đề của tôi (chỉ cần thay đổi đường dẫn đến vị trí mới ).
RedBassett

Điều này làm việc cho tôi trong 10.10.5 Yosemite, tuy nhiên tôi đã thay đổi vị trí của git-prompt thành ~/.git_prompt.sh. Các giải pháp khác không hoạt động.
Tái lập

Tôi đã thêm dòng gợi ý của bạn để .bash_profile , nhưng tôi vẫn nhận được lỗi:bash: __docker_machine_ps1: command not found
IgorGanapolsky

43

Bạn nên

$ brew cài đặt bash bash-hoàn thành git

Sau đó, nguồn "$ (brew --prefix) / etc / bash_completion" trong .bashrc của bạn.


Câu trả lời tuyệt vời, chắc chắn là cách tốt nhất nếu git được cài đặt với brew. Nhưng tôi nghĩ bạn cần nguồn này: nguồn $ (brew --prefix)
/etc/bash_completion.d/git-prompt.sh

1
@febLey Vâng, địa điểm đã thay đổi. Tôi đã cập nhật câu trả lời. Cảm ơn.
Steven Shaw

Điều này không hoạt động. Tôi nhận được lỗi: bash: /usr/local/etc/bash_completion.d/git-prompt.sh: Permission denied bash: __docker_machine_ps1: command not found
IgorGanapolsky

14

Sau đây làm việc cho tôi như một nét duyên dáng:

Chạy theo sau trong Terminal của bạn:

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

Mở / Tạo bash_profile:

$ vi ~/.bash_profile

Thêm vào sau vào tập tin:

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"

Cuối cùng, nguồn nó bằng cách sử dụng:

$ source ~/.bash_profile

Điều này sẽ giải quyết vấn đề của bash: __git_ps1: command not found.

Ngoài ra lời nhắc của bạn sẽ thay đổi thành "os". Để thay đổi "os" thành một thứ khác, hãy sửa đổi chuỗi "os" trong dòng PS1 xuất.


Tôi vẫn gặp lỗi sh -c "xóa && / bin / bash" bash: __docker_machine_ps1: lệnh không được tìm thấy mỗi khi tôi nhập Docker CLI.
IgorGanapolsky

8

Giải pháp cho MacOS Sierra và git phiên bản 2.10.1 <2017-2-06>

Bước 1: Cài đặt Git

Bạn có thể bỏ qua bước này nếu bạn đã cài đặt git mới nhất.

Tải xuống gói git từ trình duyệt https://git-scm.com/doad/

Lưu ý: nếu bạn cài đặt với curl [option] https://...tùy chọn để tải xuống, bạn sẽ phải đảm bảo hệ thống của bạn hỗ trợ SSL. Vì vậy, đối với người mới, để tải xuống từ trình duyệt và cài đặt trực tiếp từ trình cài đặt git dễ dàng hơn nhiều.

Xác minh cài đặt:
  • Hiển thị thư mục git của bạn ở đâu: which git
  • Hiển thị phiên bản git của bạn hiện tại là: git --versionphiên bản hiện tại phải là 2.10.1.

Bước 2: Thêm hồ sơ git của bạn vào vỏ của bạn

  1. Mở hồ sơ shell của bạn:
    • nano ~/.bash_profilehoặc nano ~/.bashrcphụ thuộc vào nơi sửa đổi của bạn.
  2. Thêm mã sau vào tệp:
    • source /usr/local/git/contrib/completion/git-completion.bash
    • source /usr/local/git/contrib/completion/git-prompt.sh

Lưu ý: vị trí cài đặt git đã thay đổi từ opt / thư mục thành usr / local / sau khi nâng cấp OSX lên El Capitain và đây là lý do tại sao một số câu trả lời cũ ở trên không còn hoạt động nữa trong MacOS Sierra.

  1. Thêm mã sau vào cấu hình PS1 của bạn:

    • Tùy chọn 1: thêm trực tiếp vào PS1 của bạn: export PS1='\w$(__git_ps1 "(%s)") > '

      Tôi thích cách tiếp cận đơn giản này vì tôi đã biết .git-completion.bashnó có trong thư mục nhà của tôi và tôi có thể thêm định dạng nhắc nhở khác ở phía trước của nó. đây là lời nhắc cá nhân của tôi để bạn tham khảo:export PS1='\t H#\! \u:\w$(__git_ps1 "{%s}") -->> '
    • Tùy chọn 2: Thêm tập lệnh lựa chọn

    if [-f ~ / .git-xong.bash]; sau đó
          xuất PS1 = '\ w $ (__ git_ps1 "(% s)")>'
    fi
  2. Lưu và sử dụng hồ sơ: source ~/.bash_profilehoặcsource ~/.bashrc

Bây giờ bạn sẽ thấy dấu nhắc git hoạt động chính xác và hiển thị chi nhánh bạn đang ở ngay bây giờ.

5

Tôi gặp vấn đề tương tự khi nâng cấp lên Yosemite.

Tôi chỉ phải sửa đổi ~/.bashrcđể source /usr/local/etc/bash_completion.d/git-prompt.shthay vì con đường cũ.

sau đó lấy lại nguồn của bạn . ~/.bashrcđể có được hiệu ứng.


5

Giải pháp sạch Sierra cao với màu sắc!

Không tải xuống. Không có bia. Không có mã

Chỉ cần thêm nó vào ~ / .bashrc hoặc ~ / .bash_profile

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" "\\\$ "'

4

__git_ps1 cho bash hiện được tìm thấy trong git-prompt.sh trong /usr/local/etc/bash_completion.d trên phiên bản git cài đặt bia 1.8.1.5 của tôi


2

cái này hoạt động trong OS 10.8 trong .bash_profile

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

Không sửa lỗi: bash: __docker_machine_ps1: command not found
IgorGanapolsky

2

Đối với macports tôi phải thêm: source /opt/local/share/git-core/git-prompt.shvào ./profile của tôi


1
@IgorGanapolsky Tôi đoán bạn chưa cài đặt macports ? Đơn giản chỉ cần làm touch ~/.profile. Nhưng rõ ràng bạn cần một tệp trong: /opt/local/share/git-core/git-prompt.sh
velop

2

Nếu bạn đang hy vọng sử dụng Homebrew để nâng cấp Git và bạn đã để hệ thống của mình trở nên lỗi thời (như tôi đã làm), bạn có thể cần phải cập nhật Homebrew trước (theo cập nhật bia : Các tệp cây làm việc chưa được theo dõi sau đây sẽ được ghi đè bằng cách hợp nhất: cảm ơn @ chris-frisina)

Đầu tiên đưa Homebrew phù hợp với phiên bản hiện tại

cd / usr / local
git lấy nguồn gốc
git reset - gốc origin / master

Sau đó cập nhật Git:

nâng cấp bia

Giải quyết vấn đề! ;-)


2

Ít nhất với Xcode 6, bạn đã có git-completion.bash. Nó nằm trong gói ứng dụng Xcode.

Chỉ cần thêm nó vào .bashrc của bạn:

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

2
  1. Tải xuống các tệp git-prompt.shgit- xong.bash từ hoàn thành Git này
  2. Đổi tên các tập tin.
  3. Di chuyển các tập tin vào thư mục nhà của bạn.
  4. Thêm tệp nguồn vào .bash_profile

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

1

Tôi biết đó không phải là một câu trả lời thực sự ...

Tôi đã gặp một số vấn đề lạ với việc tìm nguồn cung ứng git-prompt.sh trong .bashrc của mình vì vậy tôi bắt đầu tìm kiếm giải pháp khác. Cái này: http://www.jqno.nl/post/2012/04/02/howto-display-the-civerse-git-branch-in-your-prompt/ không sử dụng __git_ps1 và tác giả tuyên bố nó cũng hoạt động trên Mac (hiện tại nó hoạt động hoàn hảo trên Ubuntu của tôi và thật dễ dàng để điều chỉnh).

Tôi hy vọng nó sẽ giúp!


1

Tôi đã tham gia khóa học về Udacity cho git hub và gặp vấn đề tương tự. Đây là mã cuối cùng của tôi làm cho hoạt động chính xác.

# 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"

Nó hoạt động! https://i.stack.imgur.com/d0lvb.jpg


0

Cái này hoạt động với tôi, và nó có đầu ra git màu và một chỉ báo trong dấu nhắc liệu các tập tin đã thay đổi / được thêm vào hay chưa, được ghi vào nó:

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\]\$ '

Hãy chắc chắn để sử dụng đúng đường dẫn! Tôi đã sử dụng homebrew để cài đặt git, sử dụng brew list gitđể có được đường dẫn đến cài đặt hiện tại của bạn.

Sẽ tốt hơn nếu không sử dụng một đường dẫn được mã hóa cứng, nhưng không biết làm thế nào để có được đường dẫn đến bản cài đặt hiện tại.

Thêm thông tin tại đây: http://en.newinstance.it/2010/05/23/git-autocompletion-and-enhified-bash-prompt/


0

Đối với git, có /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.sh. Và xin vui lòng nhìn /etc/bashrc_Apple_Terminalquá.

Vì vậy, tôi đặt những thứ này vào ~/.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

Vẫn nhận được lỗi này:bash: __docker_machine_ps1: command not found
IgorGanapolsky

0

Lời nói đầu: xin lỗi vì đã không bình luận về câu trả lời của haysclark và làm lại một lần nữa, đơn giản là không đủ đại diện.

Xin lưu ý rằng, nếu bạn chưa cài đặt git thông qua Xcode hoặc pha tại nhà, bạn có thể sẽ tìm thấy các tập lệnh bash haysclarks đề cập đến /Library/Developer/CommandLineTools/, và không phải trong /Applications/Xcode.app/Contents/Developer/, do đó, tạo các dòng để bao gồm trong .bashrc như sau:

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

Bạn sẽ cần những dòng đó nếu bạn muốn sử dụng git-prompt.

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.