我从回购中删除了一个文件,现在想把它放回去。我能想到的最好的办法是:
- 更新到删除前的修订
- 将文件复制到别处
- 更新到头部
- 将文件复制回来
- 添加它们
- 犯罪
那只是闻起来很糟糕,它失去了所有的历史。必须有更好的方法来做到这一点。我已经查看了The SVN Book但没有找到任何东西,现在正在查看 SVN 标签列表。
我从回购中删除了一个文件,现在想把它放回去。我能想到的最好的办法是:
那只是闻起来很糟糕,它失去了所有的历史。必须有更好的方法来做到这一点。我已经查看了The SVN Book但没有找到任何东西,现在正在查看 SVN 标签列表。
按照 Sean Bright 的建议进行 svn 合并的问题在于,它重新引入了与删除相同的修订版中所做的其他更改。svn 复制是一种更有针对性的操作,只会影响已删除的文件。
使用 Tortoise SVN,您可以通过 svn 副本恢复已从工作副本目录和以后的 SVN 修订版中删除的文件,如下所示:
删除的文件现在将位于工作副本文件夹中。要将其重新添加回 SVN,请右键单击恢复的文件并选择 SVN 提交。
注意:此方法将保留恢复文件的先前历史记录,但是要查看 TortoiseSVN 日志中的先前历史记录,您需要确保在“日志消息”对话框中未选中“复制/重命名停止”。
使用 svn 合并:
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
在项目目录中时。这也适用于恢复整个目录。
如果您使用的是 Tortoise SVN,您应该能够将更改从该修订版还原到您的工作副本(有效地执行反向合并),然后再次提交以重新添加文件。要遵循的步骤是:
我能够恢复文件而不丢失修订历史的最简单方法是使用SVN copy,对我来说,上面的合并示例似乎是实现相同目标的更复杂的方法。当您只想恢复修订时,为什么需要合并?
我在这种情况下使用以下内容,效果很好。
svn copy -m 'restoring file' -r <rev_number_file_to_restore> http://from/file.cs http://pathTo/file.cs
我似乎总是svn copy
用作服务器操作,所以不确定它是否适用于两个工作路径。
使用乌龟 SVN:
如果您尚未提交更改,您可以在删除文件或目录的父文件夹上执行还原。
如果您已经提交了删除的文件,那么您可以使用存储库浏览器,更改到文件仍然存在的版本,然后使用上下文菜单中的命令复制到...。输入工作副本的路径作为目标,删除的文件将从存储库复制到您的工作副本。
您应该能够只签出要恢复的一个文件。尝试类似文件存在的最后一个修订版在svn co svn://your_repos/path/to/file/you/want/to/restore@rev
哪里。rev
不久前我必须这样做,如果我没记错的话,使用该-r
选项svn
不起作用;我不得不使用:rev
语法。(虽然我可能记得倒过来...)