我想将 Subversion 存储库子目录(由module
此处表示)转换为具有完整历史记录的 git 存储库。在我的 Subversion 存储库的历史中,有许多svn copy
操作(Subversion 人称它们为分支)。发布策略是,在每个发布或其他分支创建后,旧 URL 将不使用,新 URL 替换旧 URL 以包含工作。
最佳情况下,根据我的阅读,这似乎应该可以解决问题:
$ git svn clone --username=mysvnusername --authors-file=authors.txt \
--follow-parent \
http://svnserver/svn/src/branches/x/y/apps/module module
(其中branches/x/y/
描绘了最新的分支)。但我收到一个错误,看起来像这样:
W: Ignoring error from SVN, path probably does not exist: (160013): Filesystem has no item: '/svn/src/!svn/bc/100/branches/x/y/apps/module' path not found
W: Do not be alarmed at the above message git-svn is just searching aggressively for old history.
(更新:在上面添加选项--no-minimize-url
不会删除错误消息。)
该目录module
被创建并填充,但未导入最新提交之后的 Subversion 历史记录svn copy
(创建的 git 存储库最终只有两个提交,而我预计会有数百个提交)。
问题是,在这种情况下如何导出完整的 Subversion 历史记录?
可能的原因
搜索错误消息,我发现:git-svn 匿名结帐失败并带有 -s 链接到此 Subversion 问题:http ://subversion.tigris.org/issues/show_bug.cgi?id=3242
根据我的阅读理解,Subversion 1.5 中的某些内容改变了客户端访问存储库的方式。对于较新的 Subversion,如果没有对 URL 路径的某些超级目录的读取访问权限(对我来说是真的,
svn ls http://svnserver/svn
失败为403 Forbidden
),那么我们会因某些 Subversion 操作而失败。Jeff Fairley 在他的回答中指出 Subversion URL 中的空格也可能导致此错误消息(由用户 Owen 确认)。看看他的解决方案,看看他是如何解决这个案子的,如果你
git svn clone
在同样的情况下失败了。Dejay Clayton 在他的回答中透露,如果分支和标签 svn url 中最深的子目录组件名称相同(例如
.../tags/release/1.0.0
和.../branches/release-candidates/1.0.0
),则可能会发生此错误。