2012-05-03 17 views
10

Tôi có một tập lệnh (không phải do chính tôi viết), hiển thị chi nhánh git branch/svn trong dấu nhắc lệnh của tôi. Có ai biết tại sao điều này sẽ không hoạt động trên mac? Nó hoạt động hoàn hảo trong linux.Biến số PS1 env không hoạt động trên mac

Từ https://github.com/xumingming/dotfiles/blob/master/.ps1:

# Display ps1 with colorful pwd and git status 
# Acording to Jimmyxu .bashrc 
# Modified by Ranmocy 
# -- 

if type -P tput &>/dev/null && tput setaf 1 &>/dev/null; then 
    color_prompt=yes 
else 
    color_prompt= 
fi 

__repo() { 
    branch=$(type __git_ps1 &>/dev/null && __git_ps1 | sed -e "s/^ (//" -e "s/)$//") 
    if [ "$branch" != "" ]; then 
     vcs=git 
    else 
     branch=$(type -P hg &>/dev/null && hg branch 2>/dev/null) 
     if [ "$branch" != "" ]; then 
      vcs=hg 
     elif [ -e .bzr ]; then 
      vcs=bzr 
     elif [ -e .svn ]; then 
      vcs=svn 
     else 
      vcs= 
     fi 
    fi 
    if [ "$vcs" != "" ]; then 
     if [ "$branch" != "" ]; then 
      repo=$vcs:$branch 
     else 
      repo=$vcs 
     fi 
     echo -n "($repo)" 
    fi 
    return 0 
} 

if [ "$color_prompt" = yes ]; then 
# PS1='\[\e[01;32m\]\[email protected]\h\[\e[00m\]:\[\e[01;34m\]\w\[\e[33;40m\]$(__repo)\[\e[00m\]\$ ' 
    PS1='\[\e[01;32m\]\u\[\e[00m\]:\[\e[01;34m\]\W\[\e[33m\]$(__repo)\[\e[00m\]\$ ' 
else 
    PS1='\[email protected]\h:\w$(__repo)\$ ' 
fi 
unset color_prompt 

case "$TERM" in 
xterm*|rxvt*) 
    PS1="\[\e]0;\W\a\]$PS1" 
    ;; 
*) 
    ;; 
esac 
+0

@Alain, tôi sẽ đi ra ngoài một chi và đề nghị đó là "Làm thế nào để làm cho nó hoạt động trên máy Mac?" – blahdiblah

+0

@blahdiblah Hmm, trình chỉnh sửa gợi ý rằng "Tại sao nó không hoạt động trên máy Mac?" – Alain

+0

@Alain Damn! Tôi đa đên rât gân! – blahdiblah

Trả lời

21

Mac OS cài đặt X của Git không có __git_ps1 bao gồm.

Sử dụng:

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

như quyền thay người.

+4

'\ (*. *) /' Hooray cho grep '\ (*. *) /' – Alain

+0

Không phải là một giải pháp tuyệt vời, nhưng tôi đã có cùng một vấn đề trong khi trước đây và đây là những gì tôi tìm thấy và đưa vào '.profile của tôi '. Có lẽ tôi đã không thể có được một tốt hơn. Tôi rất vui khi thấy nó. –

+0

cảm ơn rất nhiều, nó hoạt động! –

14

Tập lệnh bạn cung cấp không phát hiện được repo git nếu lệnh __git_ps1 không thành công. Thêm phần này vào ~/.bash_profile:

source /usr/local/git/contrib/completion/git-completion.bash 
source /usr/local/git/contrib/completion/git-prompt.sh 

Giả sử bạn lưu trữ các tập tin kịch bản như ~/.ps1, cũng thêm:

source ~/.ps1 

  • Giải pháp này cũng cho phép hoàn thành tab cho git.
  • Mac OS X installations of git do có __git_ps1 được bao gồm, nhờ sschuberth và cheapener để đề cập đến git-completion.bash.
+2

Tệp của tôi nằm trong /Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-completion.bash.Sư tử núi với Xcode CLI được cài đặt. –

1

Nếu bạn cài đặt git qua macports (git-core), bạn nên thêm dòng sau vào ~/.bash_profile:

source /opt/local/etc/profile.d/bash_completion.sh 
source /opt/local/share/git-core/git-prompt.sh 

Vị trí của git-prompt.sh dường như đã thay đổi một vài lần.

10

Trên một Yosemite mac mới bằng cách sử dụng được xây dựng trong git, tôi sử dụng này:

source /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash 
source /Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh 
export PS1='\[\e]0;\[email protected]\h: \w\a\]\[\e[32;1m\]\[email protected]\h:\w \[\e[33;1m\]$(__git_ps1 "[%s] ")\[\e[32;1m\]\$ \[\e[0m\]' 

Lưu ý: trên El Capitan, tôi đã phải thay đổi đường dẫn của kịch bản git để /Applications/Xcode.app/Contents/Developer/usr/share/git-core và tôi đoán bạn cần phải có XCode được cài đặt để làm việc này.

+0

Thật vậy, tính năng này hoạt động trên OS X 10.10 Yosemite. –

+0

YES SIR, đã hoạt động hoàn hảo. – oldergod