`
victorwmh
  • 浏览: 208287 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

subversion实例及冲突与锁

阅读更多

项目开发示例

文件签出(拷贝)
# svn co file:///home/victorwmh/svn-repos/sesame/trunk sesame
参数co告诉subversion要执行签出操作,file://URL指定想要签出的项目仓库的位置,sesame告诉subversion要把工作拷贝签出到哪儿,本例中的sesame表示将工作拷贝签出到当前目录下的sesame目录中。

查看文件状态
# svn status Day.txt
输出结果中的M表示这个文件本地被修改过了,而且这些改动没有被存储到项目仓库中去。

查看修改情况
# svn diff Day.txt
输出结果中包含大量信息,如项目仓库文件的名字和版本号,被修改信息的具体位置等。

更新项目仓库
# svn commit -m "Cliend wants us to work on weekends"
commit的功能是存储所有改动到项目仓库中,-m选项用来给所做的改动附加有意义的注释。

# svn log Day.txt
查看文件修改历史的日志,包含项目仓库中的版本号。

# svn log --verbose Day.txt
增加--verbose选项,subversion输出更多信息,会告诉你每个版本中具体哪些被改动了。

# svn update
当提交修改后立马询问当前目录的日志时,subversion不会告诉你有什么改动,输出的日志为截止上次提交的内容。如果要看到最新的日志信息,得先运行svn update。
命令执行后,如果有更新会输出一个包含两段内容的列表,前面一个是状态组合符,后面一个为文件目录名。

状态符及含义如下:
A、项目仓库中有新文件,subversion为了更新工作拷贝,添加了一个文件到其中。
U、工作拷贝中的文件过期,因为有一个更新的版本签入到项目仓库中。subversion已经把工作拷贝中的文件更新为新的版本。
D、该文件已从项目仓库中删除了,subversion把它从工作拷贝中移除了。
G、工作拷贝中的文件过期,而且你本地还做了修改。subversion成功的把项目仓库中的版本和你本地的修改合并到了一起。
C、工作拷贝中的文件过期,而且你本地也做了修改。subversion尝试着合并项目仓库的改动和你本地的修改,但遇到了冲突。你需要把这个冲突解决了之后才能签入。

 

冲突


# svn status --show-updates
使用--show-updates(简写-u)让subversion从项目仓库中找出当前目录下的文件是否有更新。

# svn diff -r HEAD Number.txt
使用-rHEAD选项让subversion比较Number.txt的本地拷贝与项目仓库中最新版本间的差别,没有指定-r标识subversion会把本地拷贝的Number.txt与项目仓库的签出版本拿来进行比较。如果项目仓库中有人更新了Number.txt,你得到的svn diff Number.txt输出仍然为空。

冲突一:A、B同时修改相同文件的不同行
假如A先于B提交修改,那么执行如下:
A:
# svn commit -m "modify message"

B:
# svn update
# svn commit -m "modify message"
B提交修改前,需要执行svn update更新到仓库项目中的最新版本,不然冲突会导致提交失败。svn update命令会把本地的版本和项目仓库中的版本合并到一块。


冲突二:A、B同时修改相同文件的相同行
假如A先于B提交修改,那么执行如下:
A:
# svn commit -m "modify message"

B:
# svn update
相同的修改冲突,在执行svn update命令后,修改冲突的地方会有一对<<<<<<< .mine和>>>>>>> .r5的标记,5为相应的版本号。修改好冲突后,执行以下命令。
# svn resolved Number.txt
resolved命令告诉subversion冲突已解决,Number.txt为冲突文件。
# svn commit -m "modify message"

操作属性


# svn propset checked-by "Mike Mason" Number.txt

# svn propedit checked-by Number.txt
注:这个命令需要使用SVN_EDITOR环境变量,如果没有设置该环境变量的话,将报以下错误:"SVN:没有设置 SVN_EDITOR,VISUAL 或 EDITOR 环境变量,运行时的配置参数中也没有“editor-cmd”选项"。
解决方法:linux下在/etc/profile或~/.bash_profile中设置export SVN_EDITOR=vim,或者直接在命令行下输入# export SVN_EDITOR=vim命令。windows下直接在高级设置的环境变量中添加,变量名为SVN_EDITOR,值为notepad。
值得说明的是,这个环境变量和服务端的subversion没任何关系,只和你前使用的subversion相关。网上很多apache+subversion配置文档都有标注这点内容,这样很不好容易引起初学者思维混乱,其实是在客户端碰到这种报错,但一直在服务器折腾。

# svn proplist Number.txt

# svn propget checked-by Number.txt

# svn propdel

 

加锁、解锁和破坏锁
subversion锁机制主要是为解决一些不可合并文件的冲突而设置,如声音、图片以及更多格式的文档等。

设置文件需要加锁
# svn propset svn:needs-lock true rates.xls
# svn commit -m "Enable locking for spreadsheet"

加锁
# svn lock rates.xls -m "Adding area rates"
# svn info rates.xls
这儿包含有很多信息,锁信息只要关注最后五行即可。另外,当一个文件已被人加锁时,其他人再加锁的话会提示错误信息。想了解谁对这个文件进行了加锁,可以执行类似#svn info url的命令查看,例如:svn info

http://192.168.1.200/svn/aladdin/rates.xls。

解锁或破坏锁
# svn unlock rates.xls
当文件的锁定者为你时,可以用unlock进行解锁。但当锁定者不是你时,这种解锁称为破坏锁。需要增加--force选项,以及指定完整的文件URL路径。
# svn unlock --force http://192.168.1.200/svn/aladdin/rates.xls

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics