从一个提交中检出所有以特定扩展名结尾的文件。

3
我知道如何从一次提交中检出一个文件。
git checkout a0b1c3d -- path/to/some/file.txt

我也知道如何从一个提交中检出多个文件。

git checkout a0b1c3d -- path/to/some/file.txt path/to/another/file.txt

我们如何检出所有以特定扩展名结尾的文件?我已经尝试了以下方法:
git checkout a0b1c3d -- *.txt
git checkout a0b1c3d -- */**/*.txt

两者都不起作用。尽管指定的提交中有*.txt文件要检出,但两个命令都没有检出任何内容。
“从以前的提交中检出特定文件名的所有文件”建议可能是pathspec存在错误。请参考此链接了解详情。

在最后一种情况下,git的argv是什么样子? - Brian Cain
很抱歉,我不理解这个问题,@BrianCain。也就是说,你所说的argv是什么意思? - Shaun Luttin
我的意思是从 git 自身的角度来看,实际的命令行参数列表是什么样子的? 显示的星号是通配符,有时候通配符由 shell 处理,有时候由命令处理。 因此,让我们确保我们解决了正确的问题。 如果您看到一个参考文献说要使用 "*/**/*.txt",那么它可能利用了一个在您的 shell 中不存在的 shell 功能。 - Brian Cain
@BrianCain 看起来像是这个错误:error: pathspec '*/**/*.txt' did not match any file(s) known to git. - Shaun Luttin
你使用的 git 版本是什么? - Brian Cain
Git 版本:git version 2.10.2.windows.1 - Shaun Luttin
2个回答

2

引用全局通配符,这样你的shell会将其传递给Git而不是自己扩展它:

git checkout -- \*.txt

对我来说完美运作的是它检查了所有的 .txt 文件(在任何层级,参见 git 帮助中的路径名匹配规则)。


0

使用命令替换,可以获取存储库中具有特定扩展名的所有文件。这可以通过 git ls-treegrep 实现。

结果文件列表可以传递给 git checkout

您可以使用以下命令检出具有 txt 扩展名的文件的版本 a0b1c3d

git checkout a0b1c3d -- $(git ls-tree --full-tree --name-only -r HEAD | grep .txt)

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