14

我知道如何在颠覆中使用标签。每次达到发布里程碑时,我都会创建一个标签。

我不太明白它们是如何工作的。

标签是否只是一个副本,由我指定的任何修订版制成?或者是一个标签更像是一个参考,内部颠覆只是说GO TO /trunk/project/ Revision 5或其他什么。

创建标签 ( svn copy) 的命令似乎暗示它是一个副本,但我看到其他人写道,颠覆并没有真正复制任何东西。

假设我只转储了存储库的 HEAD 修订版。除了标签,我不关心任何历史。这些标签是否与 Head 修订的其余部分一起被丢弃?

最后,这一切只是我不想知道的编程魔法。

4

6 回答 6

12

是的,svn 副本(无论您将其视为标签、分支还是在主干中复制文件)都是一样的。SVN 将在内部创建一个指向该版本的源位置的指针。如果您随后对副本进行更改(如果它是主干中的分支或复制文件,您可能会这样做,但不应该对标签进行更改),SVN 将只存储更改的内容,而不是创建一个全新的复制。

于 2008-09-02T16:45:50.567 回答
4

Subversion 书以完整且免费的形式在线发布: http: //svnbook.red-bean.com/en/1.4/svn-book.html#svn.branchmerge.tags

是的,你基本上做了一个 svn 副本。Subversion 足够聪明,可以使用一种写时复制风格的机制来节省空间并最大限度地减少传输时间。

于 2008-09-02T16:39:13.797 回答
3

对,标签只是一个副本:

svn copy trunk tags/BLAH

当人们说 SVN 并没有真正复制任何东西时,他们的意思是存储库不需要复制数据。它使用类似于符号链接的东西来跟踪副本。

于 2008-09-02T16:36:02.430 回答
2

TortoiseSVN 帮助很好地解释了它:

Subversion 没有用于分支或标记的特殊命令,而是使用所谓的“廉价副本”。廉价副本类似于 Unix 中的硬链接,这意味着不是在存储库中制作完整的副本,而是创建一个内部链接,指向特定的树/修订。因此,分支和标签的创建速度非常快,并且几乎不占用存储库中的额外空间。[...] 如果您修改从分支创建的工作副本并提交,那么所有更改都会转到新分支而不是主干。仅存储修改。其余的仍然是便宜的副本。

于 2014-01-23T17:34:14.990 回答
1

标签是在使用标签时对一组修订号的引用——它在内部与分支或副本相同。

于 2008-09-02T16:36:46.610 回答
0

一个例子:

$ svn copy https://jorgesysgr.com/svn/AndNews/branches \
           https://jorgesysgr.com/svn/AndNews/tags/release-1.1 \
           -m "release 1.1 Android News."

更多信息::创建一个简单的标签

于 2013-08-23T16:30:59.240 回答