客户有一个结构/ trunk / branches / tags的SVN存储库。现在,我们想对旧版本进行修复。但是旧版本的状态仅在标签/旧版本中。我可以制作一个标签/旧版本的标签,然后进行修复,然后提交新标签吗?还是有其他方法可以做到这一点?
答案 0 :(得分:2)
tunk / branches / tags 布局只是一个约定,没有什么可以阻止您使用标签。但是惯例意味着标记是只读的,您无意将更改提交到现有标记中。
从您的描述中,我了解到/tag/oldversion
指向/trunk
的一个较旧的修订版,或者指向/branches
中一个不再存在的子目录。我建议您创建一个新分支以在旧版本中进行常规工作,完成后,创建一个新标签。
启动浏览器,右键单击/tag/oldversion
,然后选择“显示日志”。
单击最新版本,希望是创建标记的版本。在下面的窗格中,记下“从路径复制”和“修订”。这就是标签指向的源URL。例如,/trunk
处的r123
。
返回浏览器,单击“修订”旁边的“ HEAD”按钮,然后使用对话框选择旧的修订。
现在 Repo-browser 正在显示r123,右键单击/trunk
,选择“复制到...”,然后编辑建议的路径以创建新分支,例如/branches/legacy
或/branches/1.x
或任何适合您的内容。不用担心,您可以在提交之前在“输入日志消息”对话框中查看更改。
现在,您有了一个新的功能齐全的分支,该分支指向您的旧代码。您可以签出该分支并开始编码。在发布时从中创建标签。
(是的,使用命令行可以使整个过程更快。)
答案 1 :(得分:0)
您可以在存储库中的任何目录下创建分支/标记。通常不是在标签上使用惯例进行操作,但这也不是闻所未闻的-尤其是由于您已经详细说明了需要在该特定标签上进行修补的位置的原因。
如果愿意,可以直接在加标签的分支中进行更改。如果您使用的是TortoiseSVN,则可能会看到“这似乎是一个标签,确定要进行此更改吗?”这样的内容。 (很可能是这样-忘记了我的脑海中的消息),然后继续。
您已经提到了替代方案;您可以使另一个svn copy
(svn copy
是在分支/标记目录时运行的 actual 命令-分支和标记之间的差异为零根据惯例)并在其中进行更改(您将在上方看到相同的消息)。
例如:
Repo
|_trunk
|_branches
|_tags
|_oldversion // svn copy (branch) this directory
|_newversion // to create this directory and apply the fix
如果您出于跟踪目的需要保留以前的标签,则我希望使用第二种方法。