【总结】SVN学习笔记 — 需补充

Posted on Posted in 计算机1,540 views

一、SVN介绍

1.1、版本控制系统(VCS)

    1、版本控制系统(VCS) 的目标

  •     允许开发者们同时工作

  •     不会重写每个人的改变

  •     维持每个版本的全部的历史

    2、VCS 被分成两种

  •     集中版本控制系统 (CVCS) 

  •     分散或不集中的版本控制系统 (DVCS)

    3、术语

  •     仓库: 仓库是任何一个版本系统的核心,它是开发者们保存工作的总部,被所有的成员共享。

  •     主干:trunk 是主要开发所在的目录,经常被项目开发者们查看。

  •     标签:tags 目录用于储存项目中被命名的快照,标签操作允许给对仓库中特定版本一个描述和一个难忘的名字。

  •     分支:分支操作用于创建开发的另一条线,当你想把开发进程复制进两个不同的方向是很有用的。

  •     工作副本:是仓库的一个快照。工作副本是一个私人工作空间,开发者可以独立于其他成员做自己的工作。

  •     提交更改:提交是一个保存更改的过程,从私人工作空间到中央服务器。

1.2、SVN(Subversion)

    1、Apache Subversion 通常被缩写成 SVN;

    2、是一个开放源代码的版本控制系统,Subversion 在 2000 年由 CollabNet Inc 开发,现在发展成为 Apache 软件基金会的一个项目;

    3、是集中式的版本管理,如果脱离了服务器,开发者基本上可以说是无法工作的。

    4、一般工作流程:

        从服务器下载项目组最新代码。

        进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码(很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)。

        下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。

    5、一般目录约定如下:

        /trunck:开发主线

        /branches:支线副本
        /tags:标签副本(一旦创建,不允许修改)

    6、一般的,我们的所有的开发都是基于trunk进行开发,当一个版本(release)开发告一段落(开发、测试、文档、制作安装程序、打包等结束后),代码处于冻结状态(人为规定,可以通过hook来进行管理)。此时应该基于当前冻结的代码库,打tag。

    当下一个版本/阶段的开发任务开始时,继续在trunk进行开发。此时,如果发现了上一个已发行版本(Released Version)有一些bug,或者一些很急迫的功能要求,而正在开发的版本(Developing Version)无法满足时间要求,这时候就需要在上一个版本上进行修改了。解决方法是基于发行版对应的tag,做相应的分支(branch)进行开发。

二、SVN安装配置

2.1、准备

    1、环境:

        服务端:windows8.1 专业版 32位

        客户端:windows7 专业版 64位;

    2、下载: http://subversion.apache.org/packages.html

        服务端采用:Win32Svn 1.8.16

        客户端采用:TortoiseSVN 1.9.4

2.2、服务器安装配置

    1、服务器安装

        直接默认安装到 C:\Program Files\Subversion\

    2、配置环境变量PATH到该目录

2.3、客户端安装配置 

    直接默认安装 到 D:\Program Files\TortoiseSVN

     我选择了command

QQ截图20160525170508.png

三、SVN使用(命令)

1、检出

svn checkout [-depth ARG] [--ignore-externals] [-r rev] URL PATH

2、更新

svn info URL_of_WC
svn update [-r rev] PATH 
#更新到版本
svn info URL_of_WC
svn update [-r rev] [-depth ARG] [--ignore-externals] PATH

3、提交

svn status -v PATH
svn add PATH...
svn commit -m "LogMessage" [-depth ARG] [--no-unlock] PATH...

4、差异

svn diff PATH

5、显示日志

svn log -v -r 0:N --limit 100 [--stop-on-copy] PATH
#or
svn log -v -r M:N [--stop-on-copy] PATH

6、检查修改

svn status -v PATH
# or
svn status -u -v PATH

7、版本图

svn info URL_of_WC
svn log -v URL

8、版本库浏览器

svn info URL_of_WC
svn list [-r rev] -v URL

