需要git rev-parse悄悄地失败并返回null

jrcvhitl  于 2023-04-28  发布在  Git
关注(0)|答案(2)|浏览(155)

我试图找到我的git仓库的顶层,但如果我目前不在git仓库中,它会默默地失败。这段代码将从另一个脚本中调用,我可以在其中使用git顶层或命令行选项。比如说

gpath = `git rev-parse --show-toplevel --quiet`
if (gpath == null) && (options.path == null) 
  puts help
end

如果我只尝试git code@a shell提示符,我会得到"fatal:不是git仓库"。我尝试添加--verify开关,结果相同。有人知道怎么做吗?

2vuwiymt

2vuwiymt1#

if GPATH=`git rev-parse --show-toplevel --quiet 2>/dev/null`; then
  echo "repo: $GPATH"
else
  echo "not a repo"
fi

2>/dev/null将致命错误消息从标准错误(stderr)重定向到/dev/null(nowhere)。在这种情况下,git rev-parse将以失败状态退出,您可以使用上面的if语句进行检查。

xe55xuns

xe55xuns2#

注意,确保使用Git 2。41+(2023年第二季度)
git rev-parse --quiet foo@{u}”(man)",或者任何要求@{u}使用GET_OID_QUIETLY选项解析的东西,都不会悄悄地失败,这已经在Git 2中得到了纠正。41(2023年第二季度)。
参见commit dfbfdc5(2023年3月16日),作者Felipe Contreras ( felipec )
(由Junio C Hamano -- gitster --合并于commit 8069aa0,2023年3月28日)

object-name:修复quiet @{u}解析

签字人:费利佩·孔特雷拉斯
当前,当上行未配置时,git rev-parse --quiet @``(man){u}`实际上不是安静的:

fatal: no upstream configured for branch 'foo'

就这么办吧。
在您的案例中,您并不依赖于@{u},但您知道git rev-parse --quiet并不总是安静的。

相关问题