如何使用Bash脚本检查目录中是否存在Git仓库

3

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

我想设置终端,使得每当我进入一个包含git项目的目录时,终端都应该指示我当前所在的git分支。

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

(master) $

否则应显示当前目录路径,即
username@machinename:path/to/directory $

我在这里找到了一个类似的问题的答案,但是我不知道如何修改答案以满足我的需求,因为我不擅长bash脚本编写。非常感谢您的任何建议。
3个回答

3
请看这个项目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分支名称,你可以使用它作为变量在PS1中。然后,你可以将现有的 PS1 ='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '更新为:
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w \(\$git_branch\)\$ '

谢谢,我觉得这个项目非常有帮助。 - undefined
1
尽管这可能回答了问题,但最好在此提供实际信息,而不仅仅是一个链接。仅链接的答案不被视为好的答案,可能会被删除。请添加关于它的工作原理和使用方法的一些信息。 - undefined

1
你有很多工具可以做到这一点。例如myzsh,或者只是一个简单的bash脚本,你可以将其添加到你的bashrc中。

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\$ "

1
在Linux中,Git软件包通常会附带一个提示脚本,您可以使用它来查看存储库状态。要启用它,请在shell启动文件(例如~/.bashrc)中源代码git-prompt.sh脚本,然后使用%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仓库的目录时,提示符将更改以显示分支名称。可以设置额外的细节以显示在提示符中(参见上面的链接)。

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