我在使用发布标签签出文件时遇到了一些麻烦,希望有人可以提供帮助.
基本上我的存储库是这样构造的
module1
- src
- jsp
- conf
module2
- src
- jsp
- conf
Run Code Online (Sandbox Code Playgroud)
版本可以包括module1或module2或两者的更改.有几个开发人员可以处理任何模块中的任何文件.
要处理新版本,我们使用以下命令检出最新版本(例如LIVE-REL-2.4)
cvs checkout –r “LIVE-REL-2.4” moduleName
Run Code Online (Sandbox Code Playgroud)
请注意,我们不会从trunc中查看.这样做的原因是,如果您从trunc结帐,则包含其他开发人员已签入但您不想包含在下一版本中的文件.
在我们检查了最新版本之后,我们进行了更改并检查了新文件.对于交付,我们使用特定于错误的标记标记我们签入的所有新文件.
cvs tag BUG434 <file1>
cvs tag BUG435 <file2>
Run Code Online (Sandbox Code Playgroud)
然后,我们将新标签应用于当前版本中的每个文件.
cvs tag – r “LIVE-REL-2.4” “LIVE-REL-2.5”
Run Code Online (Sandbox Code Playgroud)
然后,我们为我们签入的新文件添加新的发布标记
cvs tag –r “BUG434” “LIVE-REL-2.5”
cvs tag –r “BIG435” “LIVE-REL-2.5”
Run Code Online (Sandbox Code Playgroud)
以上内容确保新版本将包含"最新发布的版本"中的所有文件以及我们希望包含在发行版中的错误修复.要检查新版本,我们就这样做
cvs checkout –r “LIVE-REL-2.5” moduleName
Run Code Online (Sandbox Code Playgroud)
上面的结账是经过测试和交付的.关于这个过程是否真的有效,但是有点混乱.我们突然有人抱怨他们无法检查任何新文件,如果他们通过标签签出.生成的错误如下所示
sticky tag `LIVE-REL-2.5' for file `DatabaseFacade.java' is not a branch
Run Code Online (Sandbox Code Playgroud)
我一直在阅读这个错误,但我还没有找到解决方案.从我从谷歌搜索收集到的,可用的解决方案如下
这不适合我,因为我不想释放"头"上的变化.我想要发布的修订版是上一版本的更新版本.'HEAD'上的那个可能是有人更新过的,并且不会在下一个版本中发布.
我希望我能做到这一点,但我似乎无法说服我的任何老板我们应该支持分支.我们不支持它,因为它显然使事情变得比它们需要的复杂得多.
这可能会起作用,因为每当有新版本时我就可以从'HEAD'结帐.
现在我的问题真的如下,
任何帮助将不胜感激.
您问题的自然解决方案是分支.但是,如果您不经常使用此方案并且决定避免分支,则可以将所有版本放在HEAD上并相应地设置标记.
假设您有以下版本的DatabaseFacade.java:
1.1: original version, which has the bug
1.2: version with new feature, which you do not want to release yet
Run Code Online (Sandbox Code Playgroud)
你检查了1.1并修复了你的bug,但是 - 唉 - 你不能提交它,因为你是一个粘性标签.要解决它,请执行以下操作(我没有测试代码,但它应该说明这个想法):
# backup file with fixes
mv DatabaseFacade.java DatabaseFacade.java-fixed
# revert to HEAD: remove the sticky-ness
cvs update -A DatabaseFacade.java
# get revision 1.1 (non sticky)
cvs update -p -r1.1 DatabaseFacade.java > DatabaseFacade.java
# commit it
cvs ci -m "reverted to revision 1.1." DatabaseFacade.java
# commit your file with fixes
mv DatabaseFacade.java-fixed DatabaseFacade.java
cvs ci -m "fixed BUG434" DatabaseFacade.java
# restore the latest development version to HEAD
cvs update -p -r1.2 DatabaseFacade.java > DatabaseFacade.java
cvs ci -m "reverted to revision 1.2." DatabaseFacade.java
# also fix the bug in the latest development version
cvs ci -m "fixed BUG434" DatabaseFacade.java
Run Code Online (Sandbox Code Playgroud)
所以现在DatabaseFacade.java将具有以下版本:
1.1: original version, which has the bug
1.2: version with new feature, which you do not want to release yet
1.3: same as 1.1
1.4: your bugfix to 1.1
1.5: same as 1.2
1.6: version with new feature and bugfix
Run Code Online (Sandbox Code Playgroud)
现在,您可以为新版本标记版本1.4:
cvs tag -r 1.4 LIVE-REL-2.5 DatabaseFacade.java
Run Code Online (Sandbox Code Playgroud)
当你采用这种方法时,你应该确保没有你的同事开发人员在cvs update
"玩历史记录"时运行,即1.3或1.4是最新的HEAD.
切换到Subversion没有任何好处.它不会帮助你解决这些问题.如果您正在认真考虑使用其他版本管理系统,则应该查看Mercurial或任何其他分布式版本管理系统. 在Mercurial中,合并是无痛且容易的,因此分支是常见且无害的.
顺便说一下:由于您使用bug-identifier-tags(例如"BUG434")标记新文件,因此您可能还希望使用相同的标记标记与该bugfix相关的任何现有文件.
归档时间: |
|
查看次数: |
9493 次 |
最近记录: |