(Mac) -bash: __git_ps1: ไม่พบคำสั่ง


222

ฉันพยายามเปลี่ยน promt command ใน terminal ฉันได้รับข้อผิดพลาด:

-bash: __git_ps1: command not found

__git_ps1ฉันได้พยายามมันเพียงแค่พิมพ์ลงในสถานีเป็น: ฉันยังลองใน.bash_profile

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

ในขณะที่คุณสามารถดู / บอกใช่ฉันมีการติดตั้งการเติมข้อความอัตโนมัติและมันใช้งานได้ดีมาก!

ฉันเจอคำถามนี้: " ตัวแปร env PS1 ไม่ทำงานบน mac " ซึ่งให้รหัส

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

ดังนั้นฉันจึงเพิ่มมันเข้าไปในความ.bash_profileหวังของฉันว่ามันจะเปลี่ยนอะไรบางอย่าง มันก็เป็นเช่นนั้น มันเพิ่งเปลี่ยนเอาต์พุตข้อผิดพลาด

นี่คือการเพิ่ม.bash_profileด้วย:

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

และนี่คือผลลัพธ์ข้อผิดพลาดที่เปลี่ยนแปลง:

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

หมายเหตุ:ฉันได้ย้ายนามแฝงด้านล่างแหล่งที่มาด้วยไม่มีความแตกต่าง ฉันมีคอมไพล์รุ่น 1.7.12.1

นี่ควรเป็นการเปลี่ยนแปลงที่ง่าย มีใครช่วยได้บ้าง

แก้ไข 10/13/12

ไม่ฉันไม่ต้องการกำหนด __git_ps1 อย่างแน่นอน แต่พยายามที่จะดูว่ามันจะได้รับการยอมรับหรือไม่ ใช่ฉัน.git-completion.bashติดตั้งไฟล์แล้ว นี่คือวิธีที่ฉันได้รับความสมบูรณ์แบบอัตโนมัติในเครื่องของฉัน

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

ls -laแล้วแสดง.git-completion.bashไฟล์

แก้ไข 10/13/12 - แก้ไขโดยMark Longair (ด้านล่าง)

รหัสต่อไปนี้ทำงานให้ฉันใน.bash_profileขณะที่คนอื่นไม่ได้ ...

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

My git-completion.bashนิยาม__git_ps1เป็นฟังก์ชันเชลล์ เป็นของคุณหรือไม่ คุณรู้ได้อย่างไรว่าการทำงานเสร็จสมบูรณ์นั้นเป็นอย่างไร จะเกิดอะไรขึ้นเมื่อคุณพิมพ์git h<TAB>
rob mayoff

เมื่อฉันพิมพ์มันจะจบลงด้วยความช่วยเหลือ git [space]
Geoff

คำตอบที่ยอมรับนั้นดี แต่สามารถเปิดใช้งานพรอมต์ได้ด้วยการกดปุ่มgit <tab>ตามที่ระบุไว้ในการกระทำที่อ้างอิงโดย Mark Longair
Jack Frost

นั่นไม่ได้เป็นเพียงคำถามอธิบายที่ดี แต่ยังเป็นแหล่งข้อมูลที่เป็นประโยชน์ในการแก้ปัญหา upvote สมควรได้รับอย่างดี
Yannis Dran

การตรวจสอบ -f ทำงานเพื่อแก้ไขข้อผิดพลาดนี้เมื่อใช้ bash ภายในหน้าจอ (1) บน OS X 10.8.5 ไม่ทราบว่าทำไมเนื่องจากไฟล์มีอยู่โดยไม่คำนึงถึง แต่ขอบคุณมากน้อย!
นิค K9

คำตอบ:


324

