我正在尝试将一个项目从一个存储库迁移到它自己的存储库中,以便更轻松地通过 ldap 处理身份验证/授权。然而,在尝试 svnadmin dump | svndumpfilter --include ... 我收到标准错误,包含路径中的某些文件已从不包含路径中的某个位置移动或复制,因此内容不可用。
Google 告诉我需要使用 svndumpfilter python 脚本变体之一。我在 Windows Server 2003 上有 python 2.6.5,可通过命令行访问。所有这三个脚本都使用标准输入,但它们各自处理的事情略有不同。 svndumpfilter2 启动,但在修订版 2 上,因断言失败而阻塞。该代码显然希望冒号出现在该行上,但没有。我使用的转储文件只是一个简单的 svnadmin dump repo > out.dump。没有对其进行任何操作。
我使用的命令是: svnadmin 转储 D:\svn\repo | C:\Python26\python.exe "C:\Program Files\CollabNet\Subversion Server\svndumpfilter2.py"http://localhost/svn/repo include Project > D:\svndump\project.dump
或
svnadmin dump D:\svn\repo > out.dump
输入 out.dump | C:\Python26\python.exe "C:\Program Files\CollabNet\Subversion Server\svndumpfilter2.py"http://localhost/svn/repo include Project > D:\svndump\project.dump
我得到的输出是:
- Dumped revision 0.
- Dumped revision 1. C:\Program Files\CollabNet\Subversion
- Server\svndumpfilter2.py:67:
- DeprecationWa rning: the md5 module is deprecated; use hashlib instead
- import md5 Traceback (most recent call last): File "C:\Program Files\CollabNet\Subversion Server\svndumpfilter2.py", line 40 6,
- in lump = read_lump(fr) File "C:\Program Files\CollabNet\Subversion Server\svndumpfilter2.py", line 23 9,
- in read_lump lump = read_rfc822_headers(f) File "C:\Program Files\CollabNet\Subversion Server\svndumpfilter2.py", line 23 1,
- in read_rfc822_headers assert colon > 0 AssertionError
它失败的转储文件的第一部分是:
SVN-fs-dump-format-version: 2
UUID: 880c8176-308d-ea4f-8680-45defe5ec145
Revision-number: 0 Prop-content-length: 56 Content-length: 56
K 8 svn:date V 27 2007-01-30T21:25:29.487250Z PROPS-END
Revision-number: 1 Prop-content-length: 151 Content-length: 151
K 7 svn:log V 40 Folders added to allow proper branching. K 10 svn:author V 15 COMPANY\USER K 8 svn:date V 27 2007-02-02T21:02:22.321625Z PROPS-END
Node-path: branch Node-kind: dir Node-action: add Prop-content-length: 10 Content-length: 10
PROPS-END
Node-path: tags Node-kind: dir Node-action: add Prop-content-length: 10 Content-length: 10
PROPS-END
Node-path: trunk Node-kind: dir Node-action: add Prop-content-length: 10 Content-length: 10
PROPS-END
Revision-number: 2 Prop-content-length: 109 Content-length: 109
有没有人以前见过这种情况或知道为什么会发生这种情况?
请您参考如下方法:
发生此错误的原因可能是 Python-on-Windows 正在执行换行符转换(将 stdin 视为文本文件)。
因为“svnadmin dump”使用 Unix 换行约定生成转储文件(即使在 Windows 上运行),您不希望 python 执行换行转换。解决方案是使用“-u”选项调用 python。
此外,svndumpfilter2.py 的第一个参数应该是本地 REPOS_PATH,而不是 http://字符串。为了便于讨论,假设您的存储库名为 foo_bar,位于 c:\svnrepos\foo_bar。假设您已经在 foo_bar 上运行了“svnadmin dump”并生成了一个名为 out.dump 的文件
那么正确的 python 调用是:
C:\Python26\python.exe -u "C:\Program Files\CollabNet\Subversion Server\svndumpfilter2.py"c:\svnrepos\foo_bar 项目 D:\svndump\project.dump
