什么是从SVN恢复已删除文件的正确方法?

我从回购中删除了一个文件,现在想把它放回去。 我能弄清楚的最好的是:

  • 在删除之前更新到修订版本
  • 将文件复制到别处
  • 更新到头
  • 将文件复制回来
  • 添加它们
  • 承诺

这只是闻起来不好,它放弃了所有的历史启动。 有一个更好的方法来做到这一点。 我已经看了SVN书,但没有find任何东西,现在正在看SVN标签列表。

使用svn merge:

svn merge -c -[rev num that deleted the file] http://<path to repository> 

举个例子:

 svn merge -c -12345 https://svn.mysite.com/svn/repo/project/trunk ^ The negative is important 

对于TortoiseSVN(我认为…)

  • 右键单击资源pipe理器,转到TortoiseSVN – >合并…
  • 确保select“合并一系列修订版本”,然后单击“下一步”
  • 在“修订范围内的合并”文本框中,指定删除该文件的修订版
  • 选中“反向合并”checkbox,点击下一步
  • 点击合并

但是,这完全没有经过testing。


OP编辑 :这适用于我的版本的TortoiseSVN(旧版没有下一个button)

  • 去东西被推迟的文件夹
  • 右键单击资源pipe理器,转到TortoiseSVN – >合并…
  • 在“ 发件人”部分input进行删除的修订
  • 在“ 到”部分input修改前的删除。
  • 点击“合并”
  • 承诺

诀窍是向后合并。 荣誉sean.bright指引我在正确的方向!


编辑:我们正在使用不同的版本。 我描述的方法与我的版本的TortoiseSVN完美的工作。

另外值得注意的是,如果在提交中存在多个更改,则您将反向合并,则在提交之前完成合并后,您将需要还原其他更改。 如果你不这样做,那些额外的改变也会被颠倒过来。

如Sean Bright所build议的那样进行svn合并的问题在于,重新引入与删除相同的修订中所做的其他更改。 svn副本是一个更有针对性的操作,只会影响被删除的文件。

使用龟SVN你可以复制一个文件已经从您的工作副本目录和从以后的SVN版本,通过svn副本删除,如下所示:

  • 浏览到以前包含该文件的工作副本文件夹。
  • 右键单击资源pipe理器中的文件夹,转到TortoiseSVN – >显示日志。
  • 右键单击刚删除文件的版本号之前的版本号,然后select“浏览版本库”。
  • 右键单击删除的文件,然后select“复制到工作副本…”并保存。

被删除的文件现在将在工作副本文件夹中。 要将其重新添加回SVN,请右键单击已恢复的文件并selectSVN Commit。

注意:此方法将保留已恢复文件的以前的历史logging,但要查看TortoiseSVN日志中的以前历史logging,需要确保在“日志消息”对话框中取消选中“停止复制/重命名”。

为了完整性,这是你会发现在svn书,你知道要寻找什么。 这是你已经发现的:

撤消更改

复活已删除的项目

同样的事情,从这本书的最近(和详细)版本:

撤消更改

复活已删除的项目

使用龟SVN复制function恢复提交的更改:

  1. 右键单击包含已删除文件/文件夹的父文件夹
  2. select“显示日志”
  3. select并右键单击更改/删除完成之前的版本
  4. select“浏览存储库”
  5. select需要恢复的文件/文件夹并右键单击
  6. select“复制到”将文件/文件夹复制到头版本

希望有所帮助

我似乎总是使用svn副本作为服务器操作,所以不知道它是否适用于两个工作path。

以下是将删除的文件恢复到本地项目工作副本的示例:

 svn copy https://repos/project/modules/module.js@3502 modules/module.js 

在项目目录中时。 这也适用于恢复整个目录。

如果你正在使用Tortoise SVN,你应该能够将修改版本从修订版本恢复到你的工作副本(有效地执行反向合并),然后做另一个提交重新添加文件。 遵循的步骤是:

  1. 浏览到您删除文件的工作副本中的文件夹。
  2. 转到回购浏览器。
  3. 浏览到您删除文件的位置。
  4. 在更改列表中find您删除的文件。
  5. 右键单击该文件并转到“恢复此版本的更改”。
  6. 这将恢复文件到您的工作副本,保持历史。
  7. 提交文件将其添加回您的存储库。

随着乌龟SVN :

如果尚未提交更改,则可以在删除文件或目录的父文件夹上执行还原操作。

如果您已经提交了已删除的文件,则可以使用存储库浏览器,转到文件仍然存在的修订版本,然后使用上下文菜单中的命令复制到…。 input工作副本的path作为目标,删除的文件将从存储库复制到工作副本。

我已经能够恢复文件,而不会丢失修订历史的最简单的方法是使用SVN副本 ,上面的合并示例似乎是一个更复杂的方式来实现相同的事情。 为什么只需要恢复修订时需要合并?

在这个例子中我使用了下面的例子,它工作的很好。

 svn copy -m 'restoring file' -r <rev_number_file_to_restore> http://from/file.cs http://pathTo/file.cs 

我似乎总是使用svn copy作为服务器操作,所以不知道它是否适用于两个工作path。

你应该能够检出你想要恢复的一个文件。 尝试像svn co svn://your_repos/path/to/file/you/want/to/restore@rev其中rev是文件存在的最后一个修订版本。

我刚才不得不这样做,如果我没有记错,使用svn-r选项不起作用; 我不得不使用:rev语法。 (虽然我可能已经记得它倒退了…)