SVN服务端Subversion与客户端TortoiseSVN教程--解决同步问题

来源:互联网 发布:制作手机相册软件 编辑:程序博客网 时间:2024/05/16 08:42

 

SVN服务端Subversion与客户端TortoiseSVN教程--解决同步问题

一、SVN-Subversion安装配置Windows总结

1、下载Subversion时,要清楚所下载的subversion版本支持的是apache2.0还是apache2.2。假如只支持apache2.0。
要重新编译subversion;简单方法找到编译好的能支持apache2.2的subversion版本。

2、subversion一般自带web服务器,但多数都选择subversion+apache这个环境。

3、将Subversion安装目录bin/ 下面的*.so文件复制到Apache 安装目录modules/ 目录下.

4、找到Apache安装目录下的conf目录,用文本编辑器打开httpd.conf,找到一下两行:
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
添加:
LoadModule dav_svn_module svn/mod_dav_svn_1.3.so
LoadModule authz_svn_module svn/mod_authz_svn_1.3.so
这两个模块。
注意:假如出现类似如下的错误:
Syntax error on line 923 of C:/Program Files/Apache Group/Apache2/conf/httpd.conf:
Invalid command 'DAV', perhaps mis-spelled or defined by a module not included in the server configuration
就要保留 LoadModule dav_module modules/mod_dav.so

5、把Subversion/bin下的*.dll文件拷到Apache的bin目录下,相同保留apache的.dll文件。

6、创建一个svn repository。
创建(svn repository仓库)的根目录,比如D:/svn。
进入Subversion目录,输入如下命令: 
svnadmin create repos  

7、在apache的http.conf添加节点
<Location /svn>
        DAV svn 
        SVNListParentPath on 
        SVNParentPath D:/svn/repos            #代码库
        AuthType Basic               #使用apache的认证方式
        AuthName "Subversion repositories" 
        AuthUserFile "D:/svn/passwd"           #使用的密码文件。 
        #AuthzSVNAccessFile svnaccessfile      #设置权限
        Require valid-user 
</Location>

8、使用apache的htpasswd构造密码文件D:/passwd,即建用户。
cmd命令行,进入apache的bin目录下:
bin/htpasswd -c passwd <username>        // 创建用户 第一次使用htpasswd时带参数-c。
bin/htpasswd passwd <username>          // 增加用户

9、重启apache。可以用了,浏览器中输入http://localhost/svn/repos
可以看到
Revision 0: /
--------------------------------------------------------------------------------
Powered by Subversion version 1.4.0 (r21228).      //说明我们已经配置成功了
--------------------------------------------------------------------------------

 

 

二、SVN客户端用户使用手册(完整版)
环境模拟
现有项目名称:test
服务端版本库:test
URL:http://10.155.11.10:81/svn
开发人员:devA,devB
版本库目录结构:

一.基本操作
第一步:安装客户端
下载TortoiseSVN安装程序,双击直接安装即可。安装成功后,右键单击鼠标会多出两个选项,分别是SVN checkout和Tortoise SVN。


第二步:建立工作区
项目开始之前,在本地PC的硬盘上,创建一个文件夹,文件夹命名随意(例如workspace
),该文件夹即作为软件开发者在项目开发过程中的工作区。


第三步:下载版本库
    假如现在开发一个项目,配置管理员会在服务端建立一个该项目的版本库test,如SVN服务端配置中的repos。在本地的workspace文件夹上,右键单击鼠标。选择SVN checkout,会出现如下窗口

在URL of repository中输入版本库地址,http://10.155.11.10:81/svn/test(test为你在svn服务器上配置的代码库名) ,在Checkout dir中系统会自动添加第二步所创建的工作区目录。
在Revision中,选中HEAD revision,这样将会下载到版本库的最新版本。如果想下载库中的旧版本文件,可选中Revision,然后填入版本号即可。
如果不想下载整个版本库,而是只想下载自己负责的那部分模块,可以在URL后添加模块名,例如http://10.155.11.10:81/svn/test/Doc 。
单击OK,输入用户名和密码


第四步:修改版本库
对版本库的修改包括修改文件内容,添加删除文件,添加删除目录
经过第三步的操作,本地的工作区文件夹,即workspace上会有绿色对勾出现,工作区下的文件也会带有绿色对勾,如图2

如果对库中某一个文件进行了修改,系统会自动为这个文件和这个文件所在的各级父文件夹加上红色叹号,代表该文件或目录已经在本地被修改,如图3

图3
当所有对版本库的修改操作完毕后,右键单击工作区文件夹,选择commit提交新版本,输入密码后系统将把修改后的版本库上传到服务端,即完成一次对版本库的更新。
注意:
新版本提交之后,其他拥有写权限的用户也许会重复以上几步的操作,完成对版本库的再一次更新。所以,每次在工作区文件夹下修改本地版本库之前,必须首先对本地版本库执行一次更新(右键单击工作区,选择SVN Updata),将最新的版本下载到本地,然后再进行修改操作。


二.其他操作
在日常的软件开发过程中,除了以上介绍的下载,提交,更新操作外,还有另外几种常用操作。
(1)比较文件的不同之处
当对soc_1做了修改之后,soc_1文件会出现红色叹号,表示已经修改,如果想查看修改后的soc_1文件与修改前有何不同,可以右键单击此文件,选择diff,系统探出一个窗口,如图3,窗口分为两个部分,左边为更改之前的版本,右边为更改之后的版本。并在不同之处作出标记和说明。如图4

如果是word文档的话,选择diff之后,系统会打开一个word文档,并在其中标出修改后的版本与修改前有何不同。如图4.1

(2)查看日志
如果想查看一个文件的日志,例如soc_1,右键单击这个文件,选择show log,系统会踏出一个窗口,并在窗口中显示soc_1各个版本的log。如图4

