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

我们意外地从 Subversion 存储库中删除了“ tag”文件夹,我们只想删除一个特定的标记。什么是最简单的方法得到’标签’文件夹回?

我们使用 TortoiseSVN 作为我们的客户端,我认为当我进入回购浏览器并显示日志时,会有一些类似于“从这个修订恢复更改”的东西,类似于你可以在工作副本的类似对话框中看到的东西。但是那里没有这样的命令。

69409 次浏览

Goto Repository Browser of your repository, right-click on the parent folder where your deleted folder existed. Now, Show Log of the parent folder, and select the previous revision where you committed the delete operation. You'll have a list and right click on the folder from the revision info and select Update to this Revision.

You are done

Just copy the deleted folder back from an earlier revision.

In the Repository Browser, click the button labeled HEAD (at the top-right corner) to show to a revision there your folder still exists, then right-click that folder and select "Copy to..." and enter the path there you want the folder to be re-created (probably the same path that is already in the text box).

You will need to do a reverse merge.

For details on how to do it (and pretty much anything else you would ever want or need to do with SVN), the official book is available online.

for the command line enthusiasts:

  • first find the revision number where your delete happened:

    svn log -v http://svnserver/path/to/folderContainingDeletedFolder
    

say you find that the directory was deleted in revision 999 (btw: you might find it easier to find the revision number with the svn repo browser)

  • copy the folder from revision minus 1

    svn copy http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder@998 http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder -m "undeleted folder"
    

voilà you're done!

in your case this might be:

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

Following on from raudi's answer which worked for me after this revision.

Some svn clients might need the revision number specified using the -r revision parameter instead of using @ after the folder as follows:

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

Most of these answers will work to a degree but the correct answer is Daniel's. Do a reverse merge. That way you keep version history.

svn merge -r R1:R2

where R1 is the revision that you're at, and R2 is the revision that contains the deleted file/folder.

Revert to the revision before the deletion

svn co -N https://svn.ex.com/repo/project/parentfolder@7537 .

svn copy https://svn.ex.com/repo/project/parentfolder/deletedfoldername@7537 deletedfoldername

svn commit -m "restoring" deletedfoldername