引言:所谓版本控制,就是将多次操作的结果以日志的方式存储下来,便于之后进行恢复。版本控制并不是一个简单的软件而是一套系统,版本控制系统针对文件的变动进行监控,记录其数据变动信息。其可以恢复目标文件到之前的任意版本,并可比较两个版本之间的差异。其支持多个用户同时编辑同一个文件,能够记录哪个用户什么时间修改该文件,为什么修改该文件。对于系统管理员来说,其对于脚本,文档,配置文件等数据进行的修改,都可以保存在版本控制体系中。
在Linux中提供了Subversion和CVS 两款版本控制系统,两者在功能上没有大的区别,但是前者比较新而且发展趋势较好,因此推荐使用Subversion。
对于Subversion来说,其存储理念是将文件存储在集中式的仓库中,该仓库可以位于本地磁盘,也可以在远程主机上,通过SSH或者WebDav进行访问。
每个用户在仓库中都有自己的工作目录,用户想使用版本控制体系中的项目文件,必须有自己的工作目录。
当用户登录后,在用户的Home目录或工作目录中,会针对版本控制软件会生成一个名为“.svn”的隐藏目录,在其中存放版本控制软件的元数据以及属于用户的文件。
注意:不要使用手动的方法,来更改该隐藏目录中的任何数据。
如果在某台Linux用户本机上配置了版本控制体系,并保存了所有的文档,由于该机同时保持着仓库和用户,因此用户想使用仓库中的数据,必须先将其下载后才可以对其进行编辑,当执行提交修改的时刻,才上传到仓库中。
因为有别的用户在该机上登录,所以无法直接对仓库中的文件进行编辑,仓库是加密的库,用户无法看到的。
访问仓库的方式有多种,对于存储在本地的仓库来说,其格式为“file:///repo/path”。对于存在于远程主机上的仓库来说,其格式为“svn+ssh://hostname/repo/path”,这是对于SSH方式而言的。
对 于WebDav方 式来说,其格式为“http://hostname/repo/path”。只要执行过一次和版本控制相关的指令,就会生成上述“.svn”目录,其中记录这一系列的元数据,包含了服务器的地址和下载的项目名称等内容。这里以RHEL 6.0为例进行说明。
当建立一个空的仓库时,必须以Root用户执行“svnadmin create /path”命令来实现。如果允许远程用户使用SSH方式进行访问,需要配置sshd服务,创建所需的账户。
如果使用Web方式进行访问,需要配置Web服务器(例如Apache等),并安装“Mod_Dav_Svn”模块,同时配置所需的虚拟账户。
在实际的工作中,为了便于管理,可以先创建一个目 录(例 如“AllProject”)用来存放所有的项目,在该总目录下创建一个子目 录(例 如“dept”), 使用“svnadmin create /allproject/dept”命令,对其进行初始化,创建一个新的项目。
当然,该目录也可以有该命令自动创建。执行“ll/allproject/dept”命 令,可以看到其中生成的所有数据,其中的“db”目录用来存放该项目中的所有文件。
为了便于开发人员使用该项目数据,需要进行必要的权限设定。执行“groupadd dept”命令,创建名为“dept”的组。
执 行“useradd user1-G dept”,“useradd user2-G dept”, 将“user1” 和“user2”用户添加到该组中。
执行“chgrp -Rdept /allproject/dept/db”命令,将“/allproject/dept/db”的属组设定“dept”用户组,即该组拥有对该项目的权限。
执行“chmod -Rg+w /allproject/dept/db”命令,该组成员拥有对该目录的写权限。这样,之后只要将用户加入到该组中,就可以对该项目进行开发。
对于老版本的Linux来说,可能还需要执行“chmod 2770 /allproject/dept/db”命令,确保该目录中所有新建的文件以及子目录的权限与父目录的属组一致。
执 行“yumlist subversion”命令,可以查看subversion包的安装信息。
对于开发者来说,需要将对应的项目文件导入进来。 执 行“echo 'export EDITOR=VIM' >>~/.bash_profile” 和“. ~/.bash_profile”命令,为其指定编辑器,将其放置到启动文件中,并让其立即生效。
执行“set|grep EDI”命令,可以看到编辑器设置成功。
例如项目文件位于“/var/pub/peizhi” 目 录中,先进入该目录,执行“svn import file:///allproject/dept”命令,在打开的编辑器中输入合适的内容后,保存后将其中的文件上传到上述仓库中的项目目录中。
注意:其默认只上传文本文件,而不是上传二进制文件。
以 上 述“dept” 组 中的“user1”账户身份登录系统,执行“svn checkout file:///allproject/dept/”命令,将上述“dept”项目下载到本地。之后进入下载得到的“dept”目录,可以查看其中的文件,执行各种编辑操作。
当完成对应的修改操作后,假设了修改了名为“filename”的文件,在“dept”目录中执 行“svn commit filename”命令,输入关于该文件的修改说明信息后,执行提交操作上传到仓库中。
如 果 只 执 行“svn commit”命令,可以自动搜索提交所有变动的文件。
当然,对于该组中的其他用户来说,也可以执行同样的操作。别的用户要想及时了解项目中相关文件的变动情况,可以执行“svn update”命令来获取更新信息。
执行“svn add filexxx”命令,可以向项目中追加名为“filexxx”的文件,之后再执行提交操作。该文件必须位于注入“dept”项目文件夹,而不能随意将任何路径中的文件追加上去。中执行“svn delete filexxx”命令,可以从项目中删除文件。
注意:这只是标记为删除,之后必须执行提交操作方可。
执行“svn info”命令,可以检查项目的状态信息,例如访问地址,仓库根目录,仓库ID等。
执行“svn info -R”命令,可以查看其中每个文件的版本以及其详细信息。执行“svn status -vu”命令,也可以查看与之类似的状态信息。
当项目组中的某个用户希望查看某文件的版本信息时,可以执行“svn log flname”命令,可以查看名为“finame”的文件的所有版本变动信息.
其所有的修改记录全部被显示出来,包括具体的版本号(例如r1,r2等)、修改者账户名、修改时间、修改的行数以及说明信息等。
如果想查看其与指定版本号存在哪些区别,可以执行“svn diff –r3 flname”命令,可以查看“flname”文件当前版本和“r3”版本之间的区别,包括在哪些行数据发生了变化等。
当在本地对项目中的某文件进行了修改并存盘后,如果发现存在错误话的,利用版本控制机制可以将其迅速恢复到修改之前的状态。
执 行“svn revert flname”命令,就可以放弃对“flname”文件的所有修改,放弃存盘恢复到修改之前的状态。
当然,这必须在执行提交操作之前进行。如果执行了提交更新操作,则可以恢复到指定的版本。
执 行“svn cat -r 1 flname > flname”命令,可以将“flname”文件恢复到“r1”版本状态。
如果想基于Web方式访问仓库,可以先在目标主机上安装和配置好Apache服务。在该机上建立名为“Newgc”的目录,其中包含“devep”文件夹。
执行“svnadmin create/newgc/devep”命令,对其进行初始化,创建一个新的项目。
执 行“chown-R apache.apache /newgc/devep/db”命令,允许访问Apache的用户拥有针对该项目的是使用权限。
执 行“mkdir /newgc/devep/dav”,创 建“dav”目录,便于Apache在其中存储数据。
执 行“chown-R apache.apache /newgc/devep”命令,针对该“dav”目录设置公开的访问权限。
执 行“yum install mod_dav_svn.x86_64”命令,安装“mod_dav_svn”模块。
执 行“/etc/init.d/httpd restart”命令,重启Apache进程。
执行“vim /etc/httpd/conf.d/subversion.conf”命 令,打 开“subversion.conf”配置文件,在其中可以看到一些示例说明信息,这里只是简单举例,添加“