我们的团队正在使用存储在CVS中的代码库,该代码库由客户端管理 在任何可预见的未来,没有办法说服客户切换到Git。
因此,为了能够使用git的明显优势,我们想制作CVS repo的git副本,使用它并保持两个repos同步。
我们解决问题的第一个尝试是:
git init
和git commit
在同一目录中一次导入整个树git-cvsexport
,并使用cvs
提交功能cron
)cvs update
,git add .
和git commit
将cvs中的新内容转移到git 这种方法有缺点 - 主要问题是CVS和git的历史不一样。
因此,我们计划以here描述的方式切换到git cvsimport
,或多或少。
尽管如此,我们仍然可以对这种情况进行成像:
Ac
,在git上的master分支上提交了Ag
(由git cvsimport
制作),这些都是相似的Xg
git cvsexportcommit
和cvs commit
在cvs上进行提交Xc
$Id $
个部分,并对文件进行实际更改git cvsimport
从cvs导入更改。这会将Xc
转移到git的主分支并进行提交Xg'
我们如何告诉git提交Xg
和Xg'
实际上是一回事?
根据{{3}},似乎没有办法做到这一点,因为内容是提交id的关键部分,而git只使用id来识别提交。
为了解决这个问题,我想到了以下解决方案:
git cvsimport
制作补丁,并跳过由我们的团队创建的提交,而不是发布cvsps
,我们会通过作者的电子邮件识别这些提交。这不会创建提交Xg'
,因此我们必须特别注意合适的分支合并。我们假设我们将从功能分支运行git cvsexportcommit
。首先将功能合并到主分支会更好(意味着更容易维护)吗?问题git cvsexportcommit
?会有什么不同吗?
或许,我们的整个想法都是错误的,我们应该考虑使用替代解决方案吗?
提前谢谢。
答案 0 :(得分:0)
是的,根据我们的经验,双向直播cvs< - > git镜像是一种微妙且容易出错的事情,需要手动保姆。我只有一种方式(提交cvs,实时镜像到只读git),这很难保持正确。
我们的存储库足够大,没有任何工具可以及时地进行增量更新,因为大多数(至少我们发现)并没有真正做到"增量"它们有效再次从头开始。所以我们使用viewvc 创建了一个cvs repo的数据库视图,然后我们可以在git中生成单独的提交。
您应该可以使用git cvsimport -k
来杀死git端的CVS关键字。
我想是的,保留一份你自己团队的成员列表,并且使用cvs - > git工具执行特殊代码,这些代码将再次返回到git中会非常有意义。
我认为如果你基本上以同一方式进行同步,通过在仅在git中编写的分支中完成所有工作,会更简单。定期提交将简单地同步到CVS中。你可以通过定期与master合并来跟上git的最新状态。 (或者你所基于的任何CVS分支。)合并提交将作为"合并分支dev-git与master"一起提交回CVS。提交缺少git的合并感知合并提交内容。然后你可以有一个定期的合并窗口,在那里你可以与CVS团队安排,让你做相反的事情:用你的更改向CVS分支做一次提交。你标记了你的" dev-git"有意义的分支" feature_xyx_20160419" cvs中的提交注释将是"将dev-git合并到feature_xyz_20160419"。