请注意,该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
希望有用。