使用git与CVS的最佳实践

49

你在使用git与CVS仓库进行交互时的最佳实践和提示是什么?


3
我很想为SourceSafe问同样的问题,但我真的不想承受(完全合理的)嘲笑。 - T.E.D.
5个回答

22
我为类似问题写了一个答案,链接在这里
当你被迫不得不将更改推送到中央CVS存储库时,这个方法表现出了惊人的效果。

11

我只是为了向朋友展示Git而使用Git-CVS交互,但这非常简单。

  • You need to install a current copy of cvsps. Git cvsimport uses this to access CVS history.
  • We found that, for a large project, inital set-up was much faster by taking a full copy of the CVS repo onto your computer, and doing the git cvsimport locally:

    $ rsync rsync://yourprojecthost.com/cvsroot/yourproject/*  
    $ mkdir myproject.git  
    $ cd myproject.git  
    $ git cvsimport -p -x -v -d :local:/path/to/cvsroot/yourproject 
    
注意,在-p后面加上-x非常重要。这将-x传递给cvsps。有关更多信息,请参见cvsps手册页

1
我认为第三步有一个错误的斜杠。 - Peter Burns
2
@PeterBurns:那个应该是这样的...应该是 git cvsimport -p -x -v -d :local:/path/to/cvsroot yourproject - Archenoth

8
我写了一个关于远程CVS,本地Git的工作流程细节。请查看这个链接

1
你因为未指明的原因“不信任”cvsimport(还有其他工具可以完成此任务),所以你提倡放弃所有先前的修订信息?这是一个可怕的解决方案。 - Brad Mace
有什么可怕的呢?如果我将我的更改推回CVS,那么就不会丢失任何修订历史记录。而且,如果我确实想查看修订历史记录,我总是可以使用CVS命令来做到这一点。 - Kristopher Johnson
CVS添加到.gitignore中,而不是提交到git中,你会得到什么好处?这样做不会使你的git存储库不完整吗?请参见https://dev59.com/v3RB5IYBdhLWcg3wiHpl#37585092和http://stackoverflow.com/q/37585385/1122270,了解我的意思。 - cnst

1
略微元回答。如果你被迫使用git“游击战风格”,即你的公司被困在cvs版本控制上,而你在工作站上使用git使生活更轻松,你可以考虑做这样的事情;
CVS=realCvsPath
# commit to the git first
if ($ARGV[0] && $ARGV[0] eq "commit")
{
system 'git commit -a';
}

# execute the appropriate cvs program
# ===================================
exec "$CVS", @ARGV

将此文件命名为“cvs”,并在真正的CVS命令之前包含它的路径。否则,您可能会有比cvs更旧的git提交,这并不是很有用...

1
如果上游代码库完全在CVS中(例如OpenBSD,或其许多子项目,如mdocmlports-readmes),特别是像OpenBSD CVS树一样生疏(例如,偶尔甚至有历史重写),那么我认为直接将底层的CVS/{Entries,Repository,Root}文件提交到我的git仓库中非常有用。

这使得不必拥有多个独立的工作区变得非常容易,在任何机器上使用git进行检出,然后在原地执行cvs upcvs diff以生成正确的CVS补丁,以便邮寄给没有git的上游维护者。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接