我知道如何在subversion中使用标签。每次进入发布里程碑时,我都会创建一个标记。
我不太明白它们是如何工作的。
标签只是一个副本,是根据我指定的修订版制作的吗?或者标签更像是一个参考,其中内部颠覆只是说GO TO /trunk/project/ Revision 5
或其他什么。
创建标记(svn copy
)的命令似乎意味着它是一个副本,但我看到其他人写道,subversion并没有真正复制任何内容。
假设我只转储存储库的HEAD版本。除了标签,我不关心任何历史。这些标签是否与Head版本的其余部分一起转储?
最后,这一切只是编程魔术,我真的不想知道。
答案 0 :(得分:12)
是的,svn副本(无论您将其视为标记,分支还是在主干中复制文件)都是一样的。 SVN将在内部创建指向该修订版的源位置的指针。如果你随后对副本进行了更改(如果它是一个分支或者在trunk中复制的文件你可能会做,但不应该对标签做),SVN只会存储更改的内容,而不是创建一个全新的副本。
答案 1 :(得分:4)
Subversion的书籍是完整且免费的在线形式: http://svnbook.red-bean.com/en/1.4/svn-book.html#svn.branchmerge.tags
是的,你基本上做了svn副本。 Subversion非常智能,可以执行写时复制样式机制,以节省空间并最大限度地缩短传输时间。
答案 2 :(得分:3)
是的,标签只是一个副本:
svn copy trunk tags/BLAH
当人们说SVN没有真正复制任何东西时,他们意味着存储库不需要复制数据。它使用类似于符号链接的东西来跟踪副本。
答案 3 :(得分:2)
TortoiseSVN help解释得非常好:
Subversion没有用于分支或标记的特殊命令,而是使用所谓的“廉价副本”。廉价副本类似于Unix中的硬链接,这意味着不是在存储库中创建完整副本,而是创建指向特定树/修订版的内部链接。因此,分支和标签可以非常快速地创建,并且几乎不占用存储库中的额外空间。 [...] 如果修改从分支创建的工作副本并提交,则所有更改都将转到新分支而不是主干。仅存储修改。其余的仍然是一个廉价的副本。
答案 4 :(得分:1)
标签是对标签拍摄时的一组修订号的引用 - 它与内部的分支或副本相同。
答案 5 :(得分:0)
一个例子:
$ svn copy https://jorgesysgr.com/svn/AndNews/branches \
https://jorgesysgr.com/svn/AndNews/tags/release-1.1 \
-m "release 1.1 Android News."
更多信息:: Creating a Simple Tag