ChatGPT解决这个技术问题 Extra ChatGPT

如何在 Subversion / TortoiseSVN 中“取消删除”已删除的文件夹?

我们不小心从我们的 Subversion 存储库中删除了“标签”文件夹,我们只打算删除一个特定的标签。取回“标签”文件夹的最简单方法是什么?

我们使用 TortoiseSVN 作为我们的客户端,我认为当我转到 repo 浏览器并显示日志时,会出现类似“从该修订版恢复更改”之类的内容,类似于您在工作副本上的类似对话框中看到的内容。但是那里没有这样的命令......


K
Karsten

只需从早期版本中复制已删除的文件夹即可。

在存储库浏览器中,单击标有 HEAD 的按钮(在右上角)以显示您的文件夹仍然存在的修订版,然后右键单击该文件夹并选择“复制到...”并在那里输入路径希望重新创建文件夹(可能与文本框中已经存在的路径相同)。


很好的提示,谢谢。一个 TortoiseSVN 陷阱 - 在那个“复制到...”对话框中,我必须将路径从“example.com/svn/tags”更改为“tags1”,然后返回以启用“确定”按钮。
这对于标签可能很好,但不应该取消删除任何其他文件夹,因为您将丢失历史记录
它确实保留了历史,只是也这样做了。
只需确保在查看日志时取消选中“停止复制/重命名”,否则 TortoiseSVN 将不会显示恢复操作之前的历史记录(显然)...
它完全奏效了。节省了我很多时间。谢谢 :)
r
raudi

对于命令行爱好者:

首先找到删除发生的修订号:svn log -v http://svnserver/path/to/folderContainingDeletedFolder

假设您发现该目录在修订版 999 中被删除(顺便说一句:您可能会发现使用 svn repo 浏览器更容易找到修订版号)

从修订版中复制文件夹减去 1 svn 复制 http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder@998 http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder -m "未删除的文件夹"

瞧,你完成了!

在您的情况下,这可能是:

    svn copy http://svnserver/project/tags@998 http://svnserver/project/tags -m "undeleted folder"

谢谢..节省了很多时间
这刚刚救了我的培根!
只是想确认“svn copy”方法实际上确实保留了所有历史记录,并且对于文件夹它递归操作,恢复文件夹和所有子项。
a
andrewsi

这些答案中的大多数都会在一定程度上起作用,但正确的答案是丹尼尔的。进行反向合并。这样您就可以保留版本历史记录。

svn merge -r R1:R2

其中 R1 是您所在的版本,R2 是包含已删除文件/文件夹的版本。


在反向合并中,R1 应该是您要恢复的修订版,而 R2 应该是之前的修订版。
您不会丢失 svn copy 的任何历史记录。
对于我们这些不是命令行爱好者的人,请参阅:tortoisesvn.net/docs/nightly/TortoiseSVN_en/…
这不会恢复所有已删除的文件/文件夹吗?如果我只想恢复一个特定的已删除文件夹而不是其他已删除的文件夹,这会起作用吗?
m
madth3

您将需要进行反向合并。

有关如何执行此操作的详细信息(以及几乎所有您想要或需要使用 SVN 执行的操作),请参阅官方书籍 online


S
Sirko

继此修订后对我有用的 raudi 的回答。

一些 svn 客户端可能需要使用 -r 修订参数指定的修订号,而不是在文件夹后使用 @,如下所示:

svn copy svn://svnserver/project/tags svn://svnserver/project/tags **-r 998** -m "undeleted folder"

如果您从仍然存在的文件夹中恢复,那么 -r <revision> 将起作用。但是,如果您尝试直接恢复文件夹,则需要使用 @<revision>。否则它会告诉你文件没有找到。
A
Abdul Munim

转到您的 repositoryRepository Browser,右键单击您的已删除文件夹所在的父文件夹。现在,父文件夹的 Show Log,并选择您提交删除操作的上一个修订版。您将有一个列表并右键单击修订信息中的文件夹并选择 Update to this Revision

你完成了


哦,我明白了,它不在 Show Log 对话框中,而是在主 repo 浏览器窗口中。尽管如此,该命令将尝试更新我的本地工作副本,而我想直接在服务器上解决此问题(您可以想象检查数百个标签,每个标签包含数千个文件,这并不是我想要的去做)。
它对我有用。上下文菜单选项(右键单击)是“从该版本恢复更改”,它将反向合并更改。