在Windows上更改Git提示

时间:2012-04-12 23:16:40

标签: windows git bash command-prompt msysgit

我在Windows上使用Git,通过GitExtensions安装,MSysGit(最新)已选择"不要修改我的Windows提示"在安装过程中。

现在,我希望能够修改默认提示符(默认情况下,它只显示分支名称,以显示自上次推送到origin以来有多少时间和多少本地提交(或者特别是origin/master,以较容易的方式)。

所以说而不是:me@myPC /c/myRepo (master)

我会看到以下内容:me@myPC /c/myRepo (master) 5 | 10:20

意思是我上次在20分钟前推了10h,之后我做了5次本地提交。

在你提到之前,我知道有很多方法可以使用PowerShell,但我不想使用它。我想要我们熟悉和喜爱的标准git bash。

我找到了一些解决方案,在PS1文件中修改了.bashrc变量,但是(原谅我糟糕的Unix知识)他们似乎没有工作,(例如{{{ 3}}问题)。

所以你有它。这可能吗?

4 个答案:

答案 0 :(得分:12)

默认的git-completion脚本支持您所需的部分内容。如果在/ etc / profile文件中设置GIT_PS1_SHOWUPSTREAM =“verbose git”,则它会将上游分支前面的提交数添加到提示中。您可能需要设置如下提示,以在git特定部分中包含(%s)

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文件:

GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWUPSTREAM='verbose git'
export GIT_PS1_SHOWDIRTYSTATE GIT_PS1_SHOWUPSTREAM

设置了这些环境变量后,如果您的脏树在原点之前有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

答案 1 :(得分:6)

步骤1.将这两个文件复制到您的主文件夹,您可以在%PROGRAMFILES%\ Git \ etc \下找到它们;

git-completion.bash
git-prompt.sh

步骤2.在您的bash配置文件中配置PS1,例如.bashrc,例如:

. git-completion.bash
. git-prompt.sh
GIT_PS1_SHOWDIRTYSTATE=true
PS1='\w\[\033[01;32m\]$(__git_ps1)\[\033[00m\]\$ '

答案 2 :(得分:4)

__git_ps1函数在mingw bash中的/git/config/completion/git-completion.bash中定义。您应该能够将此功能复制到您自己的.bashrc并根据您的选择进行编辑。

FWIW我选择跳过__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来显示您正在寻找的信息。

答案 3 :(得分:0)

如果您运行GitPortable for Windows,您可能希望从this site

执行此操作

在gitportable控制台中写$ nano ~/.bashrc。完成编辑后,写入$ source ~/.bashrc以重新加载设置。我的安装将文件保存在 C:\ apps \ GitPortable \ Data \ home 文件夹中。

# Git-friendly prompt showing dirty state
# http://stackoverflow.com/questions/10133173/alter-git-prompt-on-windows

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'