我正在尝试将项目从一个存储库迁移到自己的存储库,以便通过ldap更轻松地处理身份验证/授权。但是,在尝试svnadmin转储时| svndumpfilter --include ...我得到标准错误,包含路径中的某些文件是从不包含在路径中的某个位置移动或复制的,因此内容不可用。
谷歌告诉我,我需要使用其中一个svndumpfilter python脚本变体。我可以通过命令行访问Windows Server 2003上的python 2.6.5。所有这三个脚本都使用标准输入,但它们各自处理的东西略有不同。 svndumpfilter2启动,但在修订版2中,断言与断言失败。代码显然希望冒号在那条线上,但事实并非如此。我正在使用的转储文件只是一个简单的svnadmin dump repo> out.dump。没有采取任何措施。我正在使用的命令是: svnadmin dump 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
OR
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
我得到的输出是:
- 转发版本0。
- 转储版本1. C:\ Program Files \ CollabNet \ Subversion
- 服务器\ svndumpfilter2.py:67:
- DeprecationWa rning:md5模块是 弃用;改用hashlib
- import md5 Traceback(最近一次通话 最后):文件“C:\ Program 文件\ CollabNet的\颠覆 Server \ svndumpfilter2.py“,第40行6,
- 在 lump = read_lump(fr)文件“C:\ Program Files \ CollabNet \ Subversion Server \ svndumpfilter2.py“,第23行9,
read_lump中的- lump = read_rfc822_headers(f)文件“C:\ Program 文件\ CollabNet的\颠覆 Server \ svndumpfilter2.py“,第23行1,
- 在read_rfc822_headers中 断言冒号> 0 AssertionError
它失败的转储文件的第一部分是:
SVN-fs-dump-format-version:2
UUID: 880c8176-308d-ea4f-8680-45defe5ec145
修订号:0 Prop-content-length:56 内容长度:56
K 8 svn:日期V 27 2007-01-30T21:25:29.487250Z PROPS-END
修订号:1 Prop-content-length:151 内容长度:151
K 7 svn:log V 40已添加文件夹 允许适当的分支。 K 10 svn:作者V 15 COMPANY \ USER K 8 svn:日期V 27 2007-02-02T21:02:22.321625Z PROPS-END
节点路径:分支Node-kind:dir 节点动作:添加Prop-content-length: 10内容长度:10
PROPS-END
Node-path:标签Node-kind:dir 节点动作:添加Prop-content-length: 10内容长度:10
PROPS-END
节点路径:trunk节点类型:dir 节点动作:添加Prop-content-length: 10内容长度:10
PROPS-END
修订号:2 Prop-content-length:109 内容长度:109
有没有人见过这个或者有任何想法为什么会发生这种情况?
答案 0 :(得分:3)
可能正在发生此错误,因为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 Project D:\ svndump \ project.dump