วิธีการรับ git-completion.bash เพื่อทำงานบน Mac OS X


92

ฉันได้ติดตามhttp://blog.bitfluent.com/post/27983389/git-utilities-you-cant-live-withoutเพื่อเพิ่มลงgit-completion.bashใน/opt/local/etc/bash_completion.d/git-completion

และฉันใส่PS1='\h:\W$(__git_ps1 "(%s)") \u\$ 'ใน. bashrc_profile ของฉัน

แต่ตอนนี้ฉันได้รับนี้ทุกอย่างที่ฉันทำ-bash: __git_ps1: command not foundcd

คุณช่วยกรุณาบอกฉันว่าฉันหายไป?


ดูเพิ่มเติมที่: trac.macports.org/wiki/howto/bash-completion
Ioannis Filippidis

คำตอบ:


65

ฉันติดตั้งคอมไพล์โดยใช้MacPortsในการติดตั้ง Snow Leopard ใหม่ของฉัน หลังจากติดตั้ง MacPorts จากอิมเมจ. dmg แล้วสิ่งเหล่านี้จะเป็นคำสั่งใน Terminal.app:

sudo port selfupdate
sudo port install git-core +bash_completion

หากคุณต้องการการสนับสนุนสำหรับการดึงจากที่เก็บ SVN และเอกสารให้ใช้สิ่งนี้แทนบรรทัดที่สอง:

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

จากนั้นเพิ่มสิ่งต่อไปนี้ใน ~ / .profile หรือ ~ / .bash_profile ของคุณ:

# MacPorts คำสั่ง Bash เชลล์เสร็จสิ้น
ถ้า [-f / opt / local / etc / bash_completion]; แล้วก็
    . / opt / local / etc / bash_completion
Fi

หรือสำหรับ MacPorts ตั้งแต่เวอร์ชั่น 2.1.2 บน Mountain Lion:

# MacPorts คำสั่ง Bash เชลล์เสร็จสิ้น
ถ้า [-f /opt/local/etc/profile.d/bash_completion.sh]; แล้วก็
  . /opt/local/etc/profile.d/bash_completion.sh
Fi

หรือสำหรับ MacPorts ด้วย git รุ่นใหม่กว่า:

ถ้า [-f /opt/local/share/git-core/git-prompt.sh]; แล้วก็
    . /opt/local/share/git-core/git-prompt.sh
Fi

หมายเหตุ: bash 4.1 หรือสูงกว่านั้นต้องการโดย bash_completion.sh หากการดำเนินการไม่สำเร็จลองecho $BASH_VERSIONดูว่าเป็นปัญหาหรือไม่ ถ้าเป็นเช่นนั้นให้ป้อน MacPort bash โดยพิมพ์bashและลอง git complete อีกครั้ง


ฉันเพิ่งคัดลอกวางและฉันยังได้รับข้อผิดพลาดที่ OP มี = \ คุณจะบอกได้อย่างไรว่ามีอะไรรวมอยู่บ้าง ฉันไม่ได้เป็นแหล่ง
bash_completion

