【问题标题】:Test if current repo is under Git in Bash测试当前 repo 是否在 Bash 中的 Git 下
【发布时间】:2014-05-07 01:54:59
【问题描述】:

基本上,在我的 .bash_profile 中,我想要的内容达到以下程度:

[[ __gitdir ]] && echo 'foo'

如果 __gitdir 为真和/或返回任何内容,我将回显 foo。我已经尝试了一些东西,非常感谢您的帮助,谢谢!

【问题讨论】:

    标签: git bash


    【解决方案1】:

    我想你想要

    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 &>/dev/null && echo "foo")?两者似乎都有效。感谢您的宝贵时间!
    • 哦,我什至没有意识到__gitdir 是一个字面函数!我以为这只是你编的一个名字,而你正在寻找这样一个功能的实现。但是,我仍然认为git rev-parse 方法更好,因为它更健壮:它不依赖于安装的 Git 补全。确实,Git completion is not installed for everyone.
    【解决方案2】:

    这个:

    git rev-parse --quiet --git-dir
    

    这实际上是 Git 在 git-sh.setup.sh 中使用自己的 shell 脚本。

    【讨论】:

    • 请注意,--quiet 实际上并没有使命令安静!?!?
    • 应该的。 IIRC,你是对的,但这是一个错误,应该修复。
    【解决方案3】:

    我只是这样做。不是完全证明,但它已经为我工作了一段时间

    if [ -d .git ]
    

    Example

    【讨论】:

    • 正在这样做(然后也使用 or ../.git 进行),但我想在几个级别之后效率低下(我计划每次更改目录时都运行它)
    • 这与__gitdir相同。 __gitdir 命令似乎等同于git rev-parse --top-level。即,当 PWD 位于 Git 存储库下的任何位置时,__gitdir 会成功,而 [ -d .git] 只会在 Git 存储库的顶层工作。
    • 对,我希望将所有(或至少,比如说,5 个)级别的目录放入目录
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2011-11-01
    • 2020-11-05
    • 2012-08-24
    • 2011-07-16
    • 1970-01-01
    • 2011-09-07
    相关资源
    最近更新 更多