管理SVN提交和修订

时间:2011-04-15 14:42:02

标签: svn

我公司不使用branches / tags / trunk的东西,基本上我们所有的开发人员都在使用trunk。我现在有一个问题,我做了一些更改并提交了它们,现在必须将它们还原。然而,在此期间,另一位开发人员做了一些无关的更改。所以我们的提交结构看起来像:

  • 103:Joe Blow - 一些无关的变化
  • 102:Wayne - 对模块A的更改
  • 101:约翰史密斯 - 改变了等等等等。

我在#101上使用“revert to this revision”来撤消我的更改(#102)但现在我需要将它们提交回来,因为#103包含了它们。我没有使用过很多SVN功能,所以有没有办法将我的新更改提交到#103而不会覆盖它并强制“Joe Blow”重新发送他的更改,而不是进入#103并手动添加他的所有更改?

我正在努力推动我们开始使用分支机构,但我认为这里没有人真正理解它们,所以我怀疑它会被实施。

3 个答案:

答案 0 :(得分:3)

您应该能够进行“反向合并”(merge -r我认为,虽然我不太熟悉SVN的命令行语法)修订版102.这将取消正好的变化那次修改。

这与恢复不同之处在于它只关心101和102之间所做的更改,而忽略了合并中103的更改。所以103应该保持不变。 (当然,假设它不依赖于102的变化。)

应该快速确认合并,因为本地更改的差异应该理想地匹配从101到102的差异,只是交换。

答案 1 :(得分:1)

----编辑,因为它似乎想要撤消你的更改,最初我以为你想重新申请它们---

你可以反方向做一个svn diff。这将创建一个补丁文件,用于“撤消”您的更改。生成反向差异的关键是在命令行中切换修订号,所以

svn diff -r101:102 ...

创建一个diff,它将添加项目以从101生成102,而

svn diff -r102:101

创建一个diff,它将从102中删除项目以生成101。

---原帖如下---

使用svn diff在rev 101和102之间创建diff文件,然后将存储库更新为rev 103,并通过补丁实用程序将更改合并。然后,您的提交104将读取类似“在提交103中还原的提交102中的已读更改”。

经常撤消其他变更的人必须通过提高对其行为的认识以及与之相关的成本来处理。如果他们不在乎,那么你将不得不权衡与其他人相处的成本以及获得足够福利的可能性。

答案 2 :(得分:0)

如果您在TortoiseSVN中,则可以使用修订日志,并通过从上下文菜单中选择“从此修订还原更改”,然后提交,仅还原在特定修订中所做的更改。