在Windows上修改Git提示符

26

我在Windows上使用Git,通过GitExtensions和MSysGit(最新版本)进行安装,在安装过程中选择了“不要修改我的Windows提示符号”。

现在,我想要修改默认提示符(默认情况下仅显示分支名称),以便还可以显示距离我最后一次推送到origin(或特定的origin/master ,哪个更容易)以来经过的时间和本地提交的数量。

例如,原来是这样的:me@myPC /c/myRepo (master)

现在,我想看到类似于以下内容:me@myPC /c/myRepo (master) 5 | 10:20

意思是我距离上次推送已经过去了10小时20分钟,并且我已经做了5次本地提交。

在您提到它之前,我知道有用PowerShell的方法,但我不想使用它。我想使用我们都熟悉和喜爱的标准git bash。

我找到了一些解决方法,其中包括在.bashrc文件中修改PS1变量,但是(请原谅我的Unix知识贫乏)它们似乎无法正常工作(例如回答问题的被接受的答案)。

所以,你看,这是可能的吗?

4个回答

12

默认的git-completion脚本支持部分你所需的功能。如果你在/etc/profile文件中设置GIT_PS1_SHOWUPSTREAM="verbose git",它将会在提示符中添加你超前上游分支的提交数。你可能需要像下面这样设置提示符来包含(%s)在git特定的部分:

export PS1='\[\033]0;$MSYSTEM:\w\007
\033[32m\]\u@\h \[\033[33m\w$(__git_ps1 " (%s)")\033[0m\]
\$ '

对于时间部分 - 这对我来说是新的。但是git-bash应该适用于您可能找到的任何Unix版本。只需以管理员身份编辑/ etc / profile(实际上是% PROGRAMFILES%\ Git \ etc \ profile )或创建一个包含以下内容的〜/ .profile文件:

<code>GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWUPSTREAM='verbose git'
export GIT_PS1_SHOWDIRTYSTATE GIT_PS1_SHOWUPSTREAM
</code>
如果设置了这些环境变量,当您的代码库存在一个脏状态且比起始版本多提交了1次时,默认的msysGit提示符将如下所示:
pat@FROG /c/src/msysgit (devel * u+1)
$ git status --short --branch
## devel...origin/devel [ahead 1]
 M doc/git/html
 M etc/inputrc

谢谢。所以我只是在我的配置文件末尾添加了这两个片段,我启动了一个新的提示窗口,但什么都没有改变。有什么想法可能是为什么?我再次检查了一下,我没有运行其他安装sh.exe(它位于其他文件夹中,因此不受任何更改的影响),但它确实是来自c:\Program Files (x86)\Git\bin\ - kko
除非您在远程提交之前有提交,否则不会有太多变化。默认PS1的“(%s)”附加项允许包含由git-completion脚本文件开头提到的环境变量确定的附加项。要进行测试,请在PS1提示符的最后一行的$符号之前插入“test”。如果您的文本未出现,则正在覆盖其他地方。在/etc/profile脚本的末尾有一个位置列表,用于读取覆盖。 - patthoyts

6
第一步:将这两个文件复制到您的主目录中,您可以在%PROGRAMFILES%\Git\etc\下找到它们;
git-completion.bash
git-prompt.sh

第二步:在类似于.bashrc这样的bash配置文件中配置您的PS1,例如:.bashrc
. git-completion.bash
. git-prompt.sh
GIT_PS1_SHOWDIRTYSTATE=true
PS1='\w\[\033[01;32m\]$(__git_ps1)\[\033[00m\]\$ '

当你说“在你的bash配置文件中”时,我认为你指的是一个名为profile的文件,其中包含上述四行代码。我已经这样做了,然后重新打开了Git Bash窗口,但默认提示没有改变。输入echo $PS1会显示默认的PS1值。 - Rich Shealer
@RichShealer 因为设置bash配置文件的方法有很多种,对我来说,我会在我的git存储库文件夹下创建一个别名到_mybash。也许你喜欢在.bashrc中配置所有内容。 - aufula
感谢您的编辑。对于初次使用者来说,这是令人困惑的,因为支持的环境(操作系统)变化多样,并且倾向于使用通用描述,例如“配置文件”。 - Rich Shealer
通过新的git安装,这些文件现在位于%PROGRAMFILES%\Git\etc\profile.d\下。 - jaques-sam

4
__git_ps1 函数在 mingw bash 中的 /git/config/completion/git-completion.bash 文件中定义。 您应该能够将此函数复制到您自己的 .bashrc 中并进行编辑。
顺便说一下,我选择跳过 __git_ps1 并使用颜色来显示自己的内容。 这是我的 .bashrc 中提示符代码:
DEFAULT_COLOR='\[\e[0m\]'
BLACK='\[\e[0;30m\]'
LTBLUE='\[\e[1;34m\]'
LTRED='\[\e[1;31m\]'

USER_COLOR=$LTBLUE
GIT_CHANGE_COLOR=$LTRED
GIT_NO_CHANGE_COLOR="$BLACK"

gitPrompt() {
  local gitPrompt=$(__git_ps1)
  local gitColor="$GIT_NO_CHANGE_COLOR"
  if [ -n "$gitPrompt" ]; then
    branch=$(git symbolic-ref HEAD 2>/dev/null)
    if [ "$gitPrompt" != " (${branch##refs/heads/})" ]; then
      gitColor="$GIT_CHANGE_COLOR"
    fi
  fi
  echo "$USER_COLOR\u@\h:\W$gitColor$gitPrompt$DEFAULT_COLOR$ "
}

PROMPT_COMMAND='PS1="$(gitPrompt)"'

PROMPT_COMMAND中的表达式每次打印提示时都会被评估。

如果要实现您想要的功能,您可能需要使用awk或perl解析reflog,并将其附加到分支名称后面。我通常依赖gitk来可视化您要查找的信息。


0
如果您在Windows上运行GitPortable,您可能想从this site中获取以下技巧:
在gitportable控制台中键入$ nano ~/.bashrc。编辑完成后,键入$ source ~/.bashrc以重新加载设置。我的安装将文件保存在C:\apps\GitPortable\Data\home文件夹中。
# Git-friendly prompt showing dirty state
# https://dev59.com/Y2kw5IYBdhLWcg3wGWxk

shopt -s promptvars
export GIT_PS1_SHOWDIRTYSTATE=1
export GIT_PS1_SHOWUPSTREAM='verbose git'
export PS1='\[\033[1;36m\]\[\033[0m\]\[\033[1;34m\]\w\[\033[0m\] 
\[\033[1;32m\]$(__git_ps1)\[\033[0m\]\$ '

# Enable color support of ls
alias ls='ls --color=auto -alhX'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接