关于不同的代码版本控制工具
本文主要介绍最流行的版本工具git,并且比较它与之前一些版本管理工具(cvs,svn)的差异
RCS
这个是远古版本,核心思想就是,我在修改这个文件,其他人就能看到,这个文件有人在修改,就先不要动这个文件。这属于比较远古的,显然如果只能一个人一个人的来操作,那肯定是效率很低的。所以,想法是大家一起修改出不同版本再提交,然后比较差异,这就是cvs的核心。
CVS
CVS是一个C/S系统,是一个常用的 代码版本控制软件。主要在开源软件管理中使用。与它相类似的代码版本控制软件有subversion。多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。CVS版本控制系统是一种GNU软件包,主要用于在多人开发环境下的源码的维护。但是由于之前CVS编码的问题,大多数软件开发公司都使用SVN替代了CVS。
其中
-
GNU是一种和配合linux食用的,准确的说GNU所用的典型内核是Linux。该组合叫做GNU/Linux操作系统。GNU/Linux为几百万用户所使用,然而许多人错误地称之为“Linux”。一般的系统都带有内核和在内核基础上搭建的基本系统,例如:文件管理系统
-
cvs已经可以进行代码提交,代码拉取到本地、创建分支以及代码的管理,但是有很多的弊端。
-
缺点:
-
串行的提交,一旦中断会有部分入库,而导致提交不完整的问题。
-
不能支持移动,割裂的认知为删除文件,重新上传文件,不支持重命名,也就不会有文件完整的发展历史
-
只关注每个文件,不关注文件目录,日志的版本号随着文件变化
-
处理二进制文件的效果不好
-
判断文件差异再传输是有问题的
-
防火墙问题
-
分支的冲突表示
-
SVN(subversion)
Subversion是一个自由/开源版本控制系统,它管理文件和目录可以超越时间。一组文件存放在中心版本库,这个版本库很像一个普通的文件服务器,只是它可以记录每一次文件和目录的修改,这便使你可以取得数据以前的版本,从而可以检查所作的更改。从这个方面看,许多人把版本控制系统当作一种“时间机器”。
Subversion可以通过网络访问它的版本库,从而使用户可以在不同的电脑上使用。一定程度上可以说,允许用户在各自的地方修改同一份数据是促进协作。由于所有的工作都有历史版本,你不必担心由于失去某个通道而影响质量,如果存在不正确的改变,只要取消改变。
SVN解决了CVS上文提到的缺点,但注意目前位置都需要一个中心服务器来存储中心版本!
但是 Subversion 亦不全然没有缺点, 它毕章还是一个刚开始发展的系统, 仍然存在一些不易使用的地方.
- 档案保留,我们无法取得 Subversion 档案的独占编辑权. 这是因为 Subversion 的工作模式, 是让各个工作的人取得工作复本, 各自编辑后, 再于送交时进行合并. 不过有的时候, 我们还是得要先取得档案的独占编辑权, 像是在编辑图形文件. 此时, 由一个人统一对某个档案进行编辑, 要比事后合并要简单地多了
- 合并点,当一个项目开始产生分支时, 常常我们得先将目前分支的更动合并至主发展线, 这些被合并的更动, 就称为合并点. Subversion 并不会记住分支已经采用了哪些合并点, 也就是说, 如果在合并更动之后, 在合并的地方又有了更动, 日后当分支发展完毕, 整个分支的更动需要合并至主发展线时, 由于系统不会记得已采用了哪些更动, 而已合并的地方又更动过, 就会造成同一个更动被合并两次, 此时后来的更动几乎可以肯定会造成档案的冲突, 必须由使用者进行排解. 如果系统能够记得合并点的话, 已采用的合并点就毋需再采用, 也就可以减少使用者必须手动进行冲突排解的次数.
- 档案版本在 Subversion 中, 版本号码是整个系统共享的. 这个意思就是说, 如果一个项目的档案因修改而有版号的更动, 那么所有档案的版号都会跟着更动. 这对由 CVS 移转过来的使用者是最难以接受的, 需要花一点时间习惯.但是, 在这种全域版号下, 我们无法很简单地回答这样的问题: 某个档案的第一个版本长什么样? 在目前最新版的前两个版本作了什么更动? 你知道, 有些时候, 我们就是需要像这样的功能.
GIT(重头戏)
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
Git 与 SVN 区别
Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。
如果你是一个具有使用 SVN 背景的人,你需要做一定的思想转换,来适应 Git 提供的一些概念和特征。
Git 与 SVN 区别点:
-
1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
-
2、Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
-
3、Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
-
4、Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
-
5、Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
在参考资料中可以看到git的安装和使用方法
参考资料:
https://blog.csdn.net/CSDN_document/article/details/390493?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
https://blog.csdn.net/ejzhang/article/details/5890926
https://www.runoob.com/git/git-tutorial.html
https://www.liaoxuefeng.com/wiki/896043488029600/896067008724000