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

3

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

例如,假设我有一个中央代码库,看起来像这样:

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

我希望我的本地仓库最终包含a/*b/baz1,但不包括b/baz2。其他文件应该在另一个仓库中。
(是的,长期解决方案是移动文件,但在我进行重构时,需要适当地对文件进行版本控制。)
我能用git做到这点吗?

这就是分支的用处 :-) - hoppa
2个回答

2
你可以使用Git的稀疏检出功能来完成这个操作(如果该链接仍无法打开,请尝试这个链接或查看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 不会关心它已经从工作目录中消失了。

我还需要先从中央代码库获取它吗? - Alex Feinman
我相信是这样的。不过,你只需要做一次就可以了。 - Greg Hewgill

0
如果您想重构现有代码,只需创建一个功能分支并更改所有需要更改的内容(甚至在不同目录中)。完成后,将更改的内容合并回主分支或另一个正在使用的分支即可。
说实话,我并没有看到问题所在。

假设代码库非常庞大,分支会在网络流量、磁盘空间和时间方面变得昂贵。 - Alex Feinman
1
@AlexFeinman: 切换分支所需的时间应仅与两个分支之间的更改的大小成比例。 - Greg Hewgill
@GregHewgill这种说法不准确。Git必须获取所有文件的状态,如果有很多文件和/或涉及到网络,那么这可能需要很长时间。因此,它与更改的大小和文件数成比例,取决于哪个更糟糕。 - Alex Feinman
在这种情况下,“many files”具体指什么?我正在处理一个相当大的代码库,但是完全没有遇到任何问题。 - hoppa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接