SVN工作原理

来源:互联网 发布:53端口免流 编辑:程序博客网 时间:2024/05/29 16:30

首先理解三个概念:

         工作拷贝:一个SVN的工作拷贝是用户机器的一个本地目录,保存着一些文件和目录,你可以任意编辑其中的文件,在你提交之前你所做的编辑不会上传到SVN与他人所作的修改进行合并。

         基准版本:SVN会在每个工作拷贝的一个特定位置保存该工作拷贝最后一次提交时的文件及目录情况,这些文件及目录就称为"基准版本"。

Head版本:SVN服务器中的最新版本。


1、每个工作拷贝会保留一份基准版本。

2、如果update成功,此时基准版本就变成服务器的Head版本。

3、如果Commit成功,此时基准版本就变成Commit时候的用户工作拷贝。

4、每次Revert都是将工作区回复到基准版本(即上次Update的或者Commit之后的版本)。


注意:如果Head版本比你所编辑的本地工作拷贝版本(指的是基准版本)新的话,而且如果你做了修改,当你Commit的时候会提示有冲突产生,这时你update的时候会将冲突显示出来。如果没有做修改,Commit之后会提示你版本低,需要update成最新版本,此时本地工作拷贝会变成update后的最新的版本。

上面这段解释是正确的。


假设一个项目在SVN服务器上有两个文件a1和b1。当 svn checkout 的时候,在你的本地就有了基准版本a1和b1(存储在.svn中)和working copy(工作拷贝),你平时对项目的编辑都在workingcopy中进行。当你将a1修改成了a2,b1没有修改的时候。此时如果其他人对b1进行了修改成b2,a1没有修改并commit到了SVN服务器,此时Head版本就是a1,b2.此时你svn update的话你的基准版本就会变成a1,b2,而你的workingcopy变成了a2,b2。而此时如果你在本地svn commit的话Head版本就会变成a2,b2.但是如果其他人在你svn commit之前对a进行了编辑并commit后使得Head版本的a1变成了a3,,即Head项目是a3,b2.此时如果你svn commit会提示有a有冲突。这时你svn update会显示a版本的冲突。需要手动进行合并。

出现冲突可以这样解决:

1、修改workingcopy的冲突文件名: mv a2  A2

2、将Head版本的a3更新到本地workingcopy:svn update 。

这样在操作目录下就有了两个文件A2和a3.

3、查看两个文件的异同,手动合并:vimdiff a2 A2

4、提交你合并后的a4:svn commit

0 0