SVN标准目录结构 的一些网文

trunk: 开发主干线目录 主要存放源代码目录

tags: 基线目录

test release: 版本测试目录

product release: 产品发布目录(基线)

branches: 分支目录,主要存放一些新开发的功能。

 

基线就是稳定的程序,里程碑就一个点,比如:我现在是1.0版本的,然后下一次就是1.5版本的

 

我们在一些著名开源项目的版本库中,通常可以看到trunk, branches, tags等三个目录。由于SVN固有的特点,目录在SVN中并没有特别的意义,但是这三个目录却在大多数开源项目中存在,这是因为这三个目录反映了软件开发的通常模式。

 

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

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

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

 

比如一个项目有main.cpp, common.h两个文件,假设目前在开发的是最新的3.0版本,而且1.0/2.0版本也在进行维护,那么项目树将类似如下样子:

project

  |

  +--trunk

 +     |

 +     +----- main.cpp  (3.0版本的最新文件)

 +     +----- common.h

  +

  +--branches

 +     |

 +     +-- r1.0

 +     +     |

 +     +     +---- main.cpp (1.x版本的最新文件)

 +     +     +---- common.h

 +     +

 +     +-- r2.0

 +           |

 +           +---- main.cpp (2.x版本的最新文件)

 +           +---- common.h

 +     

  +--tags   (此目录只读)

       |

       +-- r1.0

       +     |

       +     +---- main.cpp (1.0版本的发布文件)

       +     +---- common.h

       +

       +-- r1.1

       +     |

       +     +---- main.cpp (1.1版本的发布文件)

       +     +---- common.h

       +

       +-- r1.2

       +     |

       +     +---- main.cpp (1.2版本的发布文件)

       +     +---- common.h

       +

       +-- r1.3

       +     |

       +     +---- main.cpp (1.3版本的发布文件)

       +     +---- common.h

       +

       +-- r2.0

       +     |

       +     +---- main.cpp (2.0版本的发布文件)

       +     +---- common.h

       +

       +-- r2.1

              |

              +---- main.cpp (2.1版本的发布文件)

              +---- common.h

 

 

要使用这样的文件夹结构,在建立项目版本库时,可首先建好项目文件夹,并在其中建立trunk, branches, tags三个空的子目录,再将项目文件夹连同这三个子目录一起导入版本库。

这样在trunk中开始进行开发,当需要建立branch或tag时,使用SVN的copy操作进行。

其中tags目录需要只读,可以使用SVN中的authz文件控制该目录的访问权限为只读。


svn版本库目录结构


该文是svn源代码分析系列文章服务端架构中的一篇,主要描述svn服务端版本库数据存储目录结构,并且对这些文件以及目录的作用进行简单分析。使用“svnmadin create”命令创建初始化版本库后,使用“tree”命令打印出没有经过任何修改的原始版本库目录。

