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自动生成的文件。


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

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


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


修改代码和提交。再改动了文件之后,我们需要让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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gongqingkui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值