列出本地Git仓库中的文件?

394

我正在使用SparkleShare,它使用Git在我的笔记本电脑和备份服务器之间同步文件。

现在我想能够浏览我上传到服务器的文件和目录,但是我不知道怎么做。

我知道Git使用某种特殊的文件层次结构,我不能只列出我的文件,对吗?

但是我要做什么才能列出它们并浏览我的文件呢?


被标记为重复问题 https://dev59.com/cWUo5IYBdhLWcg3w_DpK#69869399,尽管这个问题更早,但另一个问题表述更清晰,并且有更多的答案,因此SO保持整洁。 - xeruf
3个回答

638

这个命令:

git ls-tree --full-tree -r --name-only HEAD

列出您的 git 仓库正在跟踪的所有已提交文件。


只有当我们至少有一次提交时,这才会起作用。 - zkutch

394

4
与上面的答案输出相同,但使用--name-only(短格式)。很漂亮的瓷器。 - Ron E
26
需要注意的一点是:被接受的答案适用于裸仓库,但这个答案不适用。 - Trebor Rude
1
这个 Git 命令可以生成更干净的输出,如果你只想要 Git 跟踪的文件列表,那么它是理想的选择。 - mico
1
有没有一种方法只列出目录,就像 git ls-directories 这样的东西? - Ramesh Pareek
17
警告:如果您在子目录中,它只会列出该目录树下的文件 - 问题说明了“存储库中的所有文件”,但这只有在您位于存储库根目录时才是正确的。 - wim
显示剩余4条评论

5

git ls-tree --full-tree -r HEADgit ls-files 会一次性返回所有文件。对于有数百或数千个文件的大型项目,并且如果您只关心某个特定的文件/目录,那么您可能会发现探索特定目录更方便。您可以通过获取要探索的目录的ID/SHA-1,然后使用 git cat-file -p [目录的ID/SHA-1] 来实现。例如:

git cat-file -p 14032aabd85b43a058cfc7025dd4fa9dd325ea97
100644 blob b93a4953fff68df523aa7656497ee339d6026d64    glyphicons-halflings-regular.eot
100644 blob 94fb5490a2ed10b2c69a4a567a4fd2e4f706d841    glyphicons-halflings-regular.svg
100644 blob 1413fc609ab6f21774de0cb7e01360095584f65b    glyphicons-halflings-regular.ttf
100644 blob 9e612858f802245ddcbf59788a0db942224bab35    glyphicons-halflings-regular.woff
100644 blob 64539b54c3751a6d9adb44c8e3a45ba5a73b77f0    glyphicons-halflings-regular.woff2

在上面的例子中,14032aabd85b43a058cfc7025dd4fa9dd325ea97是我想要探索的目录的ID/SHA-1。在这种情况下,结果是我的Git repo正在跟踪该目录中的四个文件。如果目录中有额外的文件,则意味着这些额外的文件未被跟踪。当然,您可以使用git add <file>...添加文件。

1
你也可以直接使用 cd 命令进入你感兴趣的目录,而不需要使用 --full-tree 参数。 - Nathan
@Nathan,这对于裸仓库或者工作树完全在其他地方的情况是否仍然适用?毕竟问题是关于仓库而不是工作树的。 - 0xC0000022L

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