版本管理三国志 (CVS, Subversion, git)

简介: 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!   最近有一则和git有关的新闻很火: 12306的抢票插件拖垮了GitHub (GitHub基于git) git是一款版本控制软件(VCS,Version Control System)。

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

 

最近有一则和git有关的新闻很火:

12306的抢票插件拖垮了GitHub (GitHub基于git)

git是一款版本控制软件(VCS,Version Control System)。VCS通常用于管理开发过程中的源代码文件。VCS是软件开发的好帮手。当软件本身在发布时获取大量关注时,VCS躲在幕后默默管理和记录软件的开发和发布进程。git颇有戏剧性的借春运抢票火了一把,也让许多人好奇什么是git,什么是VCS。我复习了一下VCS的历史,忽然有些读三国时的你方唱罢我登场的感觉,就想写一个VCS版本的三国志。

现在最常见的VCS软件(同时也是开源的VCS软件)有CVS, Subversion和git。CVS曾经雄霸一时,至今还管理着大量的开发项目。Subversion青出于蓝,对CVS进行改进,大有取而代之的势头。git另辟蹊径,依仗Linux的名号,并借GitHub的推广攻城略地。VCS领域激烈的争斗正反映了软件开发项目的红火势头。

 

斩白蛇而起

早期(1970年到1980年代)的软件开发大部分是愉快的个人创作。比如UNIX下的sed是L. E. McMahon写的,Python的第一个编译器是Guido写的,Linux最初的内核是Linus写的 (好吧,awk是个例外,它的名字是三位作者的首字母,但也只是三个人)。这些程序员可以用手工的方式进行备份,并以注释或者新建文本文件来记录变动。

正如现在普通用户常做的,当时的程序员常用cp备份:

$cp dev.c dev.bak

更有条理一些的程序员会加上一个时间标记,比如:

$cp dev.c dev.bak.19890908

程序员很可能会用vi创建一个LOG文件来做日志:

1989-09-08 02:00:00
Old input method is stupid
Add command-line input function

在一个版本发布的时候,程序员可能做一个tar归档,将所有的文件归为同一个.tar文件。

$tar -cf project_v1.0.tar project

上面的工具构成了一套人工VCS。上面的这套组合也非常符合UNIX的模块化理念:让每个应用专注于一个小的功能,使用者根据需要,将这些功能连接起来。你还可以写一个shell脚本,将上面的功能都写在里面。当需要的时候,调用该脚本就可以了。

(这样一个shell脚本并不复杂,而且挺有用的,可以作为学习shell编程的小练习)

 

再说一下早期的合作开发模式。如在Python简史中看到的,Guido通过电子邮件接收补丁(patch),并将补丁应用到原来的代码文件。实际上,一个补丁(patch)的主要功能是描述两个文件的改变(change, or file delta)。 假设我们有两个文件a.c和b.c内容分别为:
a.c (有bug的代码)

int sum(int a, int b)
{
  int c;
  c = a + 1;
  return c;
} 

b.c (修正后的代码)

int sum(int a, int b)
{
  int c;
  c = a + b;
  return c;
}

 

在UNIX系统下,运行

$diff a b > iss01.patch

iss01.patch就是一个补丁文件,它看起来如下

目录
相关文章
|
4月前
|
网络安全 开发工具 git
版本管理 git 常用命令
版本管理 git 常用命令
43 1
|
11月前
|
Cloud Native Go 开发工具
开源项目的版本管理:Git的最佳实践
开源项目的版本管理:Git的最佳实践
179 0
|
安全 程序员 开发工具
代码版本管理笔记 | Python 程序员也应该会的 Git 分支操作
代码版本管理笔记 | Python 程序员也应该会的 Git 分支操作
172 0
|
数据采集 安全 JavaScript
代码版本管理笔记 | Python 程序员也应该会的 Git 进阶操作
代码版本管理笔记 | Python 程序员也应该会的 Git 进阶操作
155 0
|
数据采集 缓存 安全
代码版本管理笔记 | Python 程序员也应该会的 Git 基础操作
代码版本管理笔记 | Python 程序员也应该会的 Git 基础操作
|
网络安全 开发工具 数据安全/隐私保护
版本管理·玩转git(远程仓库配置和配置公钥免密登录)
版本管理·玩转git(远程仓库配置和配置公钥免密登录)
185 0
版本管理·玩转git(远程仓库配置和配置公钥免密登录)
|
开发工具 git
版本管理·玩转git(分支管理)
版本管理·玩转git(分支管理)
128 0
版本管理·玩转git(分支管理)
|
程序员 开发工具 数据安全/隐私保护
版本管理·玩转git(团队合作)
版本管理·玩转git(团队合作)
74 0
版本管理·玩转git(团队合作)
|
开发工具 git 开发者
版本管理·玩转git(推到远程仓库)
版本管理·玩转git(推到远程仓库)
94 0
版本管理·玩转git(推到远程仓库)
|
存储 监控 JavaScript
版本管理·玩转git(快速入门git)
版本管理·玩转git(快速入门git)
120 0
版本管理·玩转git(快速入门git)