问题的根源在于git checkout
不在子目录中搜索。要使用星号签出文件,您必须指定 git 可以找到它们的文件夹。
尽管如此,仍然可以签出名称中包含特定字符串的所有文件,无论它们在存储库中的位置如何。为了实现这一点,我们必须组合许多命令。
git ls-tree -r --name-only <branch> | grep <pattern>
这将返回名称中具有给定模式的所有文件的列表;我们将此命令的输出传递给git checkout
这将相应地更新工作树。
git checkout <branch> -- $(git ls-tree -r --name-only <branch> | grep <pattern>)
魔法就完成了。
为了更方便使用,我建议在您的全局中创建一个别名gitconfig.
git config --global alias.super-checkout '!f() { git checkout $1 -- $(git ls-tree -r --name-only $1 | grep "$2"); }; f'
之后您可以使用该命令git super-checkout <branch> <pattern>
,或者在你的情况下:
git super-checkout origin/BRANCH_WITH_CORRECT_FILES org.eclipse.jdt.core.prefs
Note:显然您可以使用不同的别名super-checkout
.
看看git ls-tree文档 https://www.kernel.org/pub/software/scm/git/docs/git-ls-tree.html为了更好的理解。