Linux C语言编程源代码控制(一)

Linux C语言编程源代码控制

如果做的不是一个简单地项目,特别是项目的开发人员不止一个时,为避免文件修改的冲突并跟踪对源文件所作出的修改,对源文件改动方面的管理就变得非常重要。
在Linux系统中,有几个被广泛使用的用于管理源文件的系统:

  • SCCS:源代码控制系统
  • RCS:版本控制系统
  • CVS:并发版本控制系统
  • Subverion
    其中,RCS已经替代SCCS,SCCS是由AT&T在系统V版本的UNIX中引入的最初的源代码控制系统,现在它已是X/Open标准的一部分了。RCS是在这之后开发的,它作为SCCS的一个免费替换系统,由自由软件基金会发布。RCS的功能与SCCS非常类似,但它有着更直观的接口和一些其他的选项,所以SCCS基本上已被RCS所取代。

RCS工具是Linux发行版中的一个常见套件,你也可以从自由软件基金会的网址http://directory.fsf.org/rcs.html上下载它及其源代码。

CVS是一个比SCCS和RCS更高级的工具,它用于基于互联网的协同开发。你可以在大多数Linux发行版中找到它,你也可以通过网址http://www.nongnu.org/cvs/下载它。与RCS相比,它有两个显著的优势:可以通过网络使用,并且允许并发开发。Subversion是一个新开发的工具,它旨在最终替换CVS。它的主页是http://www.subversion.org。

我们将重点介绍RCS和CVS。RCS对个人的开发项目来说易于使用,并且它与make整合得很好。CVS是用于合作项目的最常见的源代码控制形式。
RCS
版本控制系统(RCS)提供了许多用于管理源文件的命令。它能够跟踪并记录下源文件的每一次改动,并将这些改动都记录在一个文件中,该文件中记录的改动信息足够详细,你可以通过这些信息重建出任何一个以前的版本。它还允许你为每次改动保存一个与之对应的注释信息,这对了解文件改动的历史非常有用。

随着项目的进展,你可以将每次对源文件进行的大的改动或漏洞的修补分别进行记录,并针对每次改动保存注释。当需要回顾对文件曾经做过的改动、检查何时修补过漏洞或何时引入漏洞时,这就非常有用。

因为RCS只保存版本之间的不同之处,所以它非常节省存储空间。万一不小心误删了文件,RCS还可以帮助你找回以前的版本。

1.rcs命令
用下面的例程进行说明。

/*rcs.c*/
/*This is a important file for managing this project.
It implements the canonical "Hello World" programme.*/
#include
int main()
{
        printf("Hello World!\n");
        return 0;
}

第一个任务是用rcs命令来初始化该文件的RCS控制。命令rcs -i的作用是初始化RCS控制文件。
执行结果如下:
Linux C语言编程源代码控制(一)_第1张图片
你可以使用多行注释,结束输入需要在一行中单独使用一个英文句号(.)或输入文件结束字符(通常是组合键Ctrl+D)。

执行完这条命令后,rcs将创建一个新的只读文件,该文件的后缀带有,v,如上图所示。
如果希望能把RCS文件保存到另一个目录中,你只需在第一次使用rcs命令之前建立一个名为RCS的子目录,这样所有的rcs命令都会自动地把RCS文件保存到该子目录中。

2.ci命令
现在可以使用ci命令将源文件的当前版本“签入”(check in)到RCS中了:
Linux C语言编程源代码控制(一)_第2张图片
如果先前忘记执行rcs -i命令了,在执行ci命令时,RCS会要求输入一段对该文件的描述。如果现在查看目录中的内容,你将会发现文件rcs.c已被删除.文件内容及其控制信息都已经被保存到RCS文件important.c, v中了。

3.co命令
如果想修改文件,你必须首先“签出”(check out)该文件。如果只是想阅读该文件,你可以用co命令重建当前版本的该文件并将它的权限改为只读。如果想对其进行修改,你就必须用命令co -l锁定该文件,因为在一个项目组中,必须确保任一时刻只有一个人可以修改指定的文件,这也是指定版本的文件只能有一份副本拥有写权限的原因。当文件以可写方式被“签出”时,对应的RCS文件将被锁定。
Linux C语言编程源代码控制(一)_第3张图片查看目录,现在有了可以进行编辑的文件,你对其进行修改,把新版本存盘,然后再次用ci命令保存改动。示例如下:

/*rcs.c*/
/*This is a important file for managing this project.
It implements the canonical "Hello World" programme.*/
#include
int main()
{
        printf("Hello World!\n");
         printf("This an extra line added later.\n");
        return 0;
}

Linux C语言编程源代码控制(一)_第4张图片

如果想在“签入”该文件时仍然保留文件的锁定状态,使得可以继续对该文件进行修改,你就需要在调用ci命令时加上-l选项。这样,在“签入”该文件的同时它会被自动“签出”来供同一用户使用。

现在,你已保存了该文件的修订版本。如果查看目录内容,你就会发现文件important.c再次被删除了:
在这里插入图片描述
4.rlog命令
查看一个文件的改动摘要通常是很有用的。你可以用rlog命令来完成这一功能:

Linux C语言编程源代码控制(一)_第5张图片
输出结果中的第一部分给出了对该文件的描述以及rcs使用的选项。接着,rlog命令列出对该文件的修改情况和你“签入”该文件时输入的注释内容,最近的修改列在最前面。版本1.2中的line:+1-0表明在这一修订版本中增加了一行,未删除行。

注意,文件修改时间在存储时不会进行夏令时调整,这是为了避免在改变时钟时可能会带来的问题。

如果现在想取出该文件的第一个版本,你可以在调用co命令时指定需要的版本号,如下所示:
Linux C语言编程源代码控制(一)_第6张图片
ci命令也有一个-r选项,它的作用是强制指定主版本号,例如命令ci -r2 important.c将把文件important.c“签入”为版本2.1。RCS和SCCS默认都用数字1作为第一个次版本号。

5.rcsdiff命令
如果只是想了解两个版本之间的区别,可以使用rcsdiff:
Linux C语言编程源代码控制(一)_第7张图片
上面的输出结果表明在原文件的第8行后插入了一行。

6.标识版本
RCS系统可以在源文件中使用一些特殊的字符串(宏)来帮助跟踪文件所做的改动。最常用的两个宏是 R C S f i l e RCSfile RCSfile I d Id Id。宏 R C S f i l e RCSfile RCSfile将扩展为该文件的名字,而宏 I d Id Id将扩展为一个标识版本号的字符串。RCS系统支持的特殊字符串的完整列表请查看在线帮助手册。这些宏将在文件被“签出”时扩展,并且在文件被“签入”时自动更新。
下面我们对rcs.c进行第三次修改,增加一些宏。
在这里插入图片描述
修改后的内容如下:

Linux C语言编程源代码控制(一)_第8张图片
现在“签入”该版本,看看rcs是如何管理这些特殊字符的:
Linux C语言编程源代码控制(一)_第9张图片
查看目录,只有RCS文件存在。
如果“签出”改文件并检查该源文件的当前版本,宏已经被扩展。
Linux C语言编程源代码控制(一)_第10张图片
这就是rcs版本控制系统的全部内容,下一节将会结合make进行实验。

你可能感兴趣的:(openEuler,linux,c语言)