คุณได้ติดตั้งเวอร์ชันgit-completion.bashจากmaster- ในประวัติการพัฒนาของคอมไพล์นี่คือหลังจากที่คอมมิชชันที่แยก__git_ps1ฟังก์ชั่นจากฟังก์ชั่นเสร็จสมบูรณ์เป็นไฟล์ใหม่ ( git-prompt.sh) การมอบหมายที่นำการเปลี่ยนแปลงนี้ซึ่งจะอธิบายเหตุผลที่เป็นaf31a456

ฉันยังคงแนะนำให้คุณเพียงแค่ระบุเวอร์ชันของgit-completion.bash(หรือgit-prompt.sh) ที่มาพร้อมกับการติดตั้ง git ของคุณ

อย่างไรก็ตามถ้าด้วยเหตุผลบางอย่างที่คุณยังต้องการใช้ฟังก์ชันนี้โดยใช้สคริปต์ที่แยกต่างหากที่ดาวน์โหลดมาmasterคุณควรดาวน์โหลดgit-prompt.shในทำนองเดียวกัน:

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

... และเพิ่มบรรทัดต่อไปนี้ใน~/.bash_profile:

source ~/.git-prompt.sh

ถ้าอย่างนั้นPS1ตัวแปรที่รวมอยู่__git_ps1 '%s'ควรทำงานได้ดี


คุณพูดถูกฉันไม่ต้องการนิยาม __git_ps1 ด้วยตัวเอง ฉันแค่พยายามดูว่ามันจะรับรู้และมันไม่ได้ ฉันมี. git-completion.bash บนรากของฉัน ฉันจะอัปเดตคำถามของฉันด้านบนเพื่อรวมวิธีที่ฉันทำงานอัตโนมัติให้เสร็จสมบูรณ์ ...
Geoff

@ designer84: ขอบคุณสำหรับข้อมูลเพิ่มเติม - ฉันคิดว่ามันชัดเจนแล้วตอนนี้ปัญหาคืออะไรและฉันได้อัพเดตคำตอบพร้อมคำอธิบายแล้ว
Mark Longair

ทำไมสิ่งนี้ไม่ทำงาน หาก [-f /usr/local/git/contrib/completion/git-completion.bash]; จากนั้นแหล่งที่มา /usr/local/git/contrib/completion/git-completion.bash ส่งออก PS1 = '[\ W] $ (__ git_ps1 "(% s)"):' fi
Geoff

5
ใน OSX 10.9 กับคอมไพล์ 1.8.5.3 ติดตั้งผ่าน Homebrew ทั้งสองgit-prompt.shและจะพบในgit-completion.bash `brew --prefix git`/etc/bash_completion.d/
dokkaebi

1
ใน MacPorts เส้นทางจะเปลี่ยนไปเมื่อแพ็กเกจgit-coreถูกแทนที่ด้วยgitดูคำถามนี้
Ramon de la Fuente

60

หลังจากอัปเกรดเป็น OSX 10.9 Mavericks ฉันต้องอ้างอิงไฟล์ต่อไปนี้เพื่อให้คำสั่ง git shell สมบูรณ์และได้รับคำสั่ง git ให้ทำงานอีกครั้ง

จาก. bash_profile ของฉันหรือคล้ายกัน:

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

นี่เป็นปัญหาของฉันใน
osv

ในขณะที่คำตอบที่ยอมรับจาก @marklongair เป็นคำอธิบายที่ดีฉันพบคำถามนี้ผ่านการค้นหาข้อความแสดงข้อผิดพลาดของ Google (หลังจากอัปเกรดเป็น OS 10.10) และคำตอบนี้เป็นทางออกที่ง่ายที่สุดสำหรับปัญหาของฉัน (เพียงเปลี่ยนเส้นทางไปยังตำแหน่งใหม่ )
RedBassett

นี้ทำงานสำหรับฉันใน 10.10.5 โยเซมิตี แต่ผมเปลี่ยนสถานที่ตั้งของ ~/.git_prompt.shGit-พร้อมที่จะ โซลูชันอื่นไม่ทำงาน
Rein

