我找到了各种关于如何恢复SVN提交的示例,例如
svn merge -r [current_version]:[previous_version] [repository_url]
or
svn merge -c -[R] .
但这两种方法似乎都不管用。我尝试了这些命令,并检查了手动更改的文件。
如何恢复修订号为1944的提交?我如何检查恢复已经完成(没有在实际文件中查看已恢复的更改)?
我找到了各种关于如何恢复SVN提交的示例,例如
svn merge -r [current_version]:[previous_version] [repository_url]
or
svn merge -c -[R] .
但这两种方法似乎都不管用。我尝试了这些命令,并检查了手动更改的文件。
如何恢复修订号为1944的提交?我如何检查恢复已经完成(没有在实际文件中查看已恢复的更改)?
当前回答
请注意,svn merge命令将还原一个提交,即让另一个提交撤销您的更改,但将错误的提交保留在历史记录中。
在这种情况下,你是一个Subversion系统管理员(有命令行访问权限),你必须恢复一个非常大的错误(例如,有人提交了一些在世界上不应该提交的东西),如果你想尝试完全放弃一个提交,不惜任何代价,甚至冒着破坏回购的风险:
步骤1。在服务器上标识存储库
首先,在服务器的文件系统上标识存储库。
让我们假设路径名是/repo。可能是/home/svn/myrepo之类的。
文件系统结构应该是这样的:
$ ls -la /repo
total 16
drwxr-xr-x. 6 svn svn 86 10 feb 2020 .
drwxrwx---. 145 svn svn 4096 22 giu 16.14 ..
drwxr-xr-x. 2 svn svn 54 10 feb 2020 conf
drwxr-sr-x. 6 svn svn 253 17 giu 11.25 db
-r--r--r--. 1 svn svn 2 10 feb 2020 format
drwxr-xr-x. 3 svn svn 4096 10 feb 2020 hooks
drwxr-xr-x. 2 svn svn 41 10 feb 2020 locks
-rw-r--r--. 1 svn svn 229 10 feb 2020 README.txt
我们还假设您的用户名为svn,就像上面的例子一样。
注意:如果您不知道这是在谈论什么,那么您可能没有自己的Subversion服务器,这个答案可能对您的情况没有用处。请尝试其他答案(其中您只需要服务器的URL,不需要物理访问)。
步骤2。输出你的好历史
让我们假设你的错误版本是100,正确版本是99:
svnadmin dump -r 1:99 /repo > export.dump
步骤3。备份并重新初始化存储库
创建存储库的备份并重新初始化它:
mv /repo /repo.bak
mkdir /repo
svnadmin create /repo
步骤4。再次输入你的好历史
svnadmin load /repo < export.dump
现在,确保用正确的用户修改你的权限:
chown -R svn:svn /repo
一切正常吗?这是所有!对你有好处!
但在这一点上,有一个有趣的机会,你已经破坏了你的整个存储库。例如,您可能不再能够签出,或者,您的Subversion web应用程序(Phabricator?)可能尖叫着发出奇怪的错误消息,或者,您可能在这个过程中错误地杀死了一千只小猫。
如果出现问题,请准备好灾难恢复:
灾难恢复
如果发生灾难:
mv /repo /repo.fail
mv /repo.bak /repo
希望能派上用场。
其他回答
首先,撤销1944年修订中所做的更改。
> svn merge -c -1944 .
其次,检查将要提交的内容。
> svn status
第三,提交1945版本。
> svn commit -m "Fix bad commit."
第四,查看新的日志。
> svn log -l 4
------------------------------------------------------------------------
1945 | myname | 2015-04-20 19:20:51 -0700 (Mon, 20 Apr 2015) | 1 line
Fix bad commit.
------------------------------------------------------------------------
1944 | myname | 2015-04-20 19:09:58 -0700 (Mon, 20 Apr 2015) | 1 line
This is the bad commit that I made.
------------------------------------------------------------------------
1943 | myname | 2015-04-20 18:36:45 -0700 (Mon, 20 Apr 2015) | 1 line
This was a good commit.
------------------------------------------------------------------------
svn merge -c -M PATH
这救了我的命。
我也有同样的问题,在恢复后,我也没有看到旧的代码。 运行上述命令后,我得到了一个干净的旧版本代码。
非常老的线程,但是Intellij没有答案。还原一次提交:
至: 颠覆>集成目录…
Alex,试试这个:svn merge [WorkingFolderPath] -r 1944:1943
请注意,svn merge命令将还原一个提交,即让另一个提交撤销您的更改,但将错误的提交保留在历史记录中。
在这种情况下,你是一个Subversion系统管理员(有命令行访问权限),你必须恢复一个非常大的错误(例如,有人提交了一些在世界上不应该提交的东西),如果你想尝试完全放弃一个提交,不惜任何代价,甚至冒着破坏回购的风险:
步骤1。在服务器上标识存储库
首先,在服务器的文件系统上标识存储库。
让我们假设路径名是/repo。可能是/home/svn/myrepo之类的。
文件系统结构应该是这样的:
$ ls -la /repo
total 16
drwxr-xr-x. 6 svn svn 86 10 feb 2020 .
drwxrwx---. 145 svn svn 4096 22 giu 16.14 ..
drwxr-xr-x. 2 svn svn 54 10 feb 2020 conf
drwxr-sr-x. 6 svn svn 253 17 giu 11.25 db
-r--r--r--. 1 svn svn 2 10 feb 2020 format
drwxr-xr-x. 3 svn svn 4096 10 feb 2020 hooks
drwxr-xr-x. 2 svn svn 41 10 feb 2020 locks
-rw-r--r--. 1 svn svn 229 10 feb 2020 README.txt
我们还假设您的用户名为svn,就像上面的例子一样。
注意:如果您不知道这是在谈论什么,那么您可能没有自己的Subversion服务器,这个答案可能对您的情况没有用处。请尝试其他答案(其中您只需要服务器的URL,不需要物理访问)。
步骤2。输出你的好历史
让我们假设你的错误版本是100,正确版本是99:
svnadmin dump -r 1:99 /repo > export.dump
步骤3。备份并重新初始化存储库
创建存储库的备份并重新初始化它:
mv /repo /repo.bak
mkdir /repo
svnadmin create /repo
步骤4。再次输入你的好历史
svnadmin load /repo < export.dump
现在,确保用正确的用户修改你的权限:
chown -R svn:svn /repo
一切正常吗?这是所有!对你有好处!
但在这一点上,有一个有趣的机会,你已经破坏了你的整个存储库。例如,您可能不再能够签出,或者,您的Subversion web应用程序(Phabricator?)可能尖叫着发出奇怪的错误消息,或者,您可能在这个过程中错误地杀死了一千只小猫。
如果出现问题,请准备好灾难恢复:
灾难恢复
如果发生灾难:
mv /repo /repo.fail
mv /repo.bak /repo
希望能派上用场。