Svn subversion:在没有工作副本的情况下合并

Svn subversion:在没有工作副本的情况下合并,svn,merge,Svn,Merge,我想从命令行svn恢复错误的提交。通常的建议是将提交反向合并到工作副本中,然后提交更改。在我的例子中,错误的提交是一个输入错误的svn import,它破坏了我的存储库的一部分,而我在其他任何地方都没有签出它。我可以检查受影响的目录,然后按照通常的建议进行操作,但是如果我可以完全使用URL反向合并,而不使用工作副本,那将更加优雅。这可能吗?不,你不能简单地通过URL进行合并,因为这意味着合并时甚至看不到合并结果——这是一种非常糟糕的做法 有一种情况下,这不会很糟糕: 有人在修订版455(当前版

我想从命令行svn恢复错误的提交。通常的建议是将提交反向合并到工作副本中,然后提交更改。在我的例子中,错误的提交是一个输入错误的
svn import
,它破坏了我的存储库的一部分,而我在其他任何地方都没有签出它。我可以检查受影响的目录,然后按照通常的建议进行操作,但是如果我可以完全使用URL反向合并,而不使用工作副本,那将更加优雅。这可能吗?

不,你不能简单地通过URL进行合并,因为这意味着合并时甚至看不到合并结果——这是一种非常糟糕的做法

有一种情况下,这不会很糟糕:

  • 有人在修订版455(当前版本)中做了一个可怕的巨大更改。您可以轻松地将存储库恢复到版本454,而不用担心太多。没有必要去看最终结果会是什么
然而,想象一下:

  • 有人在修订版455中做了一个可怕的巨大改变。目前的版本是460。Subversion现在有五个新的变化。您可以像在上一个示例中那样撤销变更集455,但不会得到修订版454。取而代之的是,您得到的是修订版456到460中所做的修改后的修订版454。其中一些更改可能独立于所做的mess修订455。其中一些更改可能是由于第455版中所做的更改

我知道现在有一大堆乱七八糟的事情需要清理,但之所以会出现这种乱七八糟的情况,是因为有人通过svn import命令提交了更改,而不必在提交之前先验证它们。这就是我不鼓励使用svn merge命令的原因。

您有权访问物理svn repo吗?如果是这样,最简单的方法就是使用
svnadmin dump
/
restore
从历史记录中删除错误提交。好吧,这是一个巨大的存储库,因此转储将花费很长时间,除非我能以某种方式转储/加载最近的几个修订。到底有多大?您总是可以将
转储
输出通过管道传输到
加载
,然后它甚至不会被具体化。1 GB/min或更高应是可行的。仔细想想,我的回购协议并没有那么大——总共只有3.62亿美元。在我的例子中,用
--depth=immediates
执行稀疏签出(请参阅)就足够了,然后执行适当的删除和提交。我可以接受这样一个答案,即如何使用
svnadmin dump
load
删除存储库中的最后一次提交,尽管…
svnadmin dump
有一个
-r
开关,在这里很方便。对不起,我没有时间写完整的答案。