【SVN】SVN的trunk、branches、tag的使用以及分支的概念

svn的存储结构一般建议在根目录下建立trunk、branches、tags这三个文件夹,trunk用于平时的正常工作,branches用于存放各种分支,tags用于存放各种发布版本或某状态的快照

tags本质上和branches是一样的,都是一种分支,只是习惯上branches下面的东西会被修改、合并,而tags下面的东西则作为某阶段的状态保存不动

一般tags下面经常放的都是各个发布版本,如Release0.91、Release1.23等

1首先明白我们采用命令行的方式在服务器上创建的仓库是没有trunk、branches、tags目录的。

在建立项目版本库时,可首先建好项目文件夹,并在其中建立trunk, branches, tags三个空的子目录。这样在trunk中开始进行开发

trunk是主分支,是日常开发进行的地方。

branches是分支。一些阶段性的release版本,这些版本是可以继续进行开发和维护的,则放在branches目录中。又比如为不同用户客制化的版本,也可以放在分支中进行开发。

tags目录一般是只读的,这里存储阶段性的发布版本,只是作为一个里程碑的版本进行存档。

2.从创建一个服务器仓库开始建立分支

1.服务器端创建一个仓库

[[email protected]_0_12_centos repository]# svnadmin create ./danger  #创建仓库
[[email protected]_0_12_centos repository]# ls ./danger/        #查看目录结构
conf  db  format  hooks  locks  README.txt

2.服务器端修改配置文件,配置账户密码以及权限(修改conf目录下的三个文件:)

authz:负责账号权限的管理,控制账号是否读写权限

passwd:负责账号和密码的用户名单管理

svnserve.conf:svn服务器配置文件

authz文件在最后添加用户的权限,r代表读权限,w代表写权限:

passwd文件中追加账号和密码,如下

账号密码文件无需做修改,也是直接将账号和密码信息追加到文件中即可,注意格式为:

账号 = 密码

例如:admin = 123456

修改svnserve.conf(重要),只需要放开下面四处的注释即可。

3.客户端检出仓库并且创建trunk、tags、branches目录:

[email protected]1535 MINGW64 ~/Desktop/svnproject
$ svn co svn://qiaoliqiang.cn:3690/danger  #检出项目,等价于svn checkout url
Checked out revision 0.

[email protected]-1535 MINGW64 ~/Desktop/svnproject
$ ls
danger/

创建三个目录并且提交到SVN服务器:

[email protected]1535 MINGW64 ~/Desktop/svnproject
$ cd danger/

[email protected]-1535 MINGW64 ~/Desktop/svnproject/danger
$ ls

[email protected]-1535 MINGW64 ~/Desktop/svnproject/danger
$ mkdir trunk branches tags      #创建三个目录

[email protected]-1535 MINGW64 ~/Desktop/svnproject/danger
$ ls
branches/  tags/  trunk/
[email protected]1535 MINGW64 ~/Desktop/svnproject/danger
$ svn add *      #添加到索引库
A         branches
A         tags
A         trunk

[email protected]-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn ci -m "add 3 dirs"  #提交到远程仓库,等价于svn commit -m "xxx"
Adding         branches
Adding         tags
Adding         trunk

Committed revision 1.

4.我们进入trunk目录模拟在trunk正常开发并且提交到服务器:

[email protected]1535 MINGW64 ~/Desktop/svnproject/danger
$ svn diff      #查看修改的不同
Index: trunk/myProject/test.txt
===================================================================
--- trunk/myProject/test.txt    (revision 0)
+++ trunk/myProject/test.txt    (working copy)
@@ -0,0 +1 @@
+111

[email protected]-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn ci -m "add a file"      #提交到服务器
Adding         trunk\myProject
Adding         trunk\myProject\test.txt
Transmitting file data .
Committed revision 2.

5.我们创建一个分支并且切换到新分支:

[email protected]1535 MINGW64 ~/Desktop/svnproject/danger
$ svn cp svn://qiaoliqiang.cn:3690/danger/trunk svn://qiaoliqiang.cn:3690/danger/branches/qlqbranch -m "add qlqbranch"  #创建分支

Committed revision 3.

svn cp 等价于  svn copy

[email protected]1535 MINGW64 ~/Desktop/svnproject/danger
$ svn switch svn://qiaoliqiang.cn:3690/danger/branches/qlqbranch
svn: E195012: Path ‘.‘ does not share common version control ancestry with the requested switch location.  Use --ignore-ancestry to disable this check.
svn: E195012: ‘svn://qiaoliqiang.cn/danger/branches/qlqbranch‘ shares no common ancestry with ‘C:\Users\Administrator\Desktop\svnproject\danger‘

[email protected]-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn switch svn://qiaoliqiang.cn:3690/danger/branches/qlqbranch  --ignore-ancestry  #切换分支到qlqbranch
D    tags
D    trunk
D    branches
A    myProject
A    myProject\test.txt
Updated to revision 3.

