Làm cách nào để git-xong.bash hoạt động trên Mac OS X?


92

Tôi đã theo dõi http://blog.bitfluent.com/post/27983389/git-utilities-you-cant-live-without để thêm git-completion.bashvào/opt/local/etc/bash_completion.d/git-completion

và tôi đã đặt PS1='\h:\W$(__git_ps1 "(%s)") \u\$ '.bashrc_profile của mình

Nhưng bây giờ tôi nhận được điều này -bash: __git_ps1: command not foundmọi thứ tôi làm a cd.

Bạn có thể vui lòng cho tôi biết tôi đang thiếu gì không?


Câu trả lời:


65

Tôi đã cài đặt git bằng MacPorts trên bản cài đặt Snow Leopard mới của mình. Sau khi MacPorts được cài đặt từ hình ảnh .dmg, đây sẽ là các lệnh trong Terminal.app:

sudo port selfupdate
sudo port install git-core +bash_completion

Nếu bạn cũng muốn hỗ trợ lấy từ kho và tài liệu SVN, hãy sử dụng tài liệu này thay vì dòng thứ hai:

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

Sau đó thêm phần sau vào ~ / .profile hoặc ~ / .bash_profile:

# Hoàn thành lệnh shell MacPorts Bash
if [-f / opt / local / etc / bash_completion]; sau đó
    . / opt / local / etc / bash_completion
fi

hoặc cho MacPorts kể từ phiên bản 2.1.2 trên Mountain Lion:

# Hoàn thành lệnh shell MacPorts Bash
if [-f /opt/local/etc/profile.d/bash_completion.sh]; sau đó
  . /opt/local/etc/profile.d/bash_completion.sh
fi

hoặc cho MacPorts với các phiên bản git mới hơn:

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

Lưu ý: bash_completion.sh yêu cầu bash 4.1 trở lên. Nếu hoàn thành không hoạt động hãy thử echo $BASH_VERSIONxem đó có phải là vấn đề không. Nếu vậy, hãy nhập bash MacPorts bằng cách gõ bashvà thử lại hoàn thành git.


Tôi chỉ sao chép đã dán, và tôi vẫn nhận được lỗi mà OP có. = \. Làm thế nào để bạn nói những gì được bao gồm? Tôi không biết bash_completion có nguồn gốc
NullVoxPopuli