图5

 

(3)查看版本树
如果想查看soc_1文件的版本树,右键单击该文件,选择Revision graph,系统将会打开一个窗口,并在窗口中显示该文件的版本树。如图6。

   之所以只显示了4.5.6.7四个版本,是因为选择了只显示发生过变化的版本。即1.4.5.6.7每一个版本都有不同的地方,都是经过用户修改后提交的。而2.3两个版本是与版本1相同的。

 

(4)下载某个文件的旧版本

如果想要得到某个文件的旧版本,只需在该文件上单击右键,选择Updata to revision…即可。系统会提示输入版本号。例如要下载soc_1的第五个版本,只需填入5即可。如图7。查看完版本5的文件后,如果想在此回到最新版本,只需要对soc_1运行Updata即可。

 


(5)重名名和删除文件
如果要删除一个文件或重名名一个文件,注意不要在windows下直接操作。只需右键单击该文件,选择Rename或Delete,svn系统便会完成操作。在workspace中将文件重命名或删除后,服务端的文件结构不会变化,只有当提交新版本库后,即commit后,服务端的文件结构才会被更新。

如果误删除了文件,在没有提交版本库之前,可以通过对版本库的升级将文件重新下载到本地的版本库,也可以通过revert恢复(参考第八条)。如果文件删除,并且已经提交,那么要找回文件只能通过下载旧版本库来完成,参考(4)。

 

(6)创建分支
版本库中最初的文件soc_1,soc_2,word_1,word_2都是主干文件。如果想要为soc_1创建一个分支,只需右键单击soc_1,选择Branch/Tag,系统会弹出一个窗口,如图8。在窗口中,From URL表示要创建的这个分支是soc_1的分支(系统会自动添加,不必更改)。在To URL中,需要更改一下文件名,在文件名后加一个标志即可,例如“ _branch”,路径不需要更改。在Creat copy in the repository from中,可以选择分支文件是由soc_1的那一个版本拷贝来的。最后填写日志,选择OK。

分支创建完毕,Updata版本库,系统会将soc_1的主干文件和分支文件soc_1_branch同时下载到本地版本库,如图8.1,然后即可在分支文件上进行操作。此时soc_1的版本树如图8.2


(7)合并分支
当需要把soc_1_branc分支文件合并到soc_1主干文件时,右键单击soc_1,选择Merge,会弹出一个窗口,如图9。

在 From输入框中填入主干的URL,在To输入框中填入分支的URL。在From和To中,都有两个选项HEAD Revision和Revision,表示要进行合并的是soc_1的那个版本。合并之后主干文件会标注红色叹号,表示已被修改,并可以提交。如果合并后文件标注的是黄色叹号,表示文件有冲突,处理方法见第三部分“异常处理”。

 

(8)撤销修改

当对一个文件进行了修改并保存后(注意此处并没有进行提交),如果对修改不满意,想要重新修改,可以右键单击修改过的文件(带红色叹号的那个),然后选择revert,前面的一系列修改便会被撤销,恢复到Updata之后的状态。如果一个文件被误删除,也可通过右键单击该文件所在的目录,选择revert来恢复。

 

三.异常处理
此处所说的异常主要是指文件发生冲突。以用户devA和用户devB为例,
当两个用户同时下载了最新的版本库,并对库中同一个文件soc_2进行修改提交时,首先提交的用户devA不会发生异常,第二个提交的用户 
devB便会出现无法提交的现象。因为服务端的版本库已经被devA更新,devB用户在上传时,系统会提示出错如图10。

在这种情况下,devB用户需要首先对修改的文件进行Updata文件操作。如果两个用户修改了文件soc_2的同一个地方,则在devB用户执行Updata后,系统会将本地的soc_2与从服务端下载soc_2合并到一个文件上,并在该文件图标上标上黄色叹号,表示文件出冲突。在文件中通过“<<<<<<”和“>>>>>>”标识冲突位置和冲突内容。devB用户只有与devA协商,将该冲突处理,之后单击右键,选择Resolve,冲突标记消除,才能够再次提交,否则无法提交。
文件标记冲突的格式:
<<<<<<< .mine
    workspsace工作区,等abc工作区提交结束后再提交,应该会出现冲突
=======
   在此插入一段话,啊啊aaa,测试冲突
>>>>>>> .r15
绿色部分表示本地文件的修改
蓝色部分表示服务端版本库中的最新版本与本地文件修改发生冲突的地方。
紫色表示是第15个版本发生了冲突
=======
   在此插入一段话,啊啊aaa,测试冲突
>>>>>>> .r15
绿色部分表示本地文件的修改
蓝色部分表示服务端版本库中的最新版本与本地文件修改发生冲突的地方。

紫色表示是第15个版本发生了冲突

 

三、对SVN架设的补充(SVN与共享)-- 解决同步问题,减少update操作

不想公司每个开发员第一次是都进行Update,假如是项目文件大的话,消耗的时间是挺长的。
由于svn是在本地的服务器上,用来测试的。我就在svn服务器是建一个共享share目录,并当做上面第二点的workspace。devA在自己本机上映射svn服务器上的share目录为Z:盘,打开在:Z
盘,使用TSVN客户端,按照 第二点操作commit一次。等吧,文件大。。。

commit完成之后,devB也是对服务器share进行映射,就可以了。其他操作如同本机上一样的(注意:devA、devB的SVN账号是不是一样的哦,这样方便查看谁修改内容哦)。

所有的开发员的工程都是在映射盘操作,如同本地一样。

通过share目录的映射,会大大减少update操作的。并能保证开发环境(只在服务器上)一致。

 

原创粉丝点击