SVN:为旧修订创建文件夹
我是修订控制系统的初学者,请原谅 我的项目由两个较小的应用程序组成,它们都位于各自的SVN存储库中。此外,我在这些应用程序之间共享了一个存储库(svn:externals) 当发布新版本时,我想为该版本创建一个文件夹(包括源、文档等)。单个应用程序的存储库应如下所示:SVN:为旧修订创建文件夹,svn,versioning,Svn,Versioning,我是修订控制系统的初学者,请原谅 我的项目由两个较小的应用程序组成,它们都位于各自的SVN存储库中。此外,我在这些应用程序之间共享了一个存储库(svn:externals) 当发布新版本时,我想为该版本创建一个文件夹(包括源、文档等)。单个应用程序的存储库应如下所示: .UI . "old versions" . 1.0 . 2.0 . 2.5 . trunk (current development version 3.0) 因
.UI
. "old versions"
. 1.0
. 2.0
. 2.5
. trunk (current development version 3.0)
因此,我的问题是:
我们在这里使用的一个示例pre-comit挂钩(适用于windows):
@echo off
SET SVNLOOK=C:\Program Files\CollabNet Subversion Server\svnlook.exe
SET GREP=D:\SVN\REPO\hooks\grep.exe
REM Prevent changes to tags.
("%svnlook%" changed -t %2 %1 | "%grep%" "^U.*/tags/") && (echo Cannot commit an update to a tag.>&2 && exit 1)
REM Prevent commits without comments.
("%svnlook%" log -t %2 %1 | "%grep%" "[a-zA-Z0-9]") || (echo You must specify a comment for all actions.>&2 && exit 1)
exit 0
要手动创建标记,请使用如下命令:
svn copy "http://your/repo/UI/trunk" "http://your/repo/UI/tags/v3.0" -m "Tagging v3.0"
当您准备发布时,您将为整个主干创建一个标记。然后从那里释放。如果将来你想回到某个版本,那么你的标签中就有这个历史参考。标签只是在某个时间点指向您的存储库,例如,当您的主干处于rev 35335时为rev 25123。您应该在上浏览Subversion online reference的前几章。这将使您在版本控制和Subversion方面有一个快速而良好的开端 你所做的与颠覆的工作方式非常接近。你有那些目录了吗 在标准的Subversion设置中,您可以设置“tags”、“branchs”和“trunk”目录。有些人将它们设置在他们存储库的根目录下,另一些人将它们设置在每个项目的根目录下 例如:
svn://svn/trunk/proj1
svn://svn/trunk/proj2
svn://svn/branches/proj1/1.2
svn://svn/branches/proj2/3.4
或
我见过的大多数网站都是最后一种方式,但第一种方式也有好处(主要是因为使用了svn:externals
,而且当你签出时,默认情况下你的签出不是trunk
)
您只需调用“旧版本”目录标记
,即可完成以下操作:
svn://svn/UI/tags/1.0
svn://svn/UI/tags/2.0
svn://svn/UI/tags/2.5
svn://svn/UI/trunk
如果你忘了做标签,不要惊慌!Subversion的一大优点是存储库的修订号。这有点像每次提交时都做一个标记。如果在发布时(通常通过查看svn日志
)可以找到修订号,则可以复制该修订以创建标记:
$ svn cp -r1234 svn://svn/UI/trunk svn://svn/UI/tags/2.0
如您所见,您可以使用
svncp
命令来创建标记和分支。顺便说一句,在没有意识到的情况下修改标记是非常容易的。在大多数站点中,它们都有一个预提交钩子,该钩子可以阻止大多数用户在标记目录下进行提交(这意味着您必须创建标记),或者允许用户创建标记(通过svn cp
),但不允许用户在创建标记后修改标记。如果您想看一看,我有一个Perl版本的预提交钩子。很好的预提交脚本!我可能不得不使用它,总有人不发表评论@如果这对你有帮助,请投票和/或接受答案。:)@马丁:您必须为windows获取一份grep.exe
,或者修改脚本以使用find.exe
。不过,你可以随意打断它。谢谢你的回复。我正在使用VisualSVN,它会自动创建那些特定的文件夹。遗憾的是,我太愚蠢了,无法理解他们的意思/读了医生的答案。:)
$ svn cp -r1234 svn://svn/UI/trunk svn://svn/UI/tags/2.0