要对所有文件应用一些更改pom.xml
,我运行以下命令:
git checkout --theirs **/**/**/**/pom.xml
git checkout --theirs **/**/**/pom.xml
git checkout --theirs **/**/pom.xml
git checkout --theirs **/pom.xml
git checkout --theirs pom.xml
但我找不到针对所有文件的替换pom.xml
,无论它们的目录深度是什么级别。
如何在单个命令中完成我所做的事情?
答案1
根据您的要求,这里有两个可能的答案。您不能使用 shell 通配符来匹配尚不存在的文件或目录,因此您不能使用 shell 通配符来指示git
要检出哪些项目,除非它们已存在于您的文件系统中。幸运的是git
,它本身确实支持针对这种情况的通配符。
特别是对于
git
,您需要将 传递**
给git
自身,而 shell 不会尝试扩展它。在这种情况下,使用引号将字符串作为文字传递给git
:git checkout '**/pom.xml'
git
shell之外bash
还支持双星通配符扩展。文档 (man bash
) 写道,globstar
**
如果设置,路径名扩展上下文中使用的 模式将匹配所有文件以及零个或多个目录和子目录。如果模式后跟/
,则仅目录和子目录匹配。这是一个默认情况下通常不启用的选项
bash
,因此您需要启用它:shopt -s globstar
此后的例子,
ls **/pom.xml