我从一个仓库中删除了一个文件,现在想把它放回去。我能想到的最好办法是:
- 更新到删除之前的版本
- 将文件复制到其他地方
- 更新到最新版本
- 将文件复制回来
- 添加它们
- 提交
这听起来不太好,并且还会损失所有历史记录。一定有更好的方法来做到这一点。我已经查看了SVN Book,但没有找到任何信息,现在正在查看SVN标记列表。
我从一个仓库中删除了一个文件,现在想把它放回去。我能想到的最好办法是:
这听起来不太好,并且还会损失所有历史记录。一定有更好的方法来做到这一点。我已经查看了SVN Book,但没有找到任何信息,现在正在查看SVN标记列表。
svn cp -r 1993 http://example.com/svn/trunk/path@1993 http://example.com/svn/trunk/path
- Craig使用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(我认为是...)
不过这完全没有经过测试。
由 OP 编辑:这适用于我的 TortoiseSVN 版本(旧版本没有下一步按钮)
诀窍是进行反向合并。感谢 sean.bright 指导我走上正确的道路!
编辑:我们使用的是不同的版本。 我描述的方法在我的 TortoiseSVN 版本中完美运作。
还值得注意的是,如果您要反向合并的提交中有多个更改,则需要在合并完成后撤消其他更改才能提交。如果不这样做,则这些额外更改也将被撤消。
使用Tortoise SVN的复制功能来还原已提交的更改:
希望这有所帮助。
我似乎总是将svn copy用作服务器操作,因此不确定它是否适用于两个工作路径。
以下是将已删除文件恢复到项目的本地工作副本的示例:
svn copy https://repos/project/modules/module.js@3502 modules/module.js
在项目目录中时,这同样适用于恢复整个目录。svn copy -m 'restoring file' -r <rev_number_file_to_restore> http://from/file.cs http://pathTo/file.cs
我似乎总是把svn copy
作为服务器操作使用,所以不确定它是否适用于两个工作路径。
使用 Tortoise SVN:
如果您还没有提交更改,可以在删除文件或目录的父文件夹上执行还原操作。
如果您已经提交了已删除的文件,则可以使用存储库浏览器,切换到文件仍然存在的修订版本,然后从上下文菜单中使用“复制到...”命令。将您的工作副本路径输入为目标,已删除的文件将从存储库复制到您的工作副本。
你应该能够只检出要恢复的一个文件。试试这样做:svn co svn://your_repos/path/to/file/you/want/to/restore@rev
其中 rev
是文件存在的最后修订版本。
我不久前就确实必须这样做了,如果我记得正确,使用 -r
选项到 svn
上行不通;我必须使用 :rev
语法。 (尽管我可能记反了...)