为什么git-prompt.sh表明我的分支有分歧?

时间:2016-11-09 23:47:35

标签: git bash shell github

我最近从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 cleangit pull读取Already up-to-date。我错过了一些关于分歧的东西,还是git-prompt.sh行为不正常?提前谢谢。

2 个答案:

答案 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”的情况下的字符串是制表符(除非您的外壳以某种方式扩展它们,在这种情况下,我猜是相反的)