ฉันเพิ่มบรรทัดที่แนะนำของคุณใน. bash_profileแต่ฉันยังคงได้รับข้อผิดพลาด:bash: __docker_machine_ps1: command not found
IgorGanapolsky

43

คุณควร

$ Brew ติดตั้ง bash bash-git

จากนั้นแหล่งที่มา "$ (ชง - คำนำหน้า) / etc / bash_completion" ใน. bashrc ของคุณ


คำตอบที่ดีวิธีที่ดีที่สุดถ้าติดตั้ง git ด้วยการชง แต่ฉันคิดว่าคุณต้องจัดหาสิ่งนี้: source $ (brew --prefix) /etc/bash_completion.d/git-prompt.sh
febLey

1
@febLey ใช่สถานที่เปลี่ยนไป ฉันได้อัพเดตคำตอบแล้ว ขอบคุณ
สตีเวนชอว์

มันใช้งานไม่ได้ ฉันได้รับข้อผิดพลาด: bash: /usr/local/etc/bash_completion.d/git-prompt.sh: การอนุญาตถูกปฏิเสธ bash: __docker_machine_ps1: ไม่พบคำสั่ง
IgorGanapolsky

14

ทำงานต่อไปนี้สำหรับฉันเหมือนมีเสน่ห์:

ทำงานต่อไปนี้ใน Terminal ของคุณ:

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

เปิด / สร้าง bash_profile:

$ vi ~/.bash_profile

เพิ่มไฟล์ต่อไปนี้ลงใน:

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"

ในที่สุดแหล่งที่มามันใช้:

$ source ~/.bash_profile

bash: __git_ps1: command not foundนี้จะแก้ปัญหาของ

ด้วยพรอมต์ของคุณจะเปลี่ยนเป็น "os" หากต้องการเปลี่ยน "os" เป็นอย่างอื่นให้แก้ไขสตริง "os" ในสายการส่งออก PS1


ฉันยังคงพบข้อผิดพลาดsh -c "clear && / bin / bash" bash: __docker_machine_ps1: ไม่พบคำสั่งทุกครั้งที่ฉันเข้าสู่ Docker CLI
IgorGanapolsky

8

โซลูชันสำหรับ MacOS Sierra และ git เวอร์ชัน 2.10.1 <2017-2-06>

ขั้นตอนที่ 1: ติดตั้ง Git

คุณสามารถข้ามขั้นตอนนี้หากคุณติดตั้งคอมไพล์ล่าสุดแล้ว

ดาวน์โหลดแพ็คเกจ git จากเบราว์เซอร์https://git-scm.com/download/

หมายเหตุ: หากคุณติดตั้งพร้อมcurl [option] https://...ตัวเลือกในการดาวน์โหลดคุณจะต้องตรวจสอบให้แน่ใจว่าระบบของคุณรองรับ SSL ดังนั้นสำหรับผู้มาใหม่การดาวน์โหลดจากเบราว์เซอร์และติดตั้งโดยตรงจากโปรแกรมติดตั้ง git นั้นง่ายกว่ามาก

การยืนยันการติดตั้ง:
  • แสดงไดเรกทอรี git ของคุณที่: which git
  • แสดงเวอร์ชันที่คุณใช้คอมไพล์อยู่: git --versionเวอร์ชันปัจจุบันควรเป็น 2.10.1

ขั้นตอนที่ 2: เพิ่มโปรไฟล์คอมไพล์ลงในเชลล์

  1. เปิดโปรไฟล์เชลล์ของคุณ:
    • nano ~/.bash_profileหรือnano ~/.bashrcขึ้นอยู่กับว่าการดัดแปลงของคุณอยู่ที่ไหน
  2. เพิ่มรหัสต่อไปนี้ไปยังไฟล์:
    • source /usr/local/git/contrib/completion/git-completion.bash
    • source /usr/local/git/contrib/completion/git-prompt.sh

