检查当前目录是否为Git存储库
我正在为zsh编写一系列用于Gitpipe理的脚本。
如何检查当前目录是否为Git存储库? (当我不在Git fatal: Not a git repository
,我不想执行一堆命令并得到一堆fatal: Not a git repository
响应)。
从bash完成文件复制下面是一个天真的方式来做到这一点
# Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org> # Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/). # Distributed under the GNU General Public License, version 2.0. if [ -d .git ]; then echo .git; else git rev-parse --git-dir 2> /dev/null; fi;
你可以把它包装在一个函数中,或者在脚本中使用它。
简化为适用于bash或zsh的单行条件
[ -d .git ] || git rev-parse --git-dir > /dev/null 2>&1
您可以使用:
git rev-parse --is-inside-work-tree
如果你在一个git回购工作树中,它将打印“true”。
请注意,它仍然返回输出到STDERR,如果你不在一个GIT仓库(并不打印“假”)。
采取从这个答案: https : //stackoverflow.com/a/2044714/12983
使用git rev-parse –git-dir
如果git rev-parse --git-dir> / dev / null 2>&1; 然后 :#这是一个有效的git存储库(但目前的工作 #目录可能不是最高级别。 #检查git rev-parse命令的输出,如果你在意的话) 其他 :#这不是一个混帐存储库 科幻
或者你可以这样做:
inside_git_repo="$(git rev-parse --is-inside-work-tree 2>/dev/null)" if [ "$inside_git_repo" ]; then echo "inside git repo" else echo "not in git repo" fi
不知道是否有公共访问/logging的方式来做到这一点(有一些内部的gitfunction,你可以使用/滥用git源本身)
你可以做一些事情
if ! git ls-files >& /dev/null; then echo "not in git" fi
一个非常快速的select是http://vc.gerg.ca/hg/vcprompt/ ..多VC,在C中,没有依赖本身以外。
你有没有在zsh发行版中检查函数? 在zsh中查看关于vcs_info的这个博客条目 。
更新 :
似乎原来的链接被删除,作者改变了他的主要领域。 我检查谷歌,我认为目前链接的post有相同的内容,但我不知道肯定(很久以前,因为我检查原始链接)。
另一个解决scheme是检查命令的退出代码。
git rev-parse 2> /dev/null; [ $? == 0 ] && echo 1
这将打印1,如果你在一个混帐存储库文件夹。
这对我有用。 你仍然得到错误,但他们很容易压制。 它也从子文件夹内工作!
git status> / dev / null 2>&1 && echo Hello World!
如果你需要有条件地做更多的事,你可以把它放在if语句中。
您可以使用一个或另一个 git-prompt工具在您的zshrc中添加或replace您的$ PS1。 通过这种方式,您可以方便地了解您是否处于git回购和回购状态。
也可以看看:
git rev-parse --is-inside-work-tree
(通过阅读man git-rev-parse发现)