SVN 检出操作
上一章中,我们创建了版本库runoob01,URL为svn://192.168.0.1/runoob01,svn用户user01有读写权限。
我们就可以通过这个URL在客户端对版本库进行检出操作。
svn checkout http://svn.server.com/svn/project_repo --username=user01 以上命令将产生如下结果:
检出成功后在当前目录下生成runoob01副本目录。查看检出的内容
你想查看更多关于版本库的信息,执行 info 命令。
SVN 解决冲突
版本冲突原因:
假设 A、B 两个用户都在版本号为 100 的时候,更新了 kingtuns.txt 这个文件,A 用户在修改完成之后提交 kingtuns.txt 到服务器, 这个时候提交成功,这个时候 kingtuns.txt 文件的版本号已经变成 101 了。同时B用户在版本号为 100 的 kingtuns.txt 文件上作修改, 修改完成之后提交到服务器时,由于不是在当前最新的 101 版本上作的修改,所以导致提交失败。
我们已在本地检出 runoob01 库,下面我们将实现版本冲突的解决方法。
我们发现 HelloWorld.html 文件存在错误,需要修改文件并提交到版本库中。
我们将 HelloWorld.html 的内容修改为 "HelloWorld! http://www.runoob.com/"。
用下面的命令查看更改:
尝试使用下面的命令来提交他的更改:
这时我发现提交失败了。
因为此时,HelloWorld.html 已经被 user02 修改并提交到了仓库。Subversion 不会允许 user01(本例使用的 svn 账号)提交更改,因为 user02 已经修改了仓库,所以我们的工作副本已经失效。
为了避免两人的代码被互相覆盖,Subversion 不允许我们进行这样的操作。所以我们在提交更改之前必须先更新工作副本。所以使用 update 命令,如下:
这边输入"mc",以本地的文件为主。你也可以使用其选项对冲突的文件进行不同的操作。
默认是更新到最新的版本,我们也可以指定更新到哪个版本
代码语言:javascript复制svn update -r6
此时工作副本是和仓库已经同步,可以安全地提交更改了
SVN 提交操作
在上一章中,我们检出了版本库runoob01,对应的目录放在/home/user01/runoob01中,下面我们针对这个库进行版本控制。
我们在库本版中需要增加一个readme的说明文件。
查看工作副本中的状态。
此时 readme的状态为?,说明它还未加到版本控制中。
将文件readme加到版本控制,等待提交到版本库。
查看工作副本中的状态
此时 readme的状态为A,它意味着这个文件已经被成功地添加到了版本控制中。
为了把 readme 存储到版本库中,使用 commit -m 加上注释信息来提交。
如果你忽略了 -m 选项, SVN会打开一个可以输入多行的文本编辑器来让你输入提交信息。
现在 readme 被成功地添加到了版本库中,并且修订版本号自动增加了1。
SVN 版本回退
当我们想放弃对文件的修改,可以使用 SVN revert 命令。
svn revert 操作将撤销任何文件或目录里的局部更改。
我们对文件 readme 进行修改,查看文件状态。
这时我们发现修改错误,要撤销修改,通过 svn revert 文件 readme 回归到未修改状态。
再查看状态。
进行 revert 操作之后,readme 文件恢复了原始的状态。 revert 操作不单单可以使单个文件恢复原状, 而且可以使整个目录恢复原状。恢复目录用 -R 命令,如下。
但是,假如我们想恢复一个已经提交的版本怎么办。
为了消除一个旧版本,我们必须撤销旧版本里的所有更改然后提交一个新版本。这种操作叫做 reverse merge。
首先,找到仓库的当前版本,现在是版本 22,我们要撤销回之前的版本,比如版本 21。