หมายเหตุ: ตำแหน่งการติดตั้ง git เปลี่ยนจาก opt / directory เป็น usr / local / หลังจากอัพเกรด OSX เป็น El Capitain และนี่คือสาเหตุที่คำตอบเก่าบางข้อข้างต้นไม่ทำงานใน MacOS Sierra อีกต่อไป

  1. เพิ่มรหัสต่อไปนี้ในการกำหนดค่า PS1 ของคุณ:

    • ตัวเลือกที่ 1: เพิ่มโดยตรงไปยัง PS1 ของคุณ: export PS1='\w$(__git_ps1 "(%s)") > '

      ฉันชอบวิธีการง่ายๆนี้เพราะฉันรู้อยู่แล้วว่า.git-completion.bashมีอยู่ในไดเรกทอรีภายในบ้านของฉันและฉันสามารถเพิ่มรูปแบบพรอมต์อื่น ๆ ที่อยู่ข้างหน้าได้ นี่คือพรอมต์ส่วนตัวของฉันสำหรับการอ้างอิงของคุณ:export PS1='\t H#\! \u:\w$(__git_ps1 "{%s}") -->> '
    • ตัวเลือก 2: เพิ่มสคริปต์การเลือก

    ถ้า [-f ~ / .git-completion.bash]; แล้วก็
          ส่งออก PS1 = '\ w $ (__ git_ps1 "(% s)")>'
    Fi
  2. บันทึกและใช้โปรไฟล์: source ~/.bash_profileหรือsource ~/.bashrc

ตอนนี้คุณควรเห็นว่า git prompt ทำงานอย่างถูกต้องและแสดงว่าคุณอยู่สาขาใดในตอนนี้

5

ฉันมีปัญหาเดียวกันเมื่ออัพเกรดเป็นโยเซมิตี

ฉันเพิ่งมีการปรับเปลี่ยน~/.bashrcเพื่อsource /usr/local/etc/bash_completion.d/git-prompt.shแทนเส้นทางเก่า

จากนั้นให้แหล่งที่มาของคุณอีกครั้ง. ~/.bashrcเพื่อรับผลกระทบ


5

น้ำยาฟอกสีเซียร่าสูงด้วยสี!

ไม่มีการดาวน์โหลด ไม่มีการชง ไม่มี Xcode

เพียงเพิ่มลงใน ~ / .bashrc หรือ ~ / .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 สำหรับ bash พบได้แล้วใน git-prompt.sh ใน /usr/local/etc/bash_completion.d ในรุ่น git ที่ติดตั้งแล้วของฉัน 1.8.1.5


2

สิ่งนี้ใช้ได้ใน OS 10.8 ใน. bash_profile

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

ไม่แก้ไขข้อผิดพลาด: ทุบตี: __docker_machine_ps1: ไม่พบคำสั่ง
IgorGanapolsky

2

สำหรับ macports ฉันต้องเพิ่ม: source /opt/local/share/git-core/git-prompt.shไปยัง. / profile


1
@IgorGanapolsky ฉันเดาว่าคุณไม่ได้ติดตั้งmacports ? touch ~/.profileเพียงแค่ทำ แต่คุณเห็นได้ชัดต้องแฟ้มใน: /opt/local/share/git-core/git-prompt.sh
velop

2

หากคุณหวังว่าจะใช้ Homebrew เพื่ออัปเกรด Git และคุณได้ปล่อยให้ระบบของคุณล้าสมัย (เหมือนที่ฉันเคยทำ) คุณอาจจำเป็นต้องปรับปรุง Homebrew ให้ทันสมัยก่อน (ตามการอัพเดทชง) : ไฟล์ต้นไม้ทำงานที่ไม่ได้ติดตามต่อไปนี้จะถูกเขียนทับโดยการรวม:ขอบคุณ @ chris-frisina)

ก่อนอื่นให้พา Homebrew เข้ากับเวอร์ชั่นปัจจุบัน

cd / usr / local
git ดึงเอา
git reset - hard origin / master