$ svnadmin /svnrepos/morepos
$ tree /svnrepos/morepos -p
morepos
|-- [-rw-r--r--]  README.txt
|-- [drwxr-xr-x]  conf
|   |-- [-rw-r--r--]  authz
|   |-- [-rw-r--r--]  passwd
|   `-- [-rw-r--r--]  svnserve.conf
|-- [drwxr-sr-x]  db
|   |-- [-rw-r--r--]  current
|   |-- [-r--r--r--]  format
|   |-- [-rw-r--r--]  fs-type
|   |-- [-rw-r--r--]  fsfs.conf
|   |-- [-rw-r--r--]  min-unpacked-rev
|   |-- [drwxr-sr-x]  revprops
|   |   `-- [drwxr-sr-x]  0
|   |       `-- [-r--r--r--]  0
|   |-- [drwxr-sr-x]  revs
|   |   `-- [drwxr-sr-x]  0
|   |       `-- [-r--r--r--]  0
|   |-- [drwxr-sr-x]  transactions
|   |-- [-rw-r--r--]  txn-current
|   |-- [-rw-r--r--]  txn-current-lock
|   |-- [drwxr-sr-x]  txn-protorevs
|   |-- [-rw-r--r--]  uuid
|   `-- [-rw-r--r--]  write-lock
|-- [-r--r--r--]  format
|-- [drwxr-xr-x]  hooks
|   |-- [-rw-r--r--]  post-commit.tmpl
|   |-- [-rw-r--r--]  post-lock.tmpl
|   |-- [-rw-r--r--]  post-revprop-change.tmpl
|   |-- [-rw-r--r--]  post-unlock.tmpl
|   |-- [-rw-r--r--]  pre-commit.tmpl
|   |-- [-rw-r--r--]  pre-lock.tmpl
|   |-- [-rw-r--r--]  pre-revprop-change.tmpl
|   |-- [-rw-r--r--]  pre-unlock.tmpl
|   `-- [-rw-r--r--]  start-commit.tmpl
`-- [drwxr-xr-x]  locks
    |-- [-rw-r--r--]  db-logs.lock
    `-- [-rw-r--r--]  db.lock

10 directories, 27 files

路径 类型 作用
conf 目录 存放版本库所用配置文件的目录
dav 目录 供mod_dav_svn使用
db 目录 版本数据存储目录
db/fs-type 文件 版本库数据真实存储格式,SVN有fsfs和bdb两种存储格式
db/revprops 目录 记录版本属性
db/revs 目录 版本库数据存储真实目录
db/uuid 文件 存储版本库唯一标识号,参考《svn版本库标识uuid简述》
db/txn-current 文件 记录当前事务
format 文件 存储一个整数的文件,此整数代表库层次结构版本
hooks 目录 存放版本库勾子目录
locks 目录 存储库锁目录,用来跟踪库的访问者
     
     
     
     

其中revs下面是以目录组织的版本结构,每1000个版本组成一个目录,每个版本自成一个文件,文件名即为commit后生成的版本号;即使删除掉部分版本也不会影响版本库的读取和显示;但是基础版本丢失会使版本库无法访


本节和大家讨论一下SVN库的目录结构问题,这里我发表一下个人理解,和大家讨论讨论,欢迎大家一起来学习SVN库的目录结构方面的知识。
1
、所有项目都在一个SVN库中么?
对于这个问题,个人认为,应该每个项目建一个SVN库,为什么这样说呢,因为SVN是全局版本,假如SVN库是如下结构:
SVN
<全局版本1.1>
┠项目A<1.1>
┖项目B<1.1>
这就会导致任何一个项目修改,影响全局版本修改,不能真实反映单个项目的版本情况。
2
SVN库的目录结构该怎样规划?
参考了国外一些主要的开发网站,如SourceForge,大同小异,类似这样的目录结构:
SVN

tags(发布)
┃├1.1rc1
┃├1.2
┃├1.5
┃└1.9
trunk(主版本)
┃└project
┃├src
┃├classes
┃└WEB-INF
branches(分支)
└分支
主要的开发工作放在trunk,分支放在branches,发布版本放在tags
存储库
┠项目名
┃├trunk:主版本
┃├branches:分支版本(独立版本)
┃└tags:标记版本,比如发行版v1.0/v2.0等等
3
SVN库的管理原则:
1
、项目负责人和版本管理员负责架构项目目录结构,包括配置文件、第三方JAR文档
2
、项目负责人分配开发人员目录权限,由版本管理员负责实施,权限分配粒度要细
3
trunk,tags,branches,项目负责人、协同版本管理员构建tagsbranches
4
、版本管理员负责解决开发人员在开发过程中的有关版本问题
5
、开发人员每次修改,或者新增、删除、拷贝工作区对象后,应该立刻提交到版本库,有效保持工作区与资源库的高度一致,每天下班之前提交、(更新)
6
、开发人员在每次修改工作区中代码或者文档时,首先更新该对象,可以尽量减少冲突、合并
7
、保证提交到的版本库的代码没有BUG以免影响开发组,可以适当利用加锁机制,减少冲突
8
、项目负责人和版本管理员负责软件的测试版,构建测试环境,branches由版本管理员进行(checkout
9
、项目负责人和版本管理员负责发布软件的发布版,与系统部协调构建发布环境(export)
10
、版本管理员负责清理有关不需要的branches,tags。本节关于SVN库的目录结构讲解完毕。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值