บันทึกย่อด้วย git / macport / bash-completion เวอร์ชันใหม่พรอมต์นั้นอยู่ในไฟล์อื่น ดูที่: 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
เพราะ/opt/local/etc/profile.d/bash_completion.shต้องการ$BASH_VERSION4.1 หรือดีกว่าฉันต้องทำสิ่งต่อไปนี้บน Mac OS X 10.8.3 ด้วย MacPorts 2.1.3: เปลี่ยนเชลล์การล็อกอิน Mac OS X จากค่าเริ่มต้น/bin/bash(3.2.48 (1) - ปล่อย) เป็น MacPorts /opt/local/bin/bash(4.2 .42 (2) - คลายออกเหมือนที่อธิบายไว้ที่นี่: stackoverflow.com/a/791244/287984 โดยทั่วไปif [ `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

ทำงานได้ดีสำหรับฉัน ต้องแทนที่/bin/bashใน Terminal.app ด้วย/opt/local/bin/bashจาก macports + การ.bash_profileเปลี่ยนแปลงทั้งหมดที่แนะนำที่นี่
bgs

1
หากต้องการย้ายไปทุบตี 4.1 หรือใหม่กว่าคุณสามารถทำตามคำแนะนำได้ที่นี่: apple.stackexchange.com/questions/70132/ …
ThomasW

55

หากคุณติดตั้งคอมไพล์โดยใช้ Homebrew กว่าที่คุณอาจปรับคำแนะนำ MacPorts เล็ก ๆ น้อย ๆ และเพิ่มนี้เพื่อคุณ.bash_profileและ.bashrc

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

วิธีที่ดีที่สุดในการตรวจสอบว่าคุณมีคอมไพล์ติดตั้งอย่างถูกต้องโดยใช้ homebrew ist เพื่อดำเนินการหรือไม่

brew info git

และตรวจสอบเอาต์พุตสำหรับไดเร็กทอรีการติดตั้งของการทำ bash git ให้สมบูรณ์

Git รุ่นล่าสุด (1.7.12) ต้องใช้สิ่งต่อไปนี้เพื่อเปิดใช้งานพรอมต์

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

สำหรับข้อมูลเพิ่มเติม__git_ps1โปรดดูsuperuser.com/a/477749/90231คำตอบในสแต็กนี้
RichVel

26

สิ่งที่คุณต้องทำคือวางgit-completion.bashไฟล์ในโฮมไดbinเร็กตอรี่ของผู้ใช้และวางไฟล์ต่อไปนี้ไว้ในตัวคุณ.profileหรือ.bash_profileไฟล์:

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

สิ่งนี้จะทำให้แน่ใจว่าถังขยะของคุณอยู่ในเส้นทางและsourceคำสั่งทำให้สิ่งต่างๆเกิดขึ้น แน่นอนว่าการเปลี่ยนแปลง PS1 จะทำให้สาขาที่เช็คเอาท์อยู่ในพรอมต์

ดังนั้นจึงไม่มีการติดตั้ง MacPort เพื่อติดตั้ง GIT รุ่น "เสร็จสมบูรณ์" (โดยเฉพาะอย่างยิ่งเกิดการระคายเคืองหากคุณติดตั้งไว้แล้ว)



1
สำหรับผู้ที่สงสัยว่าจะรวมสิ่ง PS1 เข้ากับสีในพรอมต์ของคุณดูได้ที่: stackoverflow.com/questions/816790/…
Nickolay

1
อีกอย่างแม่นยำ Git-completion.bash $PATHเพียงแค่ต้องการที่จะเป็นหนึ่งในของคุณ ฉันตัดสินใจที่จะวางระเบิดในเพื่อที่ว่าผมไม่ได้มีการปรับเปลี่ยนอยู่ของฉัน/usr/local/bin/ $PATH
metavida

13

ในขณะที่คำตอบปัจจุบันถูกต้องสำหรับ MacPort รุ่นเก่ามีปัญหาใหม่กับ MacPort ล่าสุดทำให้เกิดข้อผิดพลาดเดียวกัน

แพคเกจbash-completionปัจจุบัน(2.0 r1) ต้องการอย่างน้อย bash 4.1 เพื่อให้ทำงานได้อย่างถูกต้อง เช่นเดียวกับ OS X Terminal ปกติที่ใช้/bin/bashจะได้รับเพียง 3.x คุณต้องเปลี่ยนการตั้งค่าเทอร์มินัลเพื่อใช้/opt/local/bin/bash -lตามที่อธิบายไว้ในเอกสาร MacPorts ที่นี่: http://trac.macports.org/wiki/howto/bash-completion


นี่เป็นคำตอบที่ถูกต้องที่สุดเมื่อฉันเริ่มมีปัญหาหลังจากอัพเดต macports ข้อเสียเพียงอย่างเดียวของการใช้ macports bash จากเทอร์มินัลคือตอนนี้มันเตือนฉันเกี่ยวกับการยกเลิกกระบวนการทำงานเมื่อฉันพยายามปิดหน้าต่างเทอร์มินัล - คุณเคยเจอปัญหานี้หรือไม่?
vitch


5

น่ารำคาญว่าเรื่องนี้เสียอีกแล้ว คราวนี้มันเป็น git folks กับรุ่น 1.7.12-1 เพื่อให้ผู้ใช้มีเพียงแค่ฟังก์ชั่นพรอมต์โดยไม่ต้องมีฟังก์ชั่นการทำงานที่สมบูรณ์ (ซึ่งอาจทำให้สิ่งต่าง ๆ ช้าลง) พวกเขาจะทำการปรับเปลี่ยนการทำงานของพรอมต์ให้หมดจาก bash_completion / git

ดังนั้นการเพิ่ม bash_completion ตามที่อธิบายโดย @Lara จะทำให้คุณเสร็จสมบูรณ์เท่านั้น (แท็บการกดปุ่มเสร็จสมบูรณ์ชื่อแท็ก / สาขา)

ในการรับข้อมูล__git_ps1เพื่อให้คุณสามารถใช้งานได้ในพรอมต์ PS1 ของคุณคุณต้องเพิ่มสิ่งต่อไปนี้ใน ~ / .profile ของคุณด้วย

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

พื้นหลังบางส่วนอยู่ที่นี่ - https://bbs.archlinux.org/viewtopic.php?pid=1163632#p1163632





2

สำหรับ Mountain Lion และ Mac-Ports ฉันจำเป็นต้องใช้บรรทัดต่อไปนี้ใน. bash_profile เพื่อรับทั้ง __git_ps1 และความสมบูรณ์เพื่อให้ทำงานได้ตามปกติ:

# 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

ฉันใช้บริวเวอรี่ดังนั้นbash_completionสคริปต์หลักที่รันสคริปต์ทั้งหมดที่bash_completion.dดูเหมือนจะไม่ได้จัดเตรียมไว้ให้ โซลูชันที่เสนอเพียงแค่เรียกใช้สคริปต์เดียวเพื่อเพิ่มความสมบูรณ์ของคอมไพล์นั้นไม่สามารถขยายได้เนื่องจากแพ็คเกจที่แตกต่างกันจะเพิ่มสคริปต์การทำให้สมบูรณ์ที่แตกต่างกันและคุณอาจต้องการเรียกใช้ทั้งหมด ดังนั้นฉันจึงเพิ่ม (ดัดแปลงจาก Arch Linux) ไปยังจุดสิ้นสุด/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

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

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

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

นี่เป็นคำตอบเดียวที่ใช้งานได้จริงสำหรับฉัน คำตอบอื่น ๆ สร้างข้อผิดพลาดแปลก ๆ เมื่อคุณพิมพ์คำสั่งที่ไม่สมบูรณ์เช่นgit br<TAB>
r00m

0

นอกจากโพสต์ของ Adam K. Johnson

คุณสามารถใส่สิ่งต่อไปนี้ ...

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

... ใน / etc / profile ของคุณหากคุณต้องการ

ด้วยวิธีนี้ผู้ใช้ทุกคนในระบบจะได้รับประโยชน์จากสคริปต์การเติม bash ใด ๆ ที่ติดตั้งในไดเรกทอรี "/opt/local/etc/bash_completion.d/"


0

ในขณะที่คำตอบข้างต้นโดย grundprinzip จาก 2011 ยังคงทำงานได้ดีผมอยากจะเพิ่มคำตอบล่าสุดขึ้นในขณะนี้ว่าขณะนี้มี Homebrew แพคเกจทุบตีเสร็จ ( สูตร , repo ) ที่ทำให้เรื่องนี้ง่ายยิ่งขึ้น (ซึ่งรวมถึงการทำให้เสร็จสมบูรณ์สำหรับคอมไพล์เช่นเดียวกับเครื่องมือทั่วไปอื่น ๆ )

วันนี้ macOS มาพร้อมกับ Bash 3 แต่คุณสามารถbrew install bashรับ Bash 4 ได้หากคุณใช้ Bash 4 ให้ติดตั้ง bash-branch ที่ใหม่กว่า 2.x

Bash 4

  1. วิ่ง:

    brew install bash-completion@2
  2. เพิ่มไปที่~/.bash_profile:

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

Bash 3

ถ้าคุณต้องการที่จะติดกับสต็อกทุบตี 3.x บน macOS แล้วทำตามคำแนะนำเหล่านี้แทน

  1. วิ่ง:

    brew install bash-completion
  2. เพิ่มไปที่~/.bash_profile:

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

การอ้างอิง: http://davidalger.com/development/bash-completion-on-os-x-with-brew/


-2

ฉันคิดว่าคุณอาจลืมจัดหาไฟล์ในการเข้าสู่ระบบของ.bashrcคุณคุณสามารถเพิ่มสิ่งที่ชอบ:

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

การใช้.พื้นที่ว่างตามด้วยไฟล์ในบริบทปัจจุบัน

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