我知道如何在Subversion中使用标签。 每当到达发行里程碑时,我都会创建一个标签。
我不太了解它们是如何工作的。
标签是从我指定的任何修订版本制作的副本吗? 还是标记更像参考,内部颠覆只是说GO TO /trunk/project/ Revision 5或其他内容。
创建标记(svn copy)的命令似乎暗示它是一个副本,但是我已经看到其他人写道,subversion并没有真正复制任何内容。
假设我仅转储存储库的HEAD版本。 除了标签,我不在乎任何历史。 这些标签是否与Head修订版的其余部分一起被丢弃?
最后,这就是我真正不想知道的只是编程魔术。
是的,svn副本(无论您是将其视为标签,分支还是在主干中复制文件)都一样。 SVN将在内部创建指向该修订版中源位置的指针。如果您随后对副本进行更改(如果它是主干中的分支或复制的文件,则可能会执行此操作,但不应对标签执行此操作),SVN只会存储更改的内容,而不是创建一个全新的副本复制。
Subversion图书以完整免费的形式在线上发表:
http://svnbook.red-bean.com/en/1.4/svn-book.html#svn.branchmerge.tags
是的,您基本上可以进行svn复制。 Subversion足够聪明,可以执行写时复制样式机制,以节省空间并最小化传输时间。
是的,标签只是一个副本:
1
| svn copy trunk tags/BLAH |
当人们说SVN并没有真正复制任何内容时,它们意味着存储库不需要复制数据。它使用类似于符号链接的方式来跟踪副本。
TortoiseSVN帮助很好地解释了它:
Subversion does not have special commands for branching or tagging, but uses so-called"cheap copies" instead. Cheap copies are similar to hard links in Unix, which means that instead of making a complete copy in the repository, an internal link is created, pointing to a specific tree/revision. As a result branches and tags are very quick to create, and take up almost no extra space in the repository.
[...]
If you modify a working copy created from a branch and commit, then all changes go to the new branch and not the trunk. Only the modifications are stored. The rest remains a cheap copy.
标签是对使用该标签时的修订号集的引用,它在内部与分支或副本相同。
一个例子:
1 2 3
| $ svn copy https://jorgesysgr.com/svn/AndNews/branches \\
https://jorgesysgr.com/svn/AndNews/tags/release-1.1 \\
-m"release 1.1 Android News." |
更多信息:创建一个简单标签