如何将自动分割提交到不同的分支?

问题描述:

对于我的学校项目,我曾经有过一个大回购项目,其中有几个具体项目的子目录。因为我没有时间,所以我总是向master分支投入任何东西。如何将自动分割提交到不同的分支?

问题是,事实证明这是不可行的,因为恢复较旧的提交或确定哪些提交属于不阅读消息的提交变得越来越困难。

目前,它看起来像这样:

导演树:

projects/ 
    projectA/ 
    projectB/ 
    projectC/ 
    ... 

回购:

A---B---C---D---E---F---G<master> 

我发现,几乎所有的从大约五犯(与众不同之处,我可以用手修复)只需修改其中一个文件夹中的文件即可。

是否有一个简单的(自动??)方式(脚本?),它会自动分配提交到项目和创建不同分支的痛苦工作?我想有这样的事情在最后:

回购:

A---C---G<project A> 
|\ 
| \ 
| \ 
| B---D<project B> 
E---F<project C> 

您使用的是--subdirectory-filter选项寻找git filter-branch

为所需的三个项目创建三个分支,然后在这些分支中运行git filter-branch --subdirectory-filter projectX应为您提供期望的结果。

您可能还想考虑只为每个项目使用一个存储库。完成上述操作后,创建新的存储库(每个存储库都包含您之前创建的其中一个分支作为其主服务器)将变得微不足道。

+0

可以请你解释一位没有经验的用户如何分解成不同的回购细节? – fuz 2010-10-06 05:52:54

+0

想要更详细的回答,请随时提出一个新问题,但基本想法是使用'git init'创建3个新的存储库,从包含每个目录的分支的存储库获取所有对象,然后将每个新存储库的主设置为相应分支中的任何内容。之后,您可以删除每个项目存储库中的其他分支,并且可能还会指示git删除所有引用对其他项目的提交的对象,而这些对象现在无法从新的回购站主服务器访问。 – rafl 2010-10-06 06:05:11