设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 数据 手机 公司
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

Git前时代:使用CVS进行版本控制(3)

发布时间:2018-12-07 20:44 所属栏目:117 来源:Two-bit History
导读:CVS 识别出我们我在文件中添加了一个包含颜色 cyan 的新行。(实际上,它说我们已经对 RCS 文件进行了更改;你可以看到,CVS 底层使用的还是 RCS。) 此差异指的是当前工作目录中的 favorites.txt 副本与存储库中 1

CVS 识别出我们我在文件中添加了一个包含颜色 “cyan” 的新行。(实际上,它说我们已经对 “RCS” 文件进行了更改;你可以看到,CVS 底层使用的还是 RCS。) 此差异指的是当前工作目录中的 favorites.txt 副本与存储库中 1.1.1.1 版本的文件之间的差异。

为了更新存储库中的版本,我们必须提交更改。Git 中,这个操作要好几个步骤。首先,暂存此修改,使其在索引中出现,然后提交此修改,最后,为了使此修改让其他人可见,我们必须把此提交推送到源存储库中。

而 CVS 中,只需要运行 cvs commit 命令就搞定一切。CVS 会汇集它所找到的变化,然后把它们放到存储库中:

  1. $ cvs commit -m "Add cyan to favorites."
  2. cvs commit: Examining .
  3. /Users/sinclairtarget/sandbox/colors/favorites.txt,v <-- favorites.txt
  4. new revision: 1.2; previous revision: 1.1

我已经习惯了 Git,所以这种操作会让我感到十分恐惧。因为没有变更暂存区的机制,工作目录下任何你动过的东西都会一股脑给提交到公共存储库中。你有过因为不爽,私下里重写了某个同事不佳的函数实现,但仅仅只是自我宣泄一下并不想让他知道的时候吗?如果不小心提交上去了,就太糟糕了,他会认为你是个混蛋。在推送它们之前,你也不能对提交进行编辑,因为提交就是推送。还是你愿意花费 40 分钟的时间来反复运行 git rebase -i 命令,以使得本地提交历史记录跟数学证明一样清晰严谨?很遗憾,CVS 里不支持,结果就是,大家都会看到你没有先写测试用例。

不过,到现在我终于理解了为什么那么多人都觉得 Git 没必要搞那么复杂。对那些早已经习惯直接 cvs commit 的人来说,进行暂存变更和推送变更操作确实是毫无意义的差事。

人们常谈论 Git 是一个 “分布式” 系统,其中分布式与非分布式的主要区别为:在 CVS 中,无法进行本地提交。提交操作就是向中央存储库提交代码,所以没有网络连接,就无法执行操作,你本地的那些只是你的工作目录而已;在 Git 中,会有一个完完全全的本地存储库,所以即使断网了也可以无间断执行提交操作。你还可以编辑那些提交、回退、分支,并选择你所要的东西,没有任何人会知道他们必须知道的之外的东西。

因为提交是个大事,所以 CVS 用户很少做提交。提交会包含很多的内容修改,就像如今我们能在一个含有十次提交的拉取请求中看到的一样多。特别是在提交触发了 CI 构建和自动测试程序时如此。

现在我们运行 cvs status,会看到产生了文件的新版本:

  1. $ cvs status
  2. cvs status: Examining .
  3. ===================================================================
  4. File: favorites.txt Status: Up-to-date
  5.  
  6. Working revision: 1.2 2018-07-06 21:18:59 -0400
  7. Repository revision: 1.2 /Users/sinclairtarget/sandbox/colors/favorites.txt,v
  8. Commit Identifier: pQx5ooyNk90wW8JA
  9. Sticky Tag: (none)
  10. Sticky Date: (none)
  11. Sticky Options: (none)

合并

如上所述,在 CVS 中,你可以同时编辑其他人正在编辑的文件。这是 CVS 对 RCS 的重大改进。当需要将更改的部分重新组合在一起时会发生什么?

假设你邀请了一些朋友来将他们喜欢的颜色添加到你的列表中。在他们添加的时候,你确定了不再喜欢绿色,然后把它从列表中删除。

当你提交更新的时候,会发现 CVS 报出了个问题:

  1. $ cvs commit -m "Remove green"
  2. cvs commit: Examining .
  3. cvs commit: Up-to-date check failed for `favorites.txt'
  4. cvs [commit aborted]: correct above errors first!

这看起来像是朋友们首先提交了他们的变化。所以你的 favorites.txt 文件版本没有更新到存储库中的最新版本。此时运行 cvs status 就可以看到,本地的 favorites.txt 文件副本有一些本地变更且是 1.2 版本的,而存储库上的版本号是 1.3,如下示:

  1. $ cvs status
  2. cvs status: Examining .
  3. ===================================================================
  4. File: favorites.txt Status: Needs Merge
  5.  
  6. Working revision: 1.2 2018-07-07 10:42:43 -0400
  7. Repository revision: 1.3 /Users/sinclairtarget/sandbox/colors/favorites.txt,v
  8. Commit Identifier: 2oZ6n0G13bDaldJA
  9. Sticky Tag: (none)
  10. Sticky Date: (none)
  11. Sticky Options: (none)

你可以运行 cvs diff 来了解 1.2 版本与 1.3 版本的确切差异:

  1. $ cvs diff -r HEAD favorites.txt
  2. Index: favorites.txt
  3. ===================================================================
  4. RCS file: /Users/sinclairtarget/sandbox/colors/favorites.txt,v
  5. retrieving revision 1.3
  6. diff -r1.3 favorites.txt
  7. 3d2
  8. < green
  9. 7,10d5
  10. <
  11. < pink
  12. < hot pink
  13. < bubblegum pink

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读