我正在zsh中编写Git管理的一系列脚本。
如何检查当前目录是否是Git存储库?(当我不在Git repo时,我不想执行一堆命令并得到一堆致命的:不是Git存储库响应)。
我正在zsh中编写Git管理的一系列脚本。
如何检查当前目录是否是Git存储库?(当我不在Git repo时,我不想执行一堆命令并得到一堆致命的:不是Git存储库响应)。
当前回答
#检查git是否回购
if [ $(git rev-parse --is-inside-work-tree) = true ]; then
echo "yes, is a git repo"
git pull
else
echo "no, is not a git repo"
git clone url --depth 1
fi
其他回答
这对我很有用。您仍然会得到错误,但它们很容易被抑制。它也可以在子文件夹中工作!
git status >/dev/null 2>&1 && echo Hello World!
如果需要有条件地执行更多操作,可以将其放入if then语句中。
你可以使用:
git rev-parse --is-inside-work-tree
这将打印'true'如果你在一个git回购工作树。
注意,如果你在git repo之外,它仍然返回输出到STDERR(并且不打印'false')。
这个答案是:https://stackoverflow.com/a/2044714/12983
这个回答提供了一个示例POSIX shell函数和一个使用示例来补充@jabbie的回答。
is_inside_git_repo() {
git rev-parse --is-inside-work-tree >/dev/null 2>&1
}
如果它在Git存储库中,Git将返回errorlevel 0,否则将返回errorlevel 128。(如果它在git存储库中,它也会返回true或false。)
使用的例子
for repo in *; do
# skip files
[ -d "$repo" ] || continue
# run commands in subshell so each loop starts in the current dir
(
cd "$repo"
# skip plain directories
is_inside_git_repo || continue
printf '== %s ==\n' "$repo"
git remote update --prune 'origin' # example command
# other commands here
)
done
另一个解决方案是检查命令的退出码。
git rev-parse 2> /dev/null; [ $? == 0 ] && echo 1
如果你在git存储库文件夹中,这将打印1。
或者你可以这样做:
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