2

我们有一个 subversion 存储库,并且刚刚发现 subversion 存储库中的文件使用文件系统操作从一个文件夹移动到另一个文件夹,从而导致删除和添加到 subversion。正如预期的那样,文件的历史记录没有被转移到新位置。是否有可能将这个错误完成的移动转换为一个真正的 svn mv 并复制历史记录?问题是提交已经有一段时间了,并且在这个提交之上已经有几个提交。因此,简单的反向合并和适当的移动是不可能的。

4

1 回答 1

4

可以假设您可以直接访问存储库,可以转储并重新加载它,所以假设。

简而言之,步骤是:

  1. 转储存储库。.
  2. 修改转储(见下文)。
  3. 创建一个新的存储库
  4. 将修改后的转储加载到新的存储库中(将转储加载到现有存储库中不会替换内容,而是实际附加。
  5. 验证更改。
  6. 用新的存储库替换旧的存储库。您需要转储存储库、修改转储、删除、重新创建和加载存储库。

所需的转储文件修改

您在转储文件中的错误移动操作将如下所示:

Revision-number: 2
Prop-content-length: 111
Content-length: 111

K 7
svn:log
V 13
Wrong rename.
K 10
svn:author
V 3
tom
K 8
svn:date
V 27
2012-11-22T22:11:49.101403Z
PROPS-END

Node-path: renamed file.txt
Node-kind: file
Node-action: add
Prop-content-length: 10
Text-content-length: 8
Text-content-md5: 226648ec2921fddba76a340ac976f760
Text-content-sha1: 18cc7289b71fd17898ca179dcb3a05f3d2a07e8b
Content-length: 18

PROPS-END
Content!

Node-path: file.txt
Node-action: delete

为了进一步阅读转储文件规范,值得一试,但是对于您的问题,只有一小部分条目是相关的:有两个节点,一个带有Node-action: add,另一个带有Node-action: delete。您需要做的就是修改转储,使其看起来像:

Revision-number: 2
Prop-content-length: 111
Content-length: 111

K 7
svn:log
V 13
Right rename.
K 10
svn:author
V 3
tom
K 8
svn:date
V 27
2012-11-22T22:13:51.674043Z
PROPS-END

Node-path: renamed file.txt
Node-kind: file
Node-action: add
Node-copyfrom-rev: 1
Node-copyfrom-path: file.txt
Text-copy-source-md5: 226648ec2921fddba76a340ac976f760
Text-copy-source-sha1: 18cc7289b71fd17898ca179dcb3a05f3d2a07e8b


Node-path: file.txt
Node-action: delete

因此,您需要更换

    Prop-content-length: <a>
    Text-content-length: <b>
    Text-content-md5: <md5>
    Text-content-sha1: <sha1>
    Content-length: <e>

    Node-copyfrom-rev: <correct revision>
    Node-copyfrom-path: <correct path>
    Text-copy-source-md5: <md5>
    Text-copy-source-sha1: <sha1>

删除文件的实际内容。

delete动作保持不变。

于 2012-11-22T22:32:51.203 回答