首页 > 解决方案 > 有没有办法列出远程存储库跟踪的所有文件?

问题描述

我知道我可以列出某个分支跟踪的文件git ls-tree -r <branch> --name-only,这正是我想要的。但是,当我尝试使用仅远程分支执行此操作时,我收到错误:sh: origin/master: No such file or directory. 那么有没有一种方法可以在不拉动该分支的情况下列出远程分支中的文件?

标签: git

解决方案


首先值得一提的是,这不是由分支跟踪或由(Git)存储库跟踪的文件集,因为这些短语的定义并不明确。git ls-files -ron 提交的结果是该提交中的文件集

在 Git 中跟踪这个词相当多,但是当我们在 Git 中谈论跟踪文件未跟踪文件时,我们的意思是现在索引中存在或不存在的文件

如果您使用或提取某些特定的提交,在 Git 索引中的文件集通常是1该提交中的文件集。因此,从这个意义上说,您可以将这些“跟踪”文件称为“跟踪”文件,但如果这样做,您就会陷入混乱。被跟踪的文件是那些在 Git 的索引中的文件。您可以随时更改该设置:git checkoutgit switch

git add F

将文件的工作树副本复制F到 Git 的索引中。2 如果它以前不存在——未被追踪——好吧,现在它存在了,所以现在它被追踪了。或者:

git rm --cached F

删除文件 F 的索引副本。如果之前存在,则现在不存在;现在文件F未跟踪。文件F是否在其他提交中都没有关系,除非并且直到您签出该提交。

每当您进行新的提交时,Git 都会使用当时索引中的文件进行新的提交。甚至命令git commit -a、和 也可以使用索引,尽管这些命令也使用额外的临时索引文件,以便在发生故障时轻松回滚更新。(这使得描述它们的确切动作,特别是在存在 Git 钩子的情况下,特别棘手。)git commit --include filesgit commit --only files

同时,您可以检查您拥有的任何提交,使用git ls-files -r它;您只需要使用 Git 可以转换为正确提交哈希 ID 的名称。 正如您在评论中指出的那样,您使用的是两个名称而不是一个名称。


1这个词通常在这里,因为您可以通过设置环境变量来使用 Git 的索引或使用备用索引来玩各种技巧GIT_INDEX_FILE。此外,Git 有时会允许您在提交和/或分支切换操作之间进行索引和/或工作树更改。有关血腥细节,请参阅Checkout another branch when there are uncommitted changes on the current branch

2如果您在当前位于索引中的文件上设置了--assume-unchanged或位,则不会从工作树更新索引。您也可以在脚注 1 中使用。--skip-worktreegit addGIT_INDEX_FILE


推荐阅读