จากนั้นอัปเดต Git:

ชงอัพเกรดคอมไพล์

แก้ไขปัญหา! ;-)


2

อย่างน้อยกับ Xcode 6 git-completion.bashคุณมีอยู่แล้ว มันอยู่ในชุดแอป Xcode

เพียงเพิ่มสิ่งนี้ลงใน. bashrc ของคุณ:

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

2
  1. ดาวน์โหลดไฟล์git-prompt.shและgit-completion.bashจากGitนี้
  2. เปลี่ยนชื่อไฟล์
  3. ย้ายไฟล์เหล่านั้นไปยังไดเรกทอรีบ้านของคุณ
  4. เพิ่มไฟล์ต้นฉบับลงใน. bash_profile

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

1

ฉันรู้ว่ามันไม่ใช่คำตอบที่แท้จริง ...

ฉันมีปัญหาแปลก ๆ กับการจัดหา git-prompt.sh ใน. bashrc ของฉันดังนั้นฉันจึงเริ่มมองหาวิธีแก้ปัญหาอื่น ๆ อันนี้: http://www.jqno.nl/post/2012/04/02/howto-display-the-current-git-branch-in-your-prompt/ไม่ใช้ __git_ps1 และผู้เขียนอ้างว่ามันใช้งานได้เช่นกัน บน Mac (ตอนนี้มันทำงานได้อย่างสมบูรณ์บน Ubuntu และปรับแต่งได้ง่าย)

ฉันหวังว่ามันจะช่วย!


1

ฉันกำลังทำหลักสูตรเกี่ยวกับ Udacity สำหรับศูนย์กลางคอมไพล์และมีปัญหาเดียวกันนี้ นี่คือรหัสสุดท้ายของฉันที่ทำให้ทำงานได้อย่างถูกต้อง

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

มันได้ผล! https://i.stack.imgur.com/d0lvb.jpg


0

อันนี้ใช้งานได้สำหรับฉันและมีเอาต์พุต git สีและตัวบ่งชี้ในพรอมต์ว่ามีการเปลี่ยนแปลง / เพิ่มไฟล์หรือไม่

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

ต้องแน่ใจว่าใช้เส้นทางที่ถูกต้อง! ฉันใช้ homebrew เพื่อติดตั้งคอมไพล์ใช้brew list gitเพื่อรับพา ธ ไปยังการติดตั้งปัจจุบันของคุณ

จะดีไม่ได้ที่จะใช้เส้นทางที่เข้ารหัสยาก แต่ไม่ทราบวิธีการรับเส้นทางไปยังการติดตั้งปัจจุบัน

ข่าวสารเพิ่มเติมได้ที่นี่: http://en.newinstance.it/2010/05/23/git-autocompletion-and-enhanced-bash-prompt/


0

/Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-prompt.shสำหรับคอมไพล์มี และโปรดดู/etc/bashrc_Apple_Terminalด้วย

ดังนั้นฉันใส่สิ่งเหล่านี้ใน~/.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

ยังได้รับข้อผิดพลาดนี้:bash: __docker_machine_ps1: command not found
IgorGanapolsky

0

คำนำ: ขออภัยที่ไม่ได้แสดงความคิดเห็นกับคำตอบคำตอบของ haysclarkและทำให้คำตอบใหม่เพียงแค่ตัวแทนไม่เพียงพอ

โปรดอย่าว่าถ้าคุณยังไม่ได้ติดตั้ง git ผ่าน Xcode หรือ home-brew คุณจะพบว่า bash script haysclarks อ้างถึงใน/Library/Developer/CommandLineTools/และไม่ได้อยู่ใน/Applications/Xcode.app/Contents/Developer/ดังนั้นจึงทำให้บรรทัดดังกล่าวรวมอยู่ใน. bashrc ต่อไปนี้:

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

คุณจะต้องมีบรรทัดเหล่านั้นหากคุณต้องการใช้ git-prompt เช่นกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.