我会尽量保持这个简短。如何合并来自包含另一个目录子集的分支的更改?
我们有一个充当SVN镜像的git存储库(由BitBucket管理)。此回购包含每在公司,因为刚开始的时候项目,并有每一个开发商克隆它不是一个合理的要求(25 + 33GiB完整克隆和15 +吉布浅),但即便如此,我们并不需要一个完整的克隆整个存储库的一部分,只是其中的一部分目录。
使用git-subtree,我设法分割出所有感兴趣的目录,并认为我们可以使用git-subtree add将这些目录添加回本地回购站。这个过程对svn仓库是透明的。这工作得很好,尺寸更易于管理(9 + 6GiB完整克隆和8GiB浅)。问题是我不知道我们如何才能在这些“部分克隆”中进行修改并将它们合并回主分支。
我认为我们可以使用通常的pull请求来让它们进入,但由于分支树不同,它不像我想要的那样工作(缺少的目录被视为清除)。我只想合并克隆目录的更改并保持其他目录不变。
我不认为使用稀疏结帐会有帮助,因为我们仍然需要克隆完整的回购才能使其工作,这正是我想要避免的。
是否有一些命令组合可用于使这一切工作?
下面是我用来分割出的目录和检出感兴趣的目录(修改)脚本:
split_projects.sh
我以前的git-子树拆分并重新加入的目录和使用的混帐 - 以改善重新分裂的速度(仅处理新的提交)。需要注意的是归队是不主要致力于回购(我不是愿意尝试提交该特别是与SVN镜像)。
initial_setup.sh
这是准备本地回购的脚本。供Windows用户使用,其中许多人对git或命令行工具不熟悉。
checkout_projects.sh
实际的结帐脚本。
还有另一个从拆分子目录中获取更新,但我没有在这里包括它。
合并的子树选项有什么问题? – jthill
我的理解是,使用该策略会合并分支,其中一个完全包含在另一个分支中。即分支A已经是分支B的子树。在我的情况下,分支A包含分支B的子目录,并且不起作用。 –
您可能需要联系邮件列表([email protected])才能获得支持。然而,我的直觉是,可能没有解决方案,因为你正在寻求以某种方式将在子树中所做的更改应用于根回购,并且我无法想象如果没有关于根回购。如果您的开发人员使用Windows,那么最近开源的GVFS项目可能实际上就是您想要的。 – Pockets