如何使用bash脚本检查目录中是否存在git存储库

时间:2015-12-29 12:19:48

标签: linux git bash

我正在尝试使用git处理我的项目。

我想设置终端,这样每当我cd进入包含git项目的目录时,终端应该指出我当前在哪个git分支。

如果有一个git项目,终端只显示分支的名称, 例如

(master) $

否则它应该显示当前目录path.i.e

username@machinename:path/to/directory $

我发现类似的问题已经回答here,但我不知道如何修改答案以满足我的需要,因为我对bash脚本不好。 任何建议都将受到高度赞赏。

3 个答案:

答案 0 :(得分:2)

看看这个项目https://github.com/jimeh/git-aware-prompt,它应该解决你的整个问题,如果没有,你可以改变它以满足你的需求。主要逻辑在prompt.sh。

要在目录中查找当前的git分支名称,您始终可以运行

git rev-parse --abbrev-ref HEAD

当目录不是git存储库的标准时,它将返回分支名称,HEAD(分离时)或什么都不返回。如果您只需要此信息,则可以更新.bashrc。编辑变量PS1,这是bash提示格式。

PS1='(`git rev-parse --abbrev-ref HEAD 2> /dev/null`) \$ '

这是如何在提示中的任何位置显示分支名称的示例。 git脚本将帮助您识别是否显示分支或目录。它将更新您的PROMPT_COMMAND,每次显示bash提示行时都会调用它,方法是检查git branch name,然后在PS1中将其用作变量。然后,您可以将现有的PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '更新为

PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w \(\$git_branch\)\$ '

答案 1 :(得分:1)

Linux中的Git包通常附带一个prompt script,您可以使用它来查看存储库状态。要启用它,请在shell启动文件(例如git-prompt.sh)中获取~/.bashrc脚本,然后使用%s参数设置自定义提示。例如,在ArchLinux中你可以这样做:

[ -r /usr/share/git/completion/git-prompt.sh ] && . /usr/share/git/completion/git-prompt.sh
PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '

当更改为Git存储库的目录时,提示符将更改为显示分支名称。可以设置额外的详细信息以显示提示(请参阅上面的链接)。

答案 2 :(得分:0)

你有很多工具可以做到这一点。

例如

myzsh或只是你添加到bashrc的简化bash

http://martinvalasek.com/blog/current-git-branch-name-in-command-prompt

示例:

function parse_git_branch () {
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

RED="\[\033[0;31m\]"
YELLOW="\[\033[0;33m\]"
GREEN="\[\033[0;32m\]"
NO_COLOR="\[\033[0m\]"

PS1="$GREEN\u@\h$NO_COLOR:\w$YELLOW\$(parse_git_branch)$NO_COLOR\$ "