我想将一个旧的CVS仓库迁移到git,同时保留历史。
下面是我如何在CVS中检查需要迁移的5个分支:
branch1:
cvs co -r branch1 sim Login SystemMonitor archiver
branch2:
cvs co -r branch2 par sim Login archiver
cvs co -r branch2_redux editor
branch3:
cvs co -r GEN3 par sim SystemMonitor archiver
cvs co -r GEN3_update1 tms editor
cvs co -r GEN3Sim
...
所以这里的问题是一个分支指定:
1.多次修订
1.在一个单一的结帐不同的模块
1.多个检出命令
我不是Maven,但它似乎太灵活了,无法适应git,因为你一次只能检查一个分支/标签。
我想要的是:
1.包含branch 1到branch 5的git repo
1.'git checkout branch 3'需要在文件系统上创建与上面显示的3个cvs checkout命令相同的文件。如果有额外的模块/目录保持未使用,如果这使事情变得更容易,这是可以的,但我需要与CVS相同的3个文件集也在那里,以便项目构建。
1.保留每个分支的提交历史
1.对于不同分支之间相同的提交,它们在git中也应该相同。例如,Login模块的前75%的提交在所有分支中都是相同的,所以我希望它们在git中具有相同的SHA。
这是否可以实现,如果可以,如何实现?
我已经试过了我成功地在repo上运行了cvs 2git(非常长的10个小时)。我最终得到了branch 1、branch 2、branch2_redux、GEN 3、GEN3_update1、GEN 3Sim(-r标志)等分支。但是,我不确定如何将GEN 3 +GEN3_update1+ GEN 3Sim的历史和文件组合到一个分支3中。
这是我用来转换repo的命令:
cd ~
rsync -avz myusername@cvsserver:/path/to/cvsrepo/ ./cvsrepo_local_copy/
cvs2git --blobfile=~/git-blob.dat --dumpfile=~/git-dump.dat --username=cvs2git ~/cvsrepo_local_copy
mkdir new_git_repo && cd new_git_repo && git init
cat ~/git-{blob,dump}.dat | git fast-import
1条答案
按热度按时间vngu2lb81#
我建议先修改 CVS repo(的副本),然后 * 运行cvs2git。
,v
文件只是文本文件,没有校验和或任何内容,因此您可以编辑它们。类似于这样的操作,对所有你想标准化为一个基本分支名称的分支进行。
一旦你完成了这一步,你所有的“branch2*”分支都应该被称为“branch2”,当你运行cvs2git时,所有的文件都应该在同一个分支上创建,如你所愿。