【SVN】SVN的trunk、branches、tag的使用以及分支的概念
SVN命令参考: https://www.cnblogs.com/wlsxmhz/p/5775393.html 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.服务器端创建一个仓库
[root@VM_0_12_centos repository]# svnadmin create ./danger #创建仓库
[root@VM_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目录:
Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject
$ svn co svn://qiaoliqiang.cn:3690/danger #检出项目,等价于svn checkout url
Checked out revision . Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject
$ ls
danger/
创建三个目录并且提交到SVN服务器:
Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject
$ cd danger/ Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject/danger
$ ls Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject/danger
$ mkdir trunk branches tags #创建三个目录 Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject/danger
$ ls
branches/ tags/ trunk/
Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject/danger
$ svn add * #添加到索引库
A branches
A tags
A trunk Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject/danger
$ svn ci -m "add 3 dirs" #提交到远程仓库,等价于svn commit -m "xxx"
Adding branches
Adding tags
Adding trunk Committed revision .
4.我们进入trunk目录模拟在trunk正常开发并且提交到服务器:
Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject/danger
$ svn diff #查看修改的不同
Index: trunk/myProject/test.txt
===================================================================
--- trunk/myProject/test.txt (revision )
+++ trunk/myProject/test.txt (working copy)
@@ -, + @@
+ Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject/danger
$ svn ci -m "add a file" #提交到服务器
Adding trunk\myProject
Adding trunk\myProject\test.txt
Transmitting file data .
Committed revision .
5.我们创建一个分支并且切换到新分支:
Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject/danger
$ svn cp svn://qiaoliqiang.cn:3690/danger/trunk svn://qiaoliqiang.cn:3690/danger/branches/qlqbranch -m "add qlqbranch" #创建分支 Committed revision .
svn cp 等价于 svn copy
Administrator@MicroWin10- 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' Administrator@MicroWin10- 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 . Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject/danger
$ ls
myProject/
当然我们可以切换到主干分支
Administrator@MicroWin10- 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:
Node Kind: directory
Schedule: normal
Last Changed Author: qiaolq
Last Changed Rev:
Last Changed Date: -- :: + (▒▒▒▒, ▒▒ )
6.在新建的分支修改文件
新建的分支修改文件并且提交
Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject/danger
$ svn diff
Index: myProject/test.txt
===================================================================
--- myProject/test.txt (revision )
+++ myProject/test.txt (working copy)
@@ - +, @@ +
+
+
+
+
+ Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject/danger
$ svn ci -m "qlqbranch modify test.txt"
Sending myProject\test.txt
Transmitting file data .
Committed revision .
切换到主分支查看文件是否是修改之前的文件:
Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject/danger
$ svn switch svn://qiaoliqiang.cn:3690/danger/trunk --ignore-ancestry #切换到主干分支
U myProject\test.txt
Updated to revision . Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject/danger
$ cat ./myProject/test.txt #读取文件 Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject/danger
$ svn switch svn://qiaoliqiang.cn:3690/danger/branches/qlqbranch --ignore-ancestry #切换到qlqbranch分支
U myProject\test.txt
Updated to revision . Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject/danger #读取文件
$ cat ./myProject/test.txt
7. 合并qlqbranch到主干trunk分支
- 切换到主干分支并查看是否切换成功
Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject/danger
$ svn switch svn://qiaoliqiang.cn:3690/danger/trunk --ignore-ancestry #切换分支
At revision .
$ 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:
Node Kind: directory
Schedule: normal
Last Changed Author: qiaolq
Last Changed Rev:
Last Changed Date: -- :: + (▒▒▒▒, ▒▒ )
- 查看创建分支时候的版本号(r3代表创建分支的时候版本号是3,所以合并的时候以3作为旧版本合并)
Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject/danger
$ svn log --verbose --stop-on-copy | tail -
M /branches/qlqbranch/myProject/test.txt qlqbranch modify test.txt
------------------------------------------------------------------------
r3 | qiaolq | -- :: + (▒▒▒▒, ▒▒ ) | line
Changed paths:
A /branches/qlqbranch (from /trunk:) add qlqbranch
- 合并qlqbranch分支到主干分支
Administrator@MicroWin10- MINGW64 ~/Desktop/svnproject/danger
$ svn merge -r : svn://qiaoliqiang.cn/danger/branches/qlqbranch #合并分支,svn merge oldver:newver oldurl
8.发布一个tag(也是copy)
- 发布tag
Administrator@MicroWin10- 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 .
- 切换到tag查看
Administrator@MicroWin10- 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 . Administrator@MicroWin10- 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:
Node Kind: directory
Schedule: normal
Last Changed Author: qiaolq
Last Changed Rev:
Last Changed Date: -- :: + (▒▒▒▒, ▒▒ )
【SVN】SVN的trunk、branches、tag的使用以及分支的概念的更多相关文章
- SVN组成中trunk,branches and tags功能用法详解
SVN组成中trunk,branches and tags功能用法详解 我相信初学开发在SVN作为版本管理时,都估计没可能考虑到如何灵活的运用SVN来管理开发代码的版本,下面我就摘录一篇文章来简单说 ...
- SVN中的Trunk、Tag、Brance的用法
在SVN中Branch/tag在一个功能选项中,在使用中也往往产生混淆.在实现上,branch和tag,对于svn都是使用copy实现的,所以他们在默认的权限上和一般的目录没有区别.至于何时用tag, ...
- SVN配置管理(trunk、branches、tags)
利用SVN的分支,合理地管理项目代码 由于SVN固有的特点,目录在SVN中并没有特别的意义,但是这三个目录却在大多数开源项目中存在,这是因为这三个目录反映了软件开发的通常模式. trunk是主分支,是 ...
- [转]SVN的trunk branch tag
Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-ta ...
- SVN中trunk,branches,tags用法详解
原文地址:http://www.cnblogs.com/dafozhang/archive/2012/06/28/2567769.html Subversion有一个很标准的目录结构,是这样的.比如项 ...
- SVN标准开发布局目录,trunk,branches,tags用法详解
http://www.cnblogs.com/newstar/archive/2011/01/04/svn.html 关于 SVN 目录结构 Subversion有一个很标准的目录结构,是 ...
- SVN中trunk,branches,tags用法详解(转载)
转载出处:http://www.cnblogs.com/dafozhang/archive/2012/06/28/2567769.html Subversion是一个自由开源的版本控制系统.在Subv ...
- SVN中trunk,branches,tags用法详解【转】
Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-ta ...
- SVN中trunk,branches,tags用法详解[重要]
Subversion有一个很标准的目录结构,是这样的.比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是 svn://proj/|+-trunk+-branches+-ta ...
随机推荐
- page = new String(request.getQueryString().getBytes("ISO-8859-1"),"GBK");解决前台传后台乱码问题
page = new String(request.getQueryString().getBytes("ISO-8859-1"),"GBK");解决前台传后台 ...
- 软工团队(hello world)组员介绍
姜中希:喜欢编程,善于交际. 周盼超:喜欢编程. 王昭博:思路比较清晰,可以明确开发步骤. 刘洪阳:思想笔记广泛,可以把很多有关联的东西结合起来. 刘双勃:喜欢编程,踏实,比较容易坚持.
- beta3
吴晓晖(组长) 过去两天完成了哪些任务 一些细节的debug,部分优化,算法中有关记录的部分 展示GitHub当日代码/文档签入记录 接下来的计划 推荐算法 还剩下哪些任务 组员:刘帅珍 过去两天完成 ...
- (转)广度优先搜索BFS和深度优先搜索DFS
1. 广度优先搜索介绍 广度优先搜索算法(Breadth First Search),又称为"宽度优先搜索"或"横向优先搜索",简称BFS. 它的思想是:从图中 ...
- vs安装体验
鉴于vs都是英文,所以安装的时间实在是太长了,经过4个小时终于装完了. 首先要下载和安装Unit Test Generator.步骤为:tools->Extensions and Updates ...
- ElasticSearch 2 (36) - 信息聚合系列之显著项
ElasticSearch 2 (36) - 信息聚合系列之显著项 摘要 significant_terms(SigTerms)聚合与其他聚合都不相同.目前为止我们看到的所有聚合在本质上都是简单的数学 ...
- 窗体的构造函数和OnCreate事件
窗体的构造函数和创建事件和OldCreateOrder属性有很大的关系. 情况1: 如果窗体继承自TForm,且有如下形式: 1. constructor TForm1.Create(AOw ...
- CORS跨域资源共享简述
什么是CORS? 默认情况下,为预防某些而已行为,浏览器的XHR对象只能访问来源于同一个域中的资源.但是我们在日常实际开发中,常常会遇到跨域请求的需求,因此就出现了一种跨域请求的方案:CORS(Cro ...
- MT【172】内外圆
$P,Q$是两个定点,M为平面内一个动点,且$\dfrac{|MP|}{|MQ|}=\lambda(\lambda>0,\lambda\ne1)$, 点M的轨迹围成的区域面积为S , 设$S=f ...
- zk会话,快照,序列化,本地存储
FolloewerRequestProcessor类 追随者 输入会有不同的形式,客户端请求,提议,提交事务 通过箭头来标示追随者处理的不同路径 本地存储 事务日志和快照 SyncRequestPro ...