这个问题可以改为:
如何将特定文件的主干中的单个更改包含到现有TAG中.
一个简单的问题,但我自己无法解决这个问题.
这个概念来自其他SCM工具,您可以在不同的修订版上移动标记,并将其"粘贴"到您需要的确切修订版本.这些其他工具对Tag的内容有本地的理解,SVN将所有内容概括为副本分支.
我在其他公告板和帖子上看到的答案如下,因此已被考虑和拒绝:
好吧,我不会放肆,我会阅读所提供的每一个解决方案,并根据需要重新考虑.
Subversion 中的标签和分支实际上只是目录。它们是什么的概念并未嵌入 Subversion,而是嵌入您的大脑。
正如其他人所说,标签是您存储库在某个时间点的快照,不应更改。如果你打算改变一个标签,它真的应该是一个分支。
例如,
但这些不是分支!你发牢骚。
很好,存储库的建议结构就是:一个建议。除了trunk, tags, 和branches这些可移动标签之外,您还可以添加另一个目录:
$repo/trunk
$repo/branches
$repo/tags
$repo/moveable_tags
Run Code Online (Sandbox Code Playgroud)
现在,您可以将更改的标签放在moveable_tags下,将人们用于发布、快照等的标签放在tags下。
我之前在我工作的一个位置修改了建议的存储库布局。我想从存储库中删除过时的分支和标签,但管理层和开发人员反对。
我说删除这些并不是从存储库中删除它。如果需要,我可以轻松地将它们取回,但是通过删除它们,我从这两个目录中消除了许多不必要的混乱。但是,开发人员对此并不感到安全。当然,我可以找到它们,但是它们可以吗?
相反,我添加了一个obsolete/tags和obsolete/branches目录的trunk,tags和branches目录级别。我没有删除过时的标签和分支,而是移动了它们。tags并且branches没有杂乱,管理人员和开发人员感觉更好,因为他们知道如果需要的话可以找到这些过时的分支和标签。
假设您没有对标签做任何花哨的事情。您将标签用作快照,并且您希望更改和更新的任何内容都是一个分支。有时可能需要更改标签。
而且,Subversion 比大多数其他版本控制系统更擅长处理这个问题。这是因为标签包含其创建和更改的整个历史。在大多数其他版本控制系统中,该标签的历史记录即使保留下来也是二等公民。你可以看到标签。您可以看到该标签下的文件和版本,但您看不到该标签的创建者和更改方式。在 Subversion 下,标签包含它们的整个历史。
要对标签进行更改:
或者,更好的是,针对存储库 URL使用svn cp、svn mv或svn delete,而不是针对工作目录。例如,我为 2.0 版创建了一个标签。突然,我们意识到我们忘记了此版本中将要进行的一项非常重要的更改。您可以这样做,而不是结帐:
$ svn cp -r 23933 -m"This change in this file should have been included in the tag" \
$repo/trunk/foo/src/foo.java $repo/tags/2.0/foo/src/foo.java
Run Code Online (Sandbox Code Playgroud)
当您查看此标签的历史记录时,您现在将看到。
$svn log -v $repo/tags/2.0
------------------------------------------------------------------------
r23945 | david | 2013-04-03 11:21:55 -0400 (Wed, 3 Apr 2013) | xxx lines
Changed paths:
M /tags/2.0/foo/src/foo.java (from /trunk/foo/src/foo.java:23933)
This change in this file should have been included in the tag
------------------------------------------------------------------------
r23932 | david | 2013-04-10 11:18:40 -0400 (Wed, 10 Apr 2013) | 1 line
Changed paths:
A /tags/2.0 (from /trunk:23921)
Created release 2.0
Run Code Online (Sandbox Code Playgroud)
我看到标签是一周前从主干上的修订版 23921 创建的。然后我看到该文件foo.java在一周后从主干上的修订版 23933 更新。
标签和分支在 SVN 中没有区别。所有的区别在于团队遵循的关于如何使用标签和分支的策略。
因此,您可以将更改合并到标签中并提交新修订,就像使用分支一样。可以理解的是,通常您不想这样做,以便“标记”用于发布的文件的确切版本。但如果确实需要,您可以破例一次。
或者,您可以删除标签,然后使用正确的修订版重新创建它。
SVN 书籍的几个链接:“ Tags ”、“ Branch Maintenance ”
补充:所以,听起来这种重新标记并不是一个罕见的、非典型的用例,而是您团队中的常规做法。似乎使用标签,您不仅为文件的特定快照命名,而且希望该名称跟随文件的后续更新,而忘记其以前的位置。另外,您似乎发现分支对您的工作流程不方便。
好吧,我认为没有一种简单干净的方法可以用 SVN 实现你想要的东西。在我看来,最好“拥抱”分支并学习如何有效地使用它们。
| 归档时间: |
|
| 查看次数: |
10857 次 |
| 最近记录: |