[email protected]-1535 MINGW64 ~/Desktop/svnproject/danger
$ ls
myProject/

当然我们可以切换到主干分支

[email protected]1535 MINGW64 ~/Desktop/svnproject/danger
$ svn switch svn://qiaoliqiang.cn:3690/danger/trunk  --ignore-ancestry    #回到主干分支

我们可以通过svn info查看我们目前处于哪个分支

$ svn info    #根据url判断目前处于哪个分支
Path: .
Working Copy Root Path: C:\Users\Administrator\Desktop\svnproject\danger
URL: svn://qiaoliqiang.cn/danger/branches/qlqbranch  
Relative URL: ^/branches/qlqbranch
Repository Root: svn://qiaoliqiang.cn/danger
Repository UUID: 5fd66061-fba7-44bc-bfef-b078c6e4d2c6
Revision: 4
Node Kind: directory
Schedule: normal
Last Changed Author: qiaolq
Last Changed Rev: 4
Last Changed Date: 2018-07-19 16:03:42 +0800 (????, 19 7?? 2018)

6.在新建的分支修改文件

新建的分支修改文件并且提交

[email protected]1535 MINGW64 ~/Desktop/svnproject/danger
$ svn diff
Index: myProject/test.txt
===================================================================
--- myProject/test.txt  (revision 3)
+++ myProject/test.txt  (working copy)
@@ -1 +1,7 @@
 111
+111
+111
+111
+111
+111
+111

[email protected]-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn ci -m "qlqbranch modify test.txt"
Sending        myProject\test.txt
Transmitting file data .
Committed revision 4.

切换到主分支查看文件是否是修改之前的文件:

[email protected]1535 MINGW64 ~/Desktop/svnproject/danger
$ svn switch svn://qiaoliqiang.cn:3690/danger/trunk  --ignore-ancestry  #切换到主干分支
U    myProject\test.txt
Updated to revision 4.

[email protected]-1535 MINGW64 ~/Desktop/svnproject/danger
$ cat ./myProject/test.txt      #读取文件
111

[email protected]-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn switch svn://qiaoliqiang.cn:3690/danger/branches/qlqbranch  --ignore-ancestry  #切换到qlqbranch分支
U    myProject\test.txt
Updated to revision 4.

[email protected]-1535 MINGW64 ~/Desktop/svnproject/danger      #读取文件
$ cat ./myProject/test.txt
111
111
111
111
111
111
111

7. 合并qlqbranch到主干trunk分支

  • 切换到主干分支并查看是否切换成功
[email protected]1535 MINGW64 ~/Desktop/svnproject/danger
$ svn switch svn://qiaoliqiang.cn:3690/danger/trunk  --ignore-ancestry   #切换分支
At revision 4.
$ svn info  #唯一有用的是url,根据url判断是否切换成功
Path: .
Working Copy Root Path: C:\Users\Administrator\Desktop\svnproject\danger
URL: svn://qiaoliqiang.cn/danger/trunk
Relative URL: ^/trunk
Repository Root: svn://qiaoliqiang.cn/danger
Repository UUID: 5fd66061-fba7-44bc-bfef-b078c6e4d2c6
Revision: 4
Node Kind: directory
Schedule: normal
Last Changed Author: qiaolq
Last Changed Rev: 2
Last Changed Date: 2018-07-19 15:54:21 +0800 (????, 19 7?? 2018)
  • 查看创建分支时候的版本号(r3代表创建分支的时候版本号是3,所以合并的时候以3作为旧版本合并)
[email protected]1535 MINGW64 ~/Desktop/svnproject/danger
$ svn log --verbose --stop-on-copy | tail -10
   M /branches/qlqbranch/myProject/test.txt

qlqbranch modify test.txt
------------------------------------------------------------------------
r3 | qiaolq | 2018-07-19 15:57:37 +0800 (????, 19 7?? 2018) | 1 line
Changed paths:
   A /branches/qlqbranch (from /trunk:2)

add qlqbranch
  • 合并qlqbranch分支到主干分支
[email protected]1535 MINGW64 ~/Desktop/svnproject/danger
$ svn merge -r 3:4 svn://qiaoliqiang.cn/danger/branches/qlqbranch   #合并分支,svn merge oldver:newver oldurl

8.发布一个tag(也是copy)

  • 发布tag
[email protected]1535 MINGW64 ~/Desktop/svnproject/danger
$ svn copy svn://qiaoliqiang.cn:3690/danger/trunk svn://qiaoliqiang.cn:3690/danger/tags/release-1.0 -m "1.0released"

Committed revision 5.
  • 切换到tag查看
[email protected]1535 MINGW64 ~/Desktop/svnproject/danger
$ svn switch svn://qiaoliqiang.cn:3690/danger/tags/release-1.0  --ignore-ancestry   #切换分支到tag
U    myProject\test.txt
Updated to revision 5.

