2014-01-07 107 views
0

我是新手,请保持温柔。存储库已创建后为Subversion存储库创建标签和分支

我们在我的工作中使用颠覆来追踪我们从另一个实体接收到的相当大的软件项目的变化。但是,由于我们从未分发我们的软件,因此我们没有遵循我们存储库的传统干线/标签/分支层次概念。我们简单地使用创建存储库:

svnadmin create /data/svn/projectName 

在服务器上,然后 SVN进口SRC的svn:// svnserver/PROJECTNAME -m“首次进口” 在客户端上,然后我们看看到工作目录。

但是,现在我想为我们的各种软件版本添加标签。我曾试图重组库以下几个环节,如:

http://grand-prismatic.blogspot.com/2013/08/add-trunk-tags-branches-directory.html

但也许我不明白他们在做什么。我认为trunk/branches/tags目录是存储库结构的一部分,但不是源代码物理结构的一部分。当我遵循上面的链接时,我在工作副本中找到了标签/分支/主干目录,这是我不想要的。

我误解了标签和分支的功能吗?有没有办法将标签目录添加到存储库中,而不必将其显示在我的工作副本中?

+0

没有,你签出该项目的“根”,是没有办法“改写”这一点。你可以做的是将你的工作副本切换到'/ trunk'(或你想要的分支/标签)。标签和分支是svn中的目录(与其他一些vcs相反)。 – Wrikken

回答

1

您不需要检出标签目录。通常情况下,您将使用主干下的内容或您的某个分支下的内容。您可以查看存储库的任何部分(中继线,或中继线内的一个目录)到您的工作目录。

标签目录的内容将成为trunk或任何分支的“标签”或时代版本。例如,当一个版本被测试并准备好从trunk或分支复制到标签目录时,该目录将在发布时保存所有正确的版本。

不强制执行目录名称trunk,tags,branch。你可以随心所欲地给他们打电话。在习惯上最好使用这些名字,因为当你引用svn命令的时候,解释会和你的svn设置一致。如果你只有一个代码流(trunk)并且不偏离工程代码,并且你永远不需要制作特定版本的标签,那么你可以简单地使用一个目录来保存你的所有版本到SVN仓库中。

此命令将退房BRANCH1到您指定的目录(/ BRANCH1-SRCDIR):

svn co SVN-URL/branch1 /branch1-srcdir 

或类似干线:

svn co SVN-URL/trunk /trunk-srcdir 
1

这就是颠覆的工作原理。您通过检查或切换到分支来使用分支。

REPO_ROOT 
├── branches 
│   ├── feature1 
│   └── feature2 
├── tags 
└── trunk 

您不想签出REPO_ROOT。您想结算子目录,如/trunk/branches/feature1。您可以切换到不同的分支这样的:

svn switch ^/branches/feature2 

可以从这样的主干创建一个新的分支:

svn cp ^/trunk ^/branches/newfeature 

这并不意味着文件是在仓库里重复。新分支有点像文件系统中的符号链接,因为它不会重复任何内容,但Subversion有自己的方法来实现这种效率。

如果签出整个REPO_ROOT,内部存储库结构将作为常规文件系统在您的计算机上重新创建,这将是巨大的。人们不这样使用Subversion。你总是检查你想要的分支。

UPDATE

当你创建一个回购协议,将有一个这样的物理目录结构:

$ svnadmin create myrepo 
$ tree myrepo/ -L 1 
myrepo/ 
├── conf/ 
├── db/ 
├── format 
├── hooks/ 
├── locks/ 
└── README.txt 

这有没有关系是版本控制下的结构中,/trunk/branches/tags布局。新的存储库中创建完全空白:

# this outputs nothing 
svn ls file://$PWD/myrepo 

/trunk/branches/tags布局仅仅是一个惯例。如果你决定使用它,你必须创建自己的布局,比如像这样:

$ svn checkout file://$PWD/myrepo mycheckout 
Checked out revision 0. 
$ cd mycheckout/ 
$ mkdir -v trunk branches tags 
mkdir: created directory `trunk' 
mkdir: created directory `branches' 
mkdir: created directory `tags' 
$ svn add * 
A   branches 
A   tags 
A   trunk 
$ svn commit -m 'created standard layout' 
Adding   branches 
Adding   tags 
Adding   trunk 

Committed revision 1. 

在此之后,我只想垃圾的mycheckout目录,然后签出/trunk并添加另一个项目文件提交。

此布局在myrepo的物理目录中不可见。只有当您使用回购浏览器或使用svn ls URL命令浏览回购内容时才会看到它。

您可以在此处详细了解所推荐的版本库布局:

http://svnbook.red-bean.com/en/1.7/svn.tour.importing.html#svn.tour.importing.layout

+0

感谢您的回答。我开始明白发生了什么,但是,我仍然对似乎是这样一个微不足道的概念感到困惑,因为它只是假定每个人都理解它。 如果我使用svnadmin create/usr/tmp/svn/repos我在/ usr/tmp/svn中得到了一个名为repos的subversion版本库。现在我假设您的帖子中的回购对应于REPO_ROOT。该目录现在包含典型存储库中的conf,dbs等stuf。那么我如何重组版本库,使其在回收站下是trunk/tags/branches,conf,dbs等是在trunk下? – user3170250

+0

@ user3170250我在帖子中添加了更多解释。 – janos