如何从任意工作树中找到主工作树

3
有没有一种方法可以通过在任何工作树中运行命令来确定“主”工作树(即带有.git目录的工作树)?以下命令不起作用:
git rev-parse --show-toplevel

我能想到的最好方法是解析git worktree list --porcelain,然后测试每一个工作树中是否有一个.git目录。不过这似乎有点糟糕。Git是否有内置命令可以完成这个任务?
2个回答

4
啊哈!看起来你能做到。
git rev-parse --path-format=absolute --git-common-dir

然后,您可以从路径中删除.git(可能是安全的),或者执行

git rev-parse --path-format=absolute --show-toplevel

第一个路径返回的目录中。

--path-format=absolute很有帮助,否则这些命令有时会返回相对路径,有时会返回绝对路径。

此答案上的评论帮助我弄明白了这个问题。


1
这就是你能够接近的地方了。虽然有可能(但不寻常,如果我在做推荐的话,也不建议)将某个Git存储库的“主”工作树放置在与存储库本身无关的位置,在这种情况下,如果您不知道如何找到主工作树,则没有简单的方法。 - torek
在这种情况下,我猜你得解析 git worktree list --porcelain 命令输出? - Timmmm
1
但我猜想,如果你这样做的话,就没有所谓的“主”工作树了... - Timmmm
即使如此也不能保证,因为有人可能使用环境变量覆盖来设置所有这些内容,并且从未在任何永久文件中记录正确的路径。不推荐这样做。 :-) (另一种表达方式:没有什么是百分之百可靠的,因为傻瓜总是那么聪明。 - torek
在工作树(worktree)中,有一个名为.git的文件,而不是一个目录。它指向了工作树的gitdir。该命令不返回该路径。这是您需要的那个路径,例如在.git/hooks目录中安装钩子时。 - Highmastdon

0

我不知道有没有一个命令可以做你想要的事情,但是你可以解析你的工作树中“.git”文件的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接