[email protected]-1535 MINGW64 ~/Desktop/svnproject/danger
$ svn info      #查看版本以及信息
Path: .
Working Copy Root Path: C:\Users\Administrator\Desktop\svnproject\danger
URL: svn://qiaoliqiang.cn/danger/tags/release-1.0
Relative URL: ^/tags/release-1.0
Repository Root: svn://qiaoliqiang.cn/danger
Repository UUID: 5fd66061-fba7-44bc-bfef-b078c6e4d2c6
Revision: 5
Node Kind: directory
Schedule: normal
Last Changed Author: qiaolq
Last Changed Rev: 5
Last Changed Date: 2018-07-19 16:38:49 +0800 (????, 19 7?? 2018)

原文地址:https://www.cnblogs.com/qlqwjy/p/9336737.html

时间: 2024-11-02 14:07:09

【SVN】SVN的trunk、branches、tag的使用以及分支的概念的相关文章

SVN中的Trunk、Tag、Brance的用法

在SVN中Branch/tag在一个功能选项中,在使用中也往往产生混淆.在实现上,branch和tag,对于svn都是使用copy实现的,所以他们在默认的权限上和一般的目录没有区别.至于何时用tag,何时用branch,完全由人主观的根据规范和需要来选择,而不是强制的(比如cvs).一般情况下, tag,是用来做一个milestone的,不管是不是release,都是一个可用的版本.这里,应该是只读的.更多的是一个显示用的,给人一个可读(readable)的标记. branch,是用来做并行开发

SVN配置管理(trunk、branches、tags)

利用SVN的分支,合理地管理项目代码 由于SVN固有的特点,目录在SVN中并没有特别的意义,但是这三个目录却在大多数开源项目中存在,这是因为这三个目录反映了软件开发的通常模式. trunk是主分支,是日常开发进行的地方.branches是分支.一些阶段性的release版本,这些版本是可以继续进行开发和维护的,则放在branches目录中.又比如为不同用户客制化的版本,也可以放在分支中进行开发.tags目录一般是只读的,这里存储阶段性的发布版本,只是作为一个里程碑的版本进行存档. 在建立项目版本

SVN中trunk,branches,tags的使用明细--项目代码的管理

SVN在项目开发过程中有两种模式: 第一种:Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局svn://proj/|+-trunk+-branches+-tags 这是一个标准的布局,trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不允许修改).但是具体这几个目录应该如何使用,svn并没有明确的规范,更多的还是用户自己的习惯. 对于这几个开发目录,一般的使用方法有两种.我更多的是从

SVN中trunk,branches,tags用法详解【转】

Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-tags这是一个标准的布局,trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不允许修改).但是具体这几个目录应该如何使用,svn并没有明确的规范,更多的还是用户自己的习惯. 对于这几个开发目录,一般的使用方法有两种.我更多的是从软件产品的角度出发(比如freebsd),

【转】SVN中trunk,branches,tags用法详解

SVN中trunk,branches,tags用法详解 Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-tags这是一个标准的布局,trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不允许修 改).但是具体这几个目录应该如何使用,svn并没有明确的规范,更多的还是用户自己的习惯. 对于这几个开发目录,一般的使用方法有两

SVN中trunk,branches,tags用法详解

Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-tags这是一个标准的布局,trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不允许修改).但是具体这几个目录应该如何使用,svn并没有明确的规范,更多的还是用户自己的习惯. 对于这几个开发目录,一般的使用方法有两种.我更多的是从软件产品的角度出发(比如freebsd),

SVN的trunk branches tags(一)

Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-tags这是一个标准的布局,trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不允许修改).但是具体这几个目录应该如何使用,svn并没有明确的规范,更多的还是用户自己的习惯. 对于这几个开发目录,一般的使用方法有两种.我更多的是从软件产品的角度出发(比如freebsd),

SVN中trunk,branches,tags用法详解[重要]

Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-tags这是一个标准的布局,trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不允许修改).但是具体这几个目录应该如何使用,svn并没有明确的规范,更多的还是用户自己的习惯. 对于这几个开发目录,一般的使用方法有两种.我更多的是从软件产品的角度出发(比如freebsd),

图解SVN开发版本控制和发布流程,Trunk、Tag、Branch的使用

介绍一种比较合理的SVN Trunk.Tag和Branch使用方法.先上图,再说明: 责职说明: Trunk:用于各版本开发提交代码 TAG:用于记录和保存每个release/milestone的代码 Branch:用于bug fixing 过程说明: 项目开始时,创建Trunk,开始1.0.0开发 所有小组成员都往Trunk中提交代码 当1.0.0开发完成后,创建一个标签:Tag1.0.0 Tag1.0.0测试完成后,部署到服务器 开发小组开始新版本1.0.1开发,继续提交代码到Trunk中