9、编辑冲突

这个命令没有控制台等价实现。它调用TortoiseMerge或者外部三路差异/合并工具察看棘手的冲突,挑选出冲突行。

10、已解决

svn resolved PATH

11、改名

svn rename CURR_PATH NEW_PATH

12、删除

svn delete PATH

13、恢复

svn status -v PATH
svn revert [-R] PATH...

14、清理

svn cleanup PATH

15、获得锁

svn status -v PATH
svn lock -m "LockMessage" [--force] PATH...

16、释放锁

svn unlock PATH

17、分支/标记

svn copy -m "LogMessage" URL URL
#or
svn copy -m "LogMessage" URL@rev URL@rev
#or
svn copy -m "LogMessage" PATH URL

18、切换

svn info URL_of_WC
svn switch [-r rev] URL PATH

19、合并

svn merge [--dry-run] --force From_URL@revN To_URL@revM PATH 
svn diff From_URL@revN To_URL@revM

20、输出

svn export [-r rev] [--ignore-externals] URL Export_PATH

21、重新定位

svn switch --relocate From_URL To_URL

22、在当前位置创建版本库

svnadmin create --fs-type fsfs PATH

23、添加

svn add PATH...

24、导入

svn import -m LogMessage PATH URL

25、追溯

svn blame -r N:M -v PATH
svn log -r N:M PATH

26、加入忽略列表

svn propget svn:ignore PATH > tempfile
{edit new ignore item into tempfile}
svn propset svn:ignore -F tempfile PATH

27、创建补丁

svn diff PATH > patch-file

四、练习-界面模式

4.1、服务器新建项目仓库

    1、服务器端,新建一个项目文件夹: E:\svnroot\myproject

    2、然后创建仓库,在命令行中输入命令如下:

svnadmin create E:\svnroot\myproject

    生成的项目仓库如下所示

1464174754650543.png

    

    3、配置用户权限,配置文件在 E:\svnroot\myproject\conf 目录下,配置过程如下:

        A.authz文件:创建用户组group1,里面有三个用户user1, user2和user3,权限为rw(读写权限)。

    1358224823_3225.jpg

        B.passwd文件:用来修改用户密码 

1358224852_3083.jpg

        C.svnserve.conf文件:需要更改的就是如下几行,把每行前面的注释#拿掉,如下图:

1358224868_4908.jpg   1358224884_2440.jpg

        realm要指定为我们的源码版本库,在这里为myproject.

         备注:最后认证不成功,我把服务器权限从新设置了,默认有读写权限.

    4、启动SVN服务,利用以下命令:

svnserve -d -r E:\svnroot\myproject

    这样就启动了myproject这个仓库的服务(单仓库),如果在svnrepo目录下还有其他仓库,且要同时启动多个仓库,执行svnserve -d -r E:\svnroot即可(多仓库)。

    一般情况下,访问SVN仓库的URL格式形如:svn://10.18.77.60/myproject,但如果启动的是单仓库,则URL直接用:svn://10.18.77.60表示。svn协议的默认端口号为3690。

    小技巧:如果需要频繁使用该仓库,则可将该SVN服务注册成windows服务,这样在计算机开机时就可以启动该服务。如下图:

版本控制器:SVN教程1140.png

    删除该windows服务:sc delete svnService。

4.2、客户端设置源

     1、新建文件夹 C:\Users\evanxia\Desktop\project

    2、右击文件夹project –》 TortoiseSVN –》 Export,如下所示:

1464167761159067.png

     单击就会弹出一个对话框,然后输入URL,其他选项不需要更改,Omit externals不要勾选,HEAD Revision选中表示最新的代码版本,接着点击OK即可将代码导出到这个目录中。如下图所示:

QQ截图20160525192346.png

    此时,该文件夹下面是空的,需要转到下一步中。

4.3、同步拉取项目

    1、选中project文件夹右击,选择“SVN Checkout”,并在提示框内输入用户名和密码:

