我对修订控制系统很初学,所以请原谅我。
我的项目包含两个较小的应用程序,都在自己的SVN存储库中。另外,我在这些应用程序之间共享了一个存储库(svn:externals)。
发布新版本时,我想为该版本创建一个文件夹(包括来源,文档等)。单个应用程序的存储库应如下所示:
.UI
. "old versions"
. 1.0
. 2.0
. 2.5
. trunk (current development version 3.0)
所以我的问题是:
答案 0 :(得分:3)
我们在这里使用的示例pre-comit hook(对于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"
答案 1 :(得分:1)
分支用于主要更改,您不应该在主干上执行(如果您正在与一组开发人员合作)。您创建一个分支,每天将分支合并到分支上以避免以后发生合并冲突。然后,当完成分支上的主要更改时,您将合并回主干。
当您准备好发布时,您可以创建整个主干的标记。然后从那里释放。如果将来您想要回到某个版本,那么您的标签中会有该历史参考。标签只指向某个时间点的存储库,例如例如,当你的行李箱在转速为35335时,转速为25123。
答案 2 :(得分:1)
您应该在http://svnbook.com处查看Subversion在线参考的前几章。这将为您提供版本控制和Subversion的快速良好开端。
你正在做的事情与Subversion的工作方式非常接近。你有那些目录吗?
在标准的Subversion设置中,您可以设置“标签”,“分支”和“主干”目录。有些人将这些设置在他们的存储库的根目录上,其他人则将它们设置在每个项目的根目录下。
例如:
svn://svn/trunk/proj1
svn://svn/trunk/proj2
svn://svn/branches/proj1/1.2
svn://svn/branches/proj2/3.4
或
svn://svn/proj1/trunk
svn://svn/proj2/trunk
svn://svn/proj1/branches/1.2
svn://svn/proj2/branches/3.4
我见过的大多数网站都是最后一种方式,但是第一种方式可以带来优势(主要是因为使用svn:externals
而且当你结帐时,你的结帐不是默认情况下调用trunk
。
您需要做的就是调用“旧版本”目录tags
并完成所有设置:
svn://svn/UI/tags/1.0
svn://svn/UI/tags/2.0
svn://svn/UI/tags/2.5
svn://svn/UI/trunk
如果忘记制作标签,请不要惊慌! Subversion的一大优点是存储库的版本号。这有点像每次提交时制作标签。如果您在发布版本时可以找到版本号(通常是通过查看svn log
),则可以复制该版本以创建标记:
$ svn cp -r1234 svn://svn/UI/trunk svn://svn/UI/tags/2.0
如您所见,您使用svn cp
命令创建标记和分支。顺便说一句,在没有意识到的情况下修改标签非常容易。在大多数站点中,它们都有一个预提交钩子,可以阻止大多数用户在tags目录下进行提交(这意味着你必须创建标签),或者它们允许用户创建一个标签(通过svn cp
)但是不要让用户在创建标签后对其进行修改。如果你想查看它,我在http://dl.dropbox.com/u/433257/new_svn_hooks.zip有一个Perl版本的预提交钩子。