天天看点

Subversion的导入、修改与提交

为了控制多个用户对同一个文件的修改,引入了加锁策略。在严格锁(strict locking)的情况下,文件一旦被某用户签出,那么他就标记为只读,其它用户只能等待这个用户,相当于他独占了这个文件。在乐观加锁(optimistic locking)情况下,用户都可以修改同一个文件,只不过在提交的时候需要更新本地文件,一旦和自己签出的版本和系统最新版有何差别,就需要进行合并系统最新的更新,如果这个修改的不在同一行上,那就直接合并。如果修改的是同一行代码,那么需要手工解决冲突。一般情况下乐观锁是比较常用的,因为在开发中各个开发者都被分割在不同的区域中,冲突的概率并不大。而如果采用严格锁,可能导致等待时间的加剧。

下面以命令行为例,说明subversion的使用过程。(在Eclipse下使用svn请参考文献1)

确认Subversion安装成功与否,可以使用命令svn–version来检查客户端的版本号,用svnadmin –version检查管理工具的版本号。

一般项目仓库就是一个目录,新建一个目录mkdir c:\svn-repos,此时目录里是空的,再使用svn管理工具创建一个仓库svnadmin  create c:\svn-repos此时仓库里有了svn自动生成的文件。

Subversion的导入、修改与提交

创建一个项目,在自己的工作录如C:\work下,建立一个项目如weatherReport项目,这是一个虚拟的气象报告系统。我们在其中放置了两个文件Z.txt和A.txt。

现在,我们要把这个项目的初始版本上传到SVN的服务器上,切换到工作目录的项目下,使用如下命令,将文件拷贝到服务器中。参数import表示导入,-m表示需要注释内容。.表示当前目录内容,最后的地址表示URL参数。

Subversion的导入、修改与提交

现在项目代码已经进入了svn的仓库中,我们可以把当前工作目录的代码删除了,但是为了保险起见,我们还是先签出代码看下。首先在工作目录建立起工作拷贝的空间c:\work\weatherReportGong,切换到work目录下,使用命令svncofile:///c:/svn-repos/weatherReport/trunkweatherReportGong 将代码签出。查看weatherReportGong中代码和源代码一致后,删除原来的weatherReport,以后存取代码都交给svn管理了。

Subversion的导入、修改与提交

修改代码和提交。再改动了文件之后,我们需要让svn看下确认下状态。例如我们修改了Z文件,之后使用命令svn status Z.txt来检查Z文件状态,svn返回结果说Z文件已经修改了。使用命令svn diff z.txt来比较两个文件的不同。使用svn status和svn diff不带参数可以查看整个系统的更改情况。

Index: Z.txt
===================================================================
--- Z.txt   (版本 2)
+++ Z.txt         (工作副本)
@@ -1,2 +1,3 @@
 this is Z file.
 yes this is Z file.
+ok
           

更新当前文件,将当前修改更新到数据库中,使用svn commit –m ”message”即可。更新完成后可以使用svn log或者svn logz.txt来查看整个版本或者单个文件的修改历史。使用参数—verbose可以查看所有具体改动。需要注意的是svn将所有一次的改动集中到一快进行说明。

------------------------------------------------------------------------
r2 | hrc | 2011-10-04 17:08:03 +0800 (星期二, 2011-10-04) | 1 行
改变的路径:
   M/weatherReport/trunk/A.txt
   M /weatherReport/trunk/Z.txt
 
new line
------------------------------------------------------------------------
r1 | hrc | 2011-10-04 16:32:29 +0800 (星期二, 2011-10-04) | 1 行
改变的路径:
   A /weatherReport
   A /weatherReport/trunk
   A/weatherReport/trunk/A.txt
   A /weatherReport/trunk/Z.txt
 
import weatherreport
------------------------------------------------------------------------
           

不同用户修改同一个文件时,提交的时候需要注意使用svn diff –rHEAD a.txt来确认当前版本和项目库中最新版本的差异。如果存在差异,使用svn update来合并差异。如果有了冲突,需要修改,在提交失败后,需要update,update发现有冲突时,我们需要查看代码的修改记录svn log –r6 a.txt 其中r6是版本号的名称。确定其它程序员的修改意图后,再根据交流修改自己的程序,移除svn标记的<<<<<<<<<<>>>>>>>>>>>>符号后提交svnresolved a.txt。需要注意的是,差异发生在同一个文件的不同行代码部分,而冲突发生在同一个文件的同一行。这两种情况都有可能导致程序程序不可用,所以在提交请我们要确保程序已经通过了单元测试。

参考文献

1.Eclipse下的版本控制工具svn