使用commit -r致力于不同的分支

时间:2010-04-30 06:27:30

标签: version-control cvs

CVS是否允许将文件提交到与签出文件不同的分支?手册页some sites表示我们可以执行cvs ci -r branch-1 file.c,但会出现以下错误:

  

cvs commit:`file.c'的最新检查失败。
  cvs [commit aborted]:首先纠正上面的错误!

我做了cvs diff -r branch-1 file.c以确保BASEbranch-1中的file.c内容确实相同。

我知道我们可以使用cvs co -r branch-1手动签出,将主分支合并到它(并修复任何合并问题),然后办理登机手续。问题是有很多分支机构我想用脚本自动化一些东西。 This thread似乎表明-r已被删除。有人可以证实吗?

如果不支持ci -r,我正在考虑采取以下措施:

  • 确保分支版本和基本版本与cvs diff
  • 相同
  • 签入当前分支
  • 在临时文件中保留文件的副本
  • 对于每个分支:
    • 使用-r
    • 从分支机构退房
    • 将文件替换为临时文件
    • 签入(它将成为分支,因为-r是粘性的)
  • 删除临时文件

替换部分听起来像是在欺骗我 - 你能想到可能发生的任何潜在问题吗?我应该注意什么?有没有其他方法可以自动化这个过程?

1 个答案:

答案 0 :(得分:2)

请注意,即使diff显示零输出,文件也可能不是最新的。例如,如果您在一次提交中向文件添加一行文本并在下一次提交中将其删除,则沿两次修订的路径零差异。

至于commit -r -issue。对我来说,这似乎是一个实验性功能,实际上只需使用以下内容就可以了:

cvs update -r <branch> <file>
cvs update -j <ver> -j <ver> <file>
cvs commit <file>

此外,将单个提交以编程的方式传播到所有其他分支,就像你建议的方式一样有点可疑,因为你通常需要相当多的人脑来解决冲突。