这是我前一个问题的后续内容.
我可以查看cvsps的输出(保存在我的〜/ .cvsps目录中)并查看主要复杂提交的补丁集.但是,当我执行cvsimport来更新现有的git存储库时,这个提交不会显示出来.我知道git-cvsimport将忽略超过10分钟的补丁集,以避免导入不完整的CVS提交.我想我也听说它会跳过无法识别相关分支的补丁集.还有什么其他原因导致git-cvsimport无视我的提交?我该怎么调试呢?
这里有一点cvsps输出:
patchset: 50064 date: 1238445635 author: skiphoppy tag: tag_flags: 0 branch: HEAD branch_add: 1 descr: My log message -=-END CVSPS DESCR-=- members: file:ordinaryChangedFile; pre_rev:1.44; post_rev:1.45; dead:0; branch_point:0 file:newFileRenamedAndModifiedFromOldFile; pre_rev:INITIAL; post_rev:1.1; dead:0; branch_point:0 file:deletedFileGoneBecauseRenamed; pre_rev:1.2; post_rev:1.3; dead:1; branch_point:0 ...
那branch_add:1行与它有什么关系吗?整个存储库中只有9个这样的提交; 其他50090提交说branch_add:0.除此之外,我不知道从cvsps或git-cvsimport的角度来看有什么不同.提交很复杂,涉及重命名几个文件并进行相关的内容修改.CVS绝对难以处理.当然,git是一个快照,但当真正的后端是CVS时,git很难处理.
我必须再执行相同类型的复杂提交三次,而且由于cvsimport无法看到我的提交,我无法每次花费4个半小时从CVS重新导入一个全新的git存储库.
更重要的是,我被我每天运行的git-cvsimport(我打算放入cron,甚至写一个守护进程每五分钟左右运行一次)的事实吓坏了,我可能会错过将来的提交!我发现没有办法git现有的存储库来获取这些提交; 我只能在一个全新的存储库中运行git-cvsimport并永远等待,在我使用的时候失去了许多其他分支的使用.
嗯,这可能是问题所在.我的git-cvsimport行看起来像这样:
git cvsimport -p x ...
-px应该将-x选项传递给cvsps,告诉它忽略它之前运行时所留下的缓存输出.我认为这样做的主要原因是,最后几个可能不完整的补丁集将被丢弃并在下次运行时完成.事实证明,它可能会解决更多问题,而这可能就是其中之一.
我学会了从这篇博客文章中以这种方式运行git cvsimport ,这是目前Google上针对"git cvs"的热门歌曲之一.它只是在上面的过程中,我试图通过cvsps输出的Perl调试器运行git-cvsimport,我必须检查并查看cvsps真正的参数.我了解到cvsps是这样运行的:
cvsps --norc x --cvs-direct ...
代替:
cvsps --norc -x --cvs-direct ...
我通过实验验证了我从cvsps获得了不同的输出,缺少一些补丁集(我不知道模式是什么),当传递x而不是-x时.感谢Murphy定律,cvsps似乎没有报告这是一个问题,而git-cvsimport从未见过它.
所以无论如何,git cvsimport需要像这样运行:
git cvsimport -p -x ...
我的此存储库的先前版本在此时已完全被清除,但我已能够将最后一个问题提交强制转换为它们(尽管缺少某些早期的提交).所以我再次经历了四个小时的导入过程,我希望这将是它!
最后一个提示:Windows上的git-cvsimport似乎根本不起作用.我获得的提交数量不到10%,尽管我确实找到了一棵类似于我们项目当前状态的树.它似乎缺乏几乎所有的历史......