QQ截图20160526092749.png

    2、完成后,project文件夹下会出现一个隐藏的文件夹“.svn”;

    3、为了模仿多个用户,C:\Users\evanxia\Desktop\pj2文件夹也进行同样的操作。

4.4、project新建文件

    1、在project文件夹下新建txt文件“test-1605151929.txt”,文件内容如下:

test-1605151929test-1605151929

4.5、project添加提交

    1、将文件“test-1605151929.txt”添加到项目,选中文件夹–》右击–》TortoiseSVN–》Add–》OK。如下图所示:

1464224110754728.png

    2、提交更新,选中文件夹–》右击–》SVN Commit–》OK,如下图所示:

1464224455681335.png

QQ截图20160526094042.png

    现在代码已经提交到了服务器端的仓库中了。

    3、注意:

      update是从SVN服务器上把最新版本下载到本地来;相当于Git的pull;

       commit是将本地做过的改动(修改、新增、删除、改名、移动等)上传到SVN服务器;
       add是将本地新增的文件或文件夹标注为受SVN控制,但还未上传到服服务器,一般后面会跟一个commit操作。

4.6、多用户冲突解决

    1、为了模仿多个用户,建立文件夹 C:\Users\evanxia\Desktop\pj2,以同样的方式Checkout项目;

    2、pj2修改test-1605151929.txt文件内容为:

test-1605151929.txttest-1605151929.txt
xia

    3、project修改test-1605151929.txt文件内容为:

test-1605151929.txttest-1605151929.txt
evan

    4、pj2进行commit,结果正常

    5、project进行commit,OK前,先查看log如下:

1464228581700986.png

    然后单机OK,提交修改,会有如下提示:

QQ截图20160526101140.png   

    6、单机OK后,会提示“Update”or“Cancel”,选择“Update”后,会有如下操作

1464228979244990.png

    然后选中右侧对话框中的文件,双击,然后在新的窗口手动修改,然后合并,如下图:

1464229941557057.png

    然后右击进行commit即可。现在pj2进行Update就可以得到最新的修改了;

    建议:在自己对项目修改之前,先进行Update。

4.7、关于恢复

4.8、关于回滚

4.9、关于分支

    1、新建分支:选择project目录–》右击–》TortoiseSVN-》Branches/tag

1464232589928324.png

    其中branches为规定的分支名称,evanxia为分支名。

    2、切换分支:选择project目录–》右击–》TortoiseSVN-》Switch

    3、同样pj2新建分支branches/xiaoxia,然后切换到该分支;

    4、project修改内容为

test-1605151929.txttest-1605151929.txt
xia
evan
evanxia

    pj2修改为:

test-1605151929.txttest-1605151929.txt
xia
evan
feng
xiaoxia

    然后pj2commit提交,正常,最后project提交不会和之前一样出现冲突,因为两个修改在不同的分支里面。

    5、合并分支xiaoxia到evanxia:pj2先切换到evanxia,然后Update,此时evanxia即为当前最新的,然后切换到xiaoxia分支。然后如下操作:

1464233621901378.png

    6、

4.8、关于标签

五、实战练习-命令行模式

参考:

1、简单教程:http://www.flyne.org/article/851

2、系统教材:http://wiki.jikexueyuan.com/project/svn/

3、使用笔记:http://mintisan.github.io/notes/svn-tutorial.html#terminologies

4、官网:http://subversion.apache.org/packages.html

5、服务器端配置:http://www.programgo.com/article/17312665314/;jsessionid=B411B3ADD08F5B7E0975F4DEB32A9FEE

6、SVN命令:https://tortoisesvn.net/docs/release/TortoiseSVN_zh_CN/tsvn-cli-main.html

7、http://km.oa.com/group/2280/articles/show/72450?kmref=search&from_page=1&no=1&is_from_iso=1


转载标明出处:https://blog.evanxia.com/2016/05/636