如何在一个修订版中为多个项目制作标签? 例如,如果需要使用相同的名称进行标记:
svn copy svn://localhost/BigProject/Project1/trunk svn://localhost/BigProject/Project1/tags/1.0.0 --message "1.0.0"
svn copy svn://localhost/BigProject/Project2/trunk svn://localhost/BigProject/Project2/tags/1.0.0 --message "1.0.0"
...
svn copy svn://localhost/BigProject/ProjectX/trunk svn://localhost/BigProject/ProjectX/tags/1.0.0 --message "1.0.0"
但该代码段会进行 X 修订。那么,如何只进行一次修改或如何将所有内容整合在一起呢? 另一个问题是,如何在一个修订版中进行类似的修改? TIA
版本为了更好地理解原因:
答案 0 :(得分:1)
你将在Eclipse中使用Subversive获得一个非常类似于cubanacan帖子的解决方案。
有这样的项目设置:
subproject1
trunk
tags
branches
subproject2
trunk
tags
branches
masterproject
trunk
svn:externals to subproject1/trunk
and subproject2/trunk
masterthings
tags
branches
拥有masterproject Subversive的工作副本将使用当前的外部版本创建一个标记,他们称之为冻结svn:externals。例如:
masterproject
trunk
svn:externals to subproject1/trunk
and subproject2/trunk
masterthings
tags
v1.0
svn:externals to subproject1/trunk at rev. 123
and subproject2/trunk at rev. 234
masterthings at rev. 12345
branches
您只能获得一个标记主项目的修订版。稍后您可以使用修订信息在需要时创建外部分支。
对于指向没有写访问权限的存储库的外部,这也是一个很好的解决方案。
答案 1 :(得分:1)
您可以使用结帐深度较浅的本地工作副本中的svn cp
执行此操作。
您无法使用基于URL的复制命令执行此操作,正如其他答案所指出的那样。 您需要使用工作副本提交来在一个修订版中获取所有这些更改。
以下命令应达到您的目的:
svn co svn://localhost/BigProject --depth=immediates shallow-checkout
cd shallow-checkout
ls # you will have one empty dir for each project: Project1, Project2, ...
svn update --set-depth=immediates *
# Each project dir will now have a "trunk" and a "tags" dir, with no content.
# You do not need to check out all the 'trunk' content, the 'copy' command will still work
# now make the copies in the WC:
svn cp Project1/trunk Project1/tags/1.0.0
svn cp Project2/trunk Project2/tags/1.0.0
svn cp Project3/trunk Project3/tags/1.0.0
svn cp Project4/trunk Project4/tags/1.0.0
# make all the tags in one atomic commit:
svn ci -m 'create 1.0.0 tag for projects 1-4'
虽然正如其他答案所指出的那样,更好的解决方案是使用更传统的SVN布局。
答案 2 :(得分:0)
svn帮助说:
usage: copy SRC[@REV]... DST When copying multiple sources, they will be added as children of DST, which must be a directory. SRC and DST can each be either a working copy (WC) path or URL: WC -> WC: copy and schedule for addition (with history) WC -> URL: immediately commit a copy of WC to URL URL -> WC: check out URL into WC, schedule for addition URL -> URL: complete server-side copy; used to branch and tag All the SRCs must be of the same type.
你可以试试WC - > WC复制然后提交。
修改强>
WC/dir WC/dir2 -> URL
似乎也在起作用
因此,您只需trunk
结帐。
svn copy dir1 dir2 https://mysvnserver/svn/dy_test/tags/1.0.0 -m "tag 1.0.0."
修改2:添加了--parents : make intermediate directories
svn copy --parents dir1 dir2 https://mysvnserver/svn/dy_test/tags/1.0.0 -m "tag 1.0.0."
答案 3 :(得分:0)
我不相信你可以做你想做的事,至少不是在一个版本中。这是您的设置的副作用,它在项目级别而不是在BigProject级别进行分支。您无法以这种方式为整个事物创建一个发布标记。不过,我猜你真正关心的是将所有项目捆绑在一起的简单方法,而不是单一版本。
这是我的建议:
首先执行上面已经显示的内容(一组SVN Copy命令),在所有项目上创建1.0.0标记。然后创建一个您选择的区域(BigProject / tags可能不会产生感觉,给定您已经获得的布局 - 只需选择一个位置。)
为了我自己的目的,我将使用svn:// localhost / Releases / BigProject /,因为你可能希望它与'BigProject'文件夹层次结构不同,否则我只选择/ BigProject / tags。
在其中,创建一个文件夹,其中包含您正在使用的标记的名称,1.0.0。
现在你有:
svn://localhost/Releases/BigProject/1.0.0
结帐该文件夹。添加一个svn属性,svn:externals,内容为:
svn://localhost/BigProject/Project1/tags/1.0.0
svn://localhost/BigProject/Project2/tags/1.0.0
svn://localhost/BigProject/ProjectX/tags/1.0.0
现在您可以签出svn://localhost/Releases/BigProject/1.0.0,让所有项目都在1.0.0标签上。
答案 4 :(得分:-1)
我的感觉是这是不可能的。说实话,我不明白它为什么要这样做。你想要实现什么(除了在同一版本中创建N标签)?或者措辞不同:为什么你需要这个?标签(在某种程度上)的想法是让你不用记住修订版号并允许你“混合”混合版本我认为确实表明你不需要实现你正在尝试的东西。
要获得“标签1.0.0”,您只需结帐Project1..N/tags/1.0.0
,不用担心修订号。
另一方面:您可以为所有项目创建一个标记。那会给你一个修订号。为此,您首先必须以您希望标记的形式创建(本地)工作副本。然后标记这个。但我不确定这是不是你想要的......
不幸的是我不太明白第二个问题。 类似修改是什么意思?彼此相似或类似于第一个问题?
答案 5 :(得分:-1)
基于 Joshua McKinnon 的帖子,我找到了第二个问题的解决方案(关于在一个修订版中提交):
trunk
。svn://localhost/BigProject/trunk
。添加svn属性svn:externals
,内容为:
svn://localhost/BigProject/Project1/trunk Project1
svn://localhost/BigProject/Project2/trunk Project2
...
svn://localhost/BigProject/ProjectX/trunk ProjectX
更新trunk
以使您项目的所有中继位于同一工作副本中。
用于解决第一个问题的版本(在一个版本中标记)。
我研究了许多方法,最简单的解决方案似乎是回购的重组:
BigProject
tags
trunk
Project1
branches
trunk
Project2
branches
trunk
ProjectX
branches
trunk
现在可以使用简单的svn copy
行:
svn copy svn://localhost/BigProject/trunk svn://localhost/BigProject/tags/1.0.0