我最近从git-aware-prompt切换到git' git-prompt.sh因为我喜欢添加的功能。但是,在我的bash配置文件中设置GIT_PS1_SHOWUPSTREAM="auto"
之后,我使用GitHub的每个回购都表示与'<>'而不是预期的' = '
我不明白这一点,因为git status
显示了这一点
Your branch is up-to-date with 'origin/master'. nothing to commit, working tree clean
并git pull
读取Already up-to-date
。我错过了一些关于分歧的东西,还是git-prompt.sh行为不正常?提前谢谢。
答案 0 :(得分:0)
所以我终于可以访问我朋友的机器,并尝试将原始脚本卷入正确的目录:curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh -o /usr/local/etc/bash_completion.d/git-prompt.sh
。有效!但是没有人应该这样做,直到他们对此表示肯定
一个。 git
是通过Homebrew安装的(您可以验证这一点;如果which git
返回/usr/local/bin/git
并且您自己没有制作符号链接,那么您已全部设置完毕。
湾没有git
个链接被破坏(brew unlink git
然后brew link git
应该解决任何问题)
根据@ torek的专业知识,我得出的结论是Sublime 3可能已经将标签转换为空格并破坏了脚本。解决方案不是在任何文本编辑器中打开git-prompt.sh
,而是直接将其卷曲到上面的目录中。通过这种方式,可以确保它没有损坏,并且可以像宣传的那样工作。
答案 1 :(得分:0)
分享我最近的经历:
我相信这是上面提到的制表符与空格的问题。如果您遇到此问题,请在 git-prompt.sh
中查找此部分:
203 # calculate the result
204 if [[ -z "$verbose" ]]; then
205 case "$count" in
206 "") # no upstream
207 p="" ;;
208 "0 0") # equal to upstream
209 p="=" ;;
210 "0 "*) # ahead of upstream
211 p=">" ;;
212 *" 0") # behind upstream
213 p="<" ;;
214 *) # diverged from upstream
215 p="<>" ;;
216 esac
217 else
218 case "$count" in
219 "") # no upstream
220 p="" ;;
221 "0 0") # equal to upstream
222 p=" u=" ;;
223 "0 "*) # ahead of upstream
224 p=" u+${count#0 }" ;;
225 *" 0") # behind upstream
226 p=" u-${count% 0}" ;;
227 *) # diverged from upstream
228 p=" u+${count#* }-${count% *}" ;;
229 esac
230 if [[ -n "$count" && -n "$name" ]]; then
231 __git_ps1_upstream_name=$(git rev-parse \
232 --abbrev-ref "$upstream" 2>/dev/null)
233 if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then
234 p="$p \${__git_ps1_upstream_name}"
235 else
236 p="$p ${__git_ps1_upstream_name}"
237 # not needed anymore; keep user's
238 # environment clean
239 unset __git_ps1_upstream_name
240 fi
241 fi
242 fi
243
244 }
并确保包含“0”的情况下的字符串是制表符(除非您的外壳以某种方式扩展它们,在这种情况下,我猜是相反的)