26

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

现在,我希望能够修改默认提示(默认情况下只显示分支名称,以显示自上次推送以来有多少时间,以及多少本地提交origin(或者具体来说origin/master,以更容易的为准)。

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

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

这意味着我最后一次推送是在 10 小时 20 分钟前,从那以后我已经进行了 5 次本地提交。

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

我找到了一些解决方案,通过修改文件中的PS1变量.bashrc,但是(请原谅我可怜的 Unix 知识)它们似乎不起作用,(例如接受这个问题的答案)。

所以你有它。这可能吗?

4

4 回答 4

12

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

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
于 2012-04-13T00:11:11.843 回答
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\]\$ '
于 2013-05-09T02:51:24.720 回答
4

__git_ps1函数是/git/config/completion/git-completion.bash在 mingw 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 来可视化您正在寻找的信息。

于 2012-04-13T07:15:33.690 回答
0

如果你在 Windows 上运行 GitPortable,你可能想要从这个站点获取这个技巧

$ nano ~/.bashrc在 gitportable 控制台中写入。完成编辑后写入$ 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'
于 2015-07-01T08:24:43.657 回答