【发布时间】:2014-05-07 01:54:59
【问题描述】:
基本上,在我的 .bash_profile 中,我想要的内容达到以下程度:
[[ __gitdir ]] && echo 'foo'
如果 __gitdir 为真和/或返回任何内容,我将回显 foo。我已经尝试了一些东西,非常感谢您的帮助,谢谢!
【问题讨论】:
基本上,在我的 .bash_profile 中,我想要的内容达到以下程度:
[[ __gitdir ]] && echo 'foo'
如果 __gitdir 为真和/或返回任何内容,我将回显 foo。我已经尝试了一些东西,非常感谢您的帮助,谢谢!
【问题讨论】:
我想你想要
git rev-parse --show-toplevel &>/dev/null
虽然你问题的措辞让我有点困惑。在 Git 存储库中的任何位置运行时都会成功(返回 0),否则会失败(返回非零),但不会产生任何输出,因此非常适合与 && 链接或与 if 一起使用。
请注意,这不会进入 [[ ... ]] 测试,例如
git rev-parse --show-toplevel &>/dev/null && echo "$PWD is in a Git repo." || echo "$PWD is not in a Git repo."
将宣布当前工作目录是否在 Git 存储库中。
【讨论】:
__gitdir 是一个字面函数!我以为这只是你编的一个名字,而你正在寻找这样一个功能的实现。但是,我仍然认为git rev-parse 方法更好,因为它更健壮:它不依赖于安装的 Git 补全。确实,Git completion is not installed for everyone.
这个:
git rev-parse --quiet --git-dir
这实际上是 Git 在 git-sh.setup.sh 中使用自己的 shell 脚本。
【讨论】:
--quiet 实际上并没有使命令安静!?!?
【讨论】:
__gitdir不相同。 __gitdir 命令似乎等同于git rev-parse --top-level。即,当 PWD 位于 Git 存储库下的任何位置时,__gitdir 会成功,而 [ -d .git] 只会在 Git 存储库的顶层工作。