裸存储库中的 git ls-files

Posted

技术标签:

【中文标题】裸存储库中的 git ls-files【英文标题】:git ls-files in bare repository 【发布时间】:2014-11-12 09:53:07 【问题描述】:

我想访问一个裸 git 存储库,我想列出存储库中的所有文件。

在普通的 git 存储库中,我可以通过运行 git ls-files 轻松做到这一点。

示例输出:

$ git ls-files
README.md
file1.js
file2.js
file3.js
folder1/file4.js
folder2/file5.js

在一个裸 git 存储库中,这会默默地失败。它只是不返回任何文件(但成功退出):

$ cd my-bare-repository
$ git ls-files #returns nothing
$ echo $? #print exit code from previous command
$ 0

现在我知道我必须提供一个有意义的分支或 master 来显示。但是我如何才能真正获得我知道在我的存储库中的文件列表?

【问题讨论】:

【参考方案1】:

你可以试试其他列出文件的命令:

git ls-tree --full-tree -r HEAD

根据to this comment,命令git ls-tree在bare repo中有效。

【讨论】:

谢谢,这行得通。但是,在我当前的示例中,无论有无 --full-tree,我都会得到相同的输出 @JesperRønn-Jensen 你也有 git ls-tree --full-tree -r --name-only HEAD ,只列出文件名,(没有关于权限和 blob SHA 值的主要内容) 我接受这个答案,因为它超出了我的要求:) +10 表示正确,+10 表示快速回答 :) git ls-files 在带有 git 2.27 的裸存储库中为我工作,并且现在可能已经支持它一段时间了。 @VictorRoetman 是的:它可以列出索引中的文件。默认情况下 (git-scm.com/docs/git-ls-files) 从技术上讲,裸存储库可以有一个索引 (github.com/libgit2/libgit2sharp/issues/…)。但在我的裸仓库中,git ls-files 什么也没返回。

以上是关于裸存储库中的 git ls-files的主要内容,如果未能解决你的问题,请参考以下文章

git:使用(本地)远程存储库

Git:在裸存储库中更改Active Branch的正确方法?

Git存储库中的Git存储库[重复]

如何转换 git 存储库中的大量提交 [重复]

如何同步两个 git 裸存储库?

如何将 Git 存储库转换为嵌套在另一个(父)Git 存储库中的子模块?