如何在Subversion中删除1个文件夹的修订版

时间:2009-09-11 07:06:53

标签: svn tortoisesvn

我的存储库中有几个项目,每个项目都有自己的文件夹。 是否可以删除其中一个项目的最新修订而不改变其他任何内容?

示例:项目A的最新版本已提交创建rev。 50.关于其他项目的工作正在进行,存储库现在处于转速状态。 60。

现在,A的用户回来并请求删除上一版本的更改,因为它们不适合他。他想回到之前的版本,所有进一步的改变应该从那里开始。

此时我想要转。 50消失,以便项目A可以像转速一样继续。 50从未发生过。

我能看到的唯一方法是创建一个分支,从现在开始在该分支上工作。但随着时间的推移,这只是创造了许多分支,而且项目的历史变得杂乱无章。

这种情况有什么好的解决方案?

5 个答案:

答案 0 :(得分:9)

简短的回答,你没有。实际上很难从subversion repo中删除提交。故意这样。

实际上,要做的是将该目录恢复为修订版49,然后将其提交为rev 61。

关键是你只回复有问题的目录,而不是整个结账。

以下是相关的SVN图书链接:http://svnbook.red-bean.com/en/1.0/svn-book.html#svn-ch-4-sect-4.2

你想要一个“svn merge -r 60:50 xxx:// path”形式的命令

答案 1 :(得分:5)

  1. 进行更新以确保您的工作副本是最新的。确保您的工作副本干净,无需等待修改。
  2. 右键单击根文件夹 你的项目的工作副本和 “show log”
  3. 选择(使用ctrl / shift选择 多个)您想要的修订 撤消
  4. 右键单击选定的修订版并“还原更改 这些修订“
  5. 检查修改 撤消操作已经在你的 工作副本。解决任何冲突 如果有必要的话。
  6. 提交修改
  7. Gabriel Hurley的回答是你当前已经接受了没有意义:在进行“修订更新”之后无法提交。该操作将回滚您的工作副本所基于的BASE修订版。在尝试提交更改时,subversion会抱怨文件和文件夹已过期。

    您希望还原为修订版还原版本功能的更改,而不是“更新到修订版”。

答案 2 :(得分:2)

您返回并将文件置于修订版50所处的状态(使用“更新到修订版”),然后将其与当前版本重新合并,如果您有任何后续更改保持即可。否则,您只需更新修订版,然后重新发送文件。

没有自动的方法可以做到这一点,但手工做一点工作是可行的。这是版本控制的魔力。

答案 3 :(得分:1)

如果你想要改变51:60

svn merge -r 50:49 A/trunk/
#the most painful experience in your life
svn commit -m "reverting to rev49"

请注意,这通常不起作用。

如果你想要改变51:60,手动方式

svn diff -r 50:49 A/trunk/
#review changes from the diff and apply them. or patch.
svn commit -m "reverting to rev49"

答案 4 :(得分:1)

如果您想要撤消更改,而不触及在同一文件夹上发生的任何其他更改,则所有其他答案都很好。

如果我正确理解您的用例,您不必担心项目A的其他更改,因为没有。您只是希望项目A回到修订版50之前的状态。如果是这种情况,那么有一个更简单的解决方案(并且在进行合并和解决冲突时更少悲伤):

svn del full://url/to/project/A
svn cp full://url/to/project/A@49 full://url/to/project/A

这基本上“从存储库中删除”项目A的当前HEAD(它仍在历史中),然后复制项目的旧副本(从有问题的提交之前)。

此程序非常透明,如果结帐A(来自修订版50或更高版本)的人执行svn update,则会更新到最新版本,而不会大惊小怪。没有合并与任何东西打架。