如何查看 Git 认为的顶层工作目录?

27

可能重复:
有没有一种方法可以在一个命令中进入git根目录?

有时,我会误以为自己在Git工作目录中,但不明显的是该目录的顶级工作目录(包含.git/)。 (可能是因为该仓库创建时出现了错误。)

那么,如果我在子目录中,如何找出顶级Git仓库目录呢?我怎样向git询问它认为当前的顶级工作目录是什么?

2个回答

54

试试这个:

git rev-parse --show-toplevel

1
感谢您指出这一点;没有您的帮助,我很难猜测要查找 git-rev-parse -- 因为它的名称暗示它是关于处理修订规范的。顺便说一句,我很高兴看到 git --work-tree 的工作方式类似于 git --exec-path[=<path>]:"如果没有给出路径,git 将打印当前设置";至少,在我看来,这将是寻找此功能的一个逻辑位置。 - imz -- Ivan Zakharyaschev
1
请注意,如果在.git目录内部,则会失败。有关解决方案,请参见标记的重复内容。 - Tom Hale
该命令在子模块中同样无法运行。 - Nik Reiman
--show-toplevel标志返回的名称; 这个能改吗?我在映射的网络驱动器上进行了git init,现在当我实际在服务器上(而不是在映射的一侧)时,驱动器名称是不同的。这意味着当我在服务器上时,返回的内容与--show-toplevel不正确。它需要返回D:/而不是Y:/,这就是我找不到如何做的地方。 - Coty Embry
1
@CotyEmbry 或许git rev-parse --show-cdup更适合你。无论如何,在服务器上报告的绝对路径不正确是很奇怪的... - imz -- Ivan Zakharyaschev

2
我已经编写了一个简单的脚本(git-find-git-dirs 在我的 "git-shortcuts" 集合中),使这类 Git 查询变得方便:
#!/bin/bash

# find-git-dirs -- A simple script to "find" (i.e., "print") the GIT_DIR, as assumed by Git. (Useful if you are in a subdir, and you are not sure about the top-level repo dir.)

SUBDIRECTORY_OK=yes
. "$(git --exec-path)/git-sh-setup"

echo "GIT_DIR=$GIT_DIR"

把它放到~/bin/目录下;现在我可以像这样执行我的简单查询:
$ git find-git-dirs
GIT_DIR=/home/imz/.git
GIT_WORK_TREE=
$ 

我只是从最初的问题中缺少打印顶层 工作 目录,现在它只打印到内部 git 存储库目录的路径...

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