如何在git中管理重叠的存储库,包括同一目录中的文件?

时间:2011-10-12 14:27:57

标签: git

我有一个复杂的存储库,有时代码段之间的逻辑边界跨越目录边界。有时目录X中的单个文件确实需要与目录Y中的文件一起使用。

例如,假装我有一个看起来像这样的中央回购:

a/foo
a/bar
b/baz1
b/baz2

...我希望我的本地存储库最终得到a/*b/baz1,但不是b/baz2。其他文件应该在另一个存储库中结束。

(是的,长期解决方案是移动文件,但在我进行重构时,我需要对文件进行适当的版本控制。)

我可以使用git来执行此操作吗?

2 个答案:

答案 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)

如果您想重构现有代码,只需创建一个功能分支并更改您需要更改的所有内容(即使在不同的目录中)。完成后,只需将更改的内容合并回主人或您正在使用的另一个分支。

说实话,我不太明白这个问题。