GIT和CVS之间的区别

GIT和CVS之间的区别,git,version-control,cvs,Git,Version Control,Cvs,Git和CVS版本控制系统之间的区别是什么 我已经愉快地使用CVS超过10年了,现在有人告诉我Git要好得多。有人能解释一下两者之间的区别吗?为什么一个比另一个好?这可能是最好的解释 我的宠物功能是能够在脱机时进行提交。还有速度,除了推拉以外的一切都在以极快的速度发生。(这些操作是非破坏性的,因此,如果你的中央回购滞后,你可以在去喝咖啡时推拉。)另一件好事是,它附带了电池:内置的gitk是一个足够好的历史查看器gitgui是一个足够好的提交工具;对于输出着色,git add-i,git add-

Git和CVS版本控制系统之间的区别是什么

我已经愉快地使用CVS超过10年了,现在有人告诉我Git要好得多。有人能解释一下两者之间的区别吗?为什么一个比另一个好?

这可能是最好的解释


我的宠物功能是能够在脱机时进行提交。还有速度,除了推拉以外的一切都在以极快的速度发生。(这些操作是非破坏性的,因此,如果你的中央回购滞后,你可以在去喝咖啡时推拉。)另一件好事是,它附带了电池:内置的gitk是一个足够好的历史查看器
gitgui
是一个足够好的提交工具;对于输出着色,
git add-i
git add-p
git rebase-i
是足够好的交互界面<如果您不想/不能摆弄您的中央回购,那么code>git守护程序和git instaweb对于临时协作来说已经足够好了。

git是一个,而CVS是一个集中的。简单的描述是:当您没有连接到多个可能的存储库时,您可以获得版本控制的所有好处,而且操作速度更快。

主要区别在于(正如在其他响应中已经说过的那样)CVS是(旧的)集中式版本控制系统,而Git是分布式的

但是,即使您在单台计算机(单帐户)上为单个开发人员使用版本控制,Git和CVS之间也有一些区别:

  • 设置存储库。Git将存储库存储在项目顶部目录的
    .Git
    目录中;CVS需要设置CVSROOT,它是存储不同项目(模块)的版本控制信息的中心位置。这种针对用户的设计的结果是,将现有源代码导入到版本控制中就像git中的“git init&&git add.&git commit”一样简单,而在CVS中则是如此

  • 原子操作。因为CVS在开始时是围绕每个文件RCS版本控制系统的一组脚本,所以提交(和其他操作)在CVS中不是原子的;如果存储库中的操作在中间被中断,则存储库可以处于不一致的状态。在Git中,所有操作都是原子的:要么整体成功,要么在没有任何更改的情况下失败

  • 变更集。CVS中的更改是每个文件的,而Git中的更改(提交)总是指整个项目。这是非常重要的范式转变。这样做的后果之一是,在Git中很容易恢复(创建一个撤销的更改)或撤销整个更改;另一个结果是,在CVS中很容易进行部分签出,而在Git中这几乎是不可能的。更改是按文件分组的,这一事实导致了CVS中提交消息的GNU更改日志格式的发明;Git用户使用(和一些Git工具期望的)不同的约定,单行描述(总结)更改,然后是空行,然后是更详细的更改描述

  • 命名修订/版本号。还有一个问题与CVS中的更改是针对每个文件的这一事实有关:1.4之类的版本号(正如您有时在关键字扩展中看到的,请参见下文)反映了给定文件已更改的时间。在Git中,作为一个整体的项目的每个版本(每个提交)都有其由SHA-1ID给出的唯一名称;通常,前7-8个字符足以标识提交(在分布式版本控制系统中,不能对版本使用简单的编号方案,这需要中央编号机构)。在CVS中,要使用版本号或符号名来表示整个项目的状态,请使用标记;如果您想为某个版本的项目使用类似“v1.5.6-rc2”的名称,Git中也是如此。。。但是Git中的标记更容易使用

  • 容易分支。在我看来,CVS中的分支过于复杂,难以处理。您必须标记分支才能为整个存储库分支命名(如果我没记错的话,在某些情况下,由于每个文件的处理,甚至可能会失败)。此外,CVS没有合并跟踪,因此您必须记住或手动标记合并和分支点,并手动为“CVS update-j”提供正确的信息以合并分支,这使得分支变得不必要且难以使用。在Git中,创建和合并分支非常容易;Git自己记住所有需要的信息(所以合并分支就像“Git merge branchname”一样简单)。。。必须这样做,因为分布式开发自然会导致多个分支

    这意味着您可以使用主题分支,即在单独的功能分支中的多个步骤中开发单独的功能

  • 重命名(并复制)跟踪。CVS中不支持文件重命名,手动重命名可能会将历史记录一分为二,或者导致无效的历史记录,您无法在重命名之前正确恢复项目的状态。Git使用基于内容和文件名相似性的启发式重命名检测(该解决方案在实践中效果良好)。您还可以请求检测文件的复制。这意味着:

    • 当检查指定的提交时,您将获得某些文件已重命名的信息
    • 正确合并时会考虑重命名(例如,如果文件仅在一个分支中重命名)
    • “git null”(更好)相当于“cvs annotate”(一种显示文件内容的行历史记录的工具),可以跟踪代码在重命名过程中的移动
  • 二进制文件。CVS对二进制文件(如图像)的支持非常有限,要求用户在添加二进制文件(或更高版本的usin)时明确标记二进制文件