Svn 如何在Subversion中删除文件夹的1个修订版
我的存储库中有几个项目,每个项目都有自己的文件夹。 是否可以在不更改任何其他内容的情况下删除其中一个项目的最后修订版 示例:项目A的最新版本已提交。50其他项目的工作仍在继续,存储库现在处于rev。六十 现在,A的用户返回并请求删除上一版本的更改,因为这些更改不适合他。他想回到以前的版本,所有进一步的修改都应该从那里开始 在这一点上,我想rev。50消失,这样项目A就可以像rev。50年没有发生过 我能看到的唯一方法是创建一个分支,然后从现在开始在该分支上工作。但随着时间的推移,这只会创建许多分支,项目的历史会变得杂乱无章Svn 如何在Subversion中删除文件夹的1个修订版,svn,tortoisesvn,Svn,Tortoisesvn,我的存储库中有几个项目,每个项目都有自己的文件夹。 是否可以在不更改任何其他内容的情况下删除其中一个项目的最后修订版 示例:项目A的最新版本已提交。50其他项目的工作仍在继续,存储库现在处于rev。六十 现在,A的用户返回并请求删除上一版本的更改,因为这些更改不适合他。他想回到以前的版本,所有进一步的修改都应该从那里开始 在这一点上,我想rev。50消失,这样项目A就可以像rev。50年没有发生过 我能看到的唯一方法是创建一个分支,然后从现在开始在该分支上工作。但随着时间的推移,这只会创建许多分
对于这种情况,什么是好的解决方案?简短的回答,您没有。要真正从subversion回购中删除提交是非常困难的。故意这样做 实际上,要做的事情是将该目录还原回修订版49,然后将其提交为修订版61 关键的是,您只恢复有问题的目录,而不是整个签出 以下是相关的SVN图书链接:
您需要一个形式为“svn merge-r 60:50”的命令xxx://path“您返回并以文件在修订版50时的状态获取文件(使用“更新到修订版”),然后将其与当前版本重新合并,如果您希望保留任何后续更改。否则,您可以对修订版进行更新,然后重新提交该文件 没有自动的方法可以做到这一点,但只需手工做一点工作,这是可行的。这就是版本控制的魔力
基本版
修订版。当尝试提交更改时,subversion会抱怨文件和文件夹已过时
您希望恢复到修订版或从修订版恢复更改功能,而不是“更新到修订版”。如果您希望更改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"
如果您有一个要撤消的更改,而不涉及在同一文件夹上发生的任何其他更改,则所有其他答案都是好的 如果我正确地理解了您的用例,您就不必担心项目A上的其他更改,因为没有任何更改。您只需要让项目A回到修订版50之前的状态。如果是这样的话,那么有一个更简单的解决方案(与合并和冲突解决相比,痛苦要小得多): 这基本上是从存储库中“删除”项目A的当前负责人(它仍在历史记录中),然后复制项目的旧副本(在有问题的提交之前)
此过程非常透明,如果有人签出(版本50或更高版本)进行了
svn更新
,他们将被更新到最新版本,而不会引起任何麻烦。没有合并或其他任何问题。如果你这样做,你将失去在50-60版中所做的一切。我相信这不是OP想要的!你可以只还原你感兴趣的单个项目,不需要做全部工作。你可以还原单个文件,或目录及其所有子项。恢复后,只需按照Paul所说的执行提交。无需在合并文件时乱来。同样,如果您还原该文件,您将丢失自该修订版以来在该文件中更改的任何其他内容!因此,需要查看更改的内容并进行合并!SVN图书中链接到的章节实际上很好地解释了这一点。这个问题的正确答案取决于51-60版是否包含了对您的文件所做的更改,这些更改是可取的并且应该保留,或者后续的修订是否是针对不相关的文件并且无关紧要。在前一种情况下,您需要合并,在后一种情况下,您可以恢复。通过“恢复”,我相信SVN术语是“更新到修订版”。实际上,我们想要的是“SVN合并-r 60:50路径”。请注意,SVN合并-c-49 a/trunk/
是合并的快捷方式,如果您只删除一个修订版(还要注意修订号前的否定)。
svn del full://url/to/project/A
svn cp full://url/to/project/A@49 full://url/to/project/A