有没有办法只对某些文件类型(.xlf)执行git checkout,它会在整个存储库中进行递归?结果应包含存储库的结构,即文件夹和特定扩展名的包含文件.
回购A.
file.xlf
file.txt
level2/
file2.xlf
file2.txt
level3/
file3.xlf
file3.txt
Run Code Online (Sandbox Code Playgroud)
结帐后回购B看起来像:
回购B.
file.xlf
/level2
file2.xlf
/level3
file3.xlf
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止:
$ git checkout FETCH_HEAD -- '*.xlf'
Run Code Online (Sandbox Code Playgroud)
这将提供".xlf"根级别的所有文件,但不会递归到子目录.
感谢您的帮助.
Dad*_*ane 16
你不需要find或sed,你可以使用通配符,因为git理解它们(不依赖于你的shell):
git checkout -- "*.xml"
Run Code Online (Sandbox Code Playgroud)
引号将阻止shell在执行之前将命令仅扩展到当前目录中的文件.
您还可以禁用shell glob扩展(使用bash):
set -f
git checkout -- *.xml
Run Code Online (Sandbox Code Playgroud)
当然,这将无可挽回地抹去你的变化!
更新:检查Dadaso的答案,找出适用于大多数情况的解决方案.
您可以尝试这样的事情,使用git ls-tree和grep:
git checkout origin/master -- `git ls-tree origin/master -r --name-only | grep ".xlf"`
Run Code Online (Sandbox Code Playgroud)
请注意,这需要一个远程origin的master分支.您还必须提供正确的过滤器/扩展名grep.
在执行此命令之前,您应该执行以下操作:
git init
git remote add origin <project.git>
git fetch
Run Code Online (Sandbox Code Playgroud)