lưu ý với các phiên bản mới hơn của git / macport / bash-hoàn thành lời nhắc trong một tệp khác. Xem: 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.shcần $BASH_VERSION4.1 hoặc tốt hơn, tôi đã phải thực hiện các thao tác sau trên Mac OS X 10.8.3 với MacPorts 2.1.3: Chuyển vỏ đăng nhập Mac OS X từ mặc định /bin/bash(3.2.48 (1)) sang MacPorts /opt/local/bin/bash(4.2 .42 (2) -release) như được mô tả ở đây: stackoverflow.com/a/791244/287984. Về cơ bảnif [ `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

Làm việc tuyệt vời cho tôi. Phải thay thế /bin/bashtrong Terminal.app bằng /opt/local/bin/bashtừ macports + tất cả các .bash_profilethay đổi được đề xuất ở đây.
bss

1
Để di chuyển để bash 4.1 hoặc sau này bạn có thể làm theo hướng dẫn tại đây: apple.stackexchange.com/questions/70132/...
ThomasW

55

Nếu bạn đã cài đặt git bằng homebrew, bạn có thể điều chỉnh lời khuyên MacPorts một chút và thêm phần này vào .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

Cách tốt nhất để kiểm tra xem bạn đã cài đặt đúng git bằng cách sử dụng ieb homebrew để thực thi chưa

brew info git

và kiểm tra đầu ra cho thư mục cài đặt của hoàn thành git bash

Phiên bản mới nhất của Git (1.7.12) cũng yêu cầu như sau để kích hoạt lời nhắc.

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

Để biết thêm về __git_ps1, hãy xem superuser.com/a/477749/90231 câu trả lời trong ngăn xếp này.
RichVel

26

Tất cả bạn cần làm là đặt git-completion.bashtệp trong binthư mục nhà người dùng của bạn và đặt các mục sau trong bạn .profilehoặc .bash_profiletệp:

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

Điều này làm là đảm bảo rằng thùng cục bộ của bạn nằm trong PATH và sourcelệnh sẽ khiến mọi thứ diễn ra. Sau đó, tất nhiên thay đổi PS1 đặt nhánh đang kiểm tra hiện tại vào dấu nhắc.

Vì vậy, không cài đặt MacPort để cài đặt phiên bản GIT "hoàn thành" (đặc biệt gây khó chịu nếu bạn đã cài đặt nó).



1
Đối với những người thắc mắc làm thế nào để kết hợp thứ PS1 đó với màu sắc trong lời nhắc của bạn, hãy xem: stackoverflow.com/questions/816790/
mẹo

1
Chính xác hơn, git-xong.bash chỉ cần ở đâu đó trong của bạn $PATH. Tôi quyết định đặt cái của tôi vào /usr/local/bin/để tôi không phải sửa đổi cái hiện có của mình $PATH.
metavida

13

Mặc dù câu trả lời hiện tại là chính xác cho các MacPort cũ hơn, có một vấn đề mới với các MacPort hiện tại nhất dẫn đến cùng một lỗi.

Gói hoàn thành bash hiện tại (2.0 r1) yêu cầu ít nhất một bash 4.1 để hoạt động đúng. Như một OS X Terminal thông thường sử dụng, /bin/bashnó chỉ nhận được 3.x. Bạn phải thay đổi cài đặt thiết bị đầu cuối của mình để sử dụng /opt/local/bin/bash -lnhư được mô tả trong tài liệu MacPorts tại đây: http://trac.macports.org/wiki/howto/bash-completion


Đây là câu trả lời đúng nhất vì tôi chỉ bắt đầu gặp vấn đề sau khi cập nhật macports. Nhược điểm duy nhất của việc sử dụng bash macports từ thiết bị đầu cuối là nó hiện cảnh báo tôi về việc chấm dứt các quy trình đang chạy khi tôi cố gắng đóng cửa sổ thiết bị đầu cuối của mình - bạn đã gặp phải vấn đề này chưa?
vitch

6

Bạn cần nguồn các chức năng hoàn thành lệnh. Thêm vào .bashrc_profile của bạn trước PS1:

. /opt/local/etc/bash_completion.d/git-completion


5

Khó chịu điều này đã bị phá vỡ một lần nữa. Lần này là folks git với phiên bản 1.7.12-1. Để cho phép mọi người chỉ có chức năng nhắc mà không có chức năng hoàn thành (có thể làm mọi thứ chậm lại), họ đã tái cấu trúc chức năng nhanh chóng ra khỏi bash_completion / git và vào tệp git-prompt.sh của chính nó.

Vì vậy, việc thêm bash_completion như được mô tả bởi @Lara sẽ chỉ giúp bạn hoàn thành (nhấn tab hoàn thành tên thẻ / chi nhánh).

Để có được __git_ps1vì vậy bạn có thể sử dụng nó trong lời nhắc PS1 của mình, bạn cũng cần thêm phần sau vào ~ / .profile.

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

Một số nền tảng ở đây - https://bbs.archlinux.org/viewtopic.php?pid=1163632#p1163632



3

Hoặc với Homebrew

brew install bash-completion git-extras

2
Cảm ơn rất nhiều. Nó nên được brew install bash-completion git-extrasmặc dù (dấu gạch ngang thay vì gạch dưới).
simonair


2

Đối với Mountain Lion và Mac-Cổng, tôi cần sử dụng các dòng sau trong .bash_profile của mình để có cả __git_ps1 và hoàn thành để chạy bình thường:

# 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

Tôi sử dụng brew, vì vậy một bash_completionkịch bản tổng thể chạy tất cả những cái trong bash_completion.ddường như không được cung cấp. Các giải pháp đề xuất chỉ chạy một tập lệnh duy nhất để thêm hoàn thành git không thể mở rộng được, bởi vì các gói khác nhau sẽ thêm các tập lệnh hoàn thành khác nhau và bạn có thể muốn chạy tất cả. Do đó, tôi đã thêm phần này (được điều chỉnh từ Arch Linux) vào cuối /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

Í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

Đây là câu trả lời duy nhất thực sự hiệu quả với tôi. Các câu trả lời khác đã tạo ra các lỗi lạ khi bạn nhập một lệnh không hoàn chỉnh nhưgit br<TAB>
r00m

0

Ngoài bài viết của Adam K. Johnson

Bạn cũng có thể đặt ...

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

... trong hồ sơ / etc / của bạn, nếu bạn muốn.

Bằng cách đó, tất cả người dùng trên hệ thống sẽ được hưởng lợi từ bất kỳ tập lệnh hoàn thành bash nào được cài đặt trong thư mục "/opt/local/etc/bash_completion.d/".


0

Mặc dù câu trả lời ở trên của grundprinzip từ năm 2011 vẫn hoạt động tốt, tôi muốn thêm một câu trả lời gần đây ngay bây giờ rằng giờ đây đã hoàn thành gói bash Homebrew ( công thức , repo ) giúp việc này trở nên dễ dàng hơn. (Điều này bao gồm hoàn thành cho git cũng như các công cụ phổ biến khác.)

Hôm nay macOS vận chuyển với Bash 3, nhưng bạn có thể brew install bashlấy Bash 4. Nếu bạn đang chạy Bash 4, thì hãy cài đặt nhánh hoàn thành bash 2.x mới hơn.

Bash 4

  1. Chạy:

    brew install bash-completion@2
  2. Thêm vào ~/.bash_profile:

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

Bash 3

Nếu bạn muốn gắn bó với stock bash 3.x trên macOS thì hãy làm theo các hướng dẫn sau.

  1. Chạy:

    brew install bash-completion
  2. Thêm vào ~/.bash_profile:

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

Tham khảo: http://davidalger.com/development/bash-completion-on-os-x-with-brew/


-2

Tôi nghĩ rằng bạn có thể quên tìm nguồn cung cấp tệp trong thông tin đăng nhập của mình .bashrc, bạn có thể thêm một cái gì đó như:

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

Sử dụng .theo sau bởi một khoảng trắng chạy tệp trong ngữ cảnh hiện tại.

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.