我有一个复杂的存储库,有时代码段之间的逻辑边界跨越目录边界。有时目录X中的单个文件确实需要与目录Y中的文件一起使用。
例如,假装我有一个看起来像这样的中央回购:
a/foo
a/bar
b/baz1
b/baz2
...我希望我的本地存储库最终得到a/*
和b/baz1
,但不是b/baz2
。其他文件应该在另一个存储库中结束。
(是的,长期解决方案是移动文件,但在我进行重构时,我需要对文件进行适当的版本控制。)
我可以使用git来执行此操作吗?
答案 0 :(得分:2)
您可以使用Git的sparse checkout功能执行此操作(如果该链接仍无效,请尝试this one或查看man git-read-tree
)。在克隆的存储库中运行以下命令:
git config core.sparsecheckout true
echo '*' >.git/info/sparse-checkout
echo '!b/baz2' >>.git/info/sparse-checkout
git read-tree --reset -u HEAD
这将删除本地工作目录中的现有b/baz2
文件。它仍然在存储库中,但是你的本地Git不会关心它已从工作目录中消失。
答案 1 :(得分:0)
如果您想重构现有代码,只需创建一个功能分支并更改您需要更改的所有内容(即使在不同的目录中)。完成后,只需将更改的内容合并回主人或您正在使用的另一个分支。
说实话,我不太明白这个问题。