为什么git svn show ignore/show externals这么慢?
我正在编写一个通用的svn为什么git svn show ignore/show externals这么慢?,git,svn,git-svn,svn-externals,svnignore,Git,Svn,Git Svn,Svn Externals,Svnignore,我正在编写一个通用的svn->git迁移脚本,它允许比标准的git svn克隆多得多,在脚本的一个阶段,我检查迁移存储库中每个分支的git svn show externals和git svn show ignore的输出,以及根据这些命令的输出采取各种步骤 我现在的问题是,虽然脚本的其余部分很快就完成了,但这两个命令似乎占据了我绝大多数的运行时间。在某些情况下,git svn show externals运行时间长达10分钟(在包含约5000个文件的回购协议上)。当在这样一个具有10个或更多分
->
git迁移脚本,它允许比标准的git svn克隆
多得多,在脚本的一个阶段,我检查迁移存储库中每个分支的git svn show externals
和git svn show ignore
的输出,以及根据这些命令的输出采取各种步骤
我现在的问题是,虽然脚本的其余部分很快就完成了,但这两个命令似乎占据了我绝大多数的运行时间。在某些情况下,git svn show externals
运行时间长达10分钟(在包含约5000个文件的回购协议上)。当在这样一个具有10个或更多分支的存储库上运行时,您可以想象这相当大的增加
为什么执行此操作需要这么长时间?我能做些什么来加速它的执行吗?“git svn show ignore”对每个目录执行额外的svn请求 出于迁移的目的,您可能想看看这个工具。它为每个版本翻译svn:ignore->.gitignore(还翻译svn:eol样式、标记等)。唯一的限制:它需要本地访问SVN存储库。因此,它可能与工具结合使用。如果您在本地拥有SVN报告,则迁移将在一个步骤中执行:
$ subgit install path/to/svn/repo
“每个目录执行额外的SVN请求。”-真的是每个目录??为什么它不对整个树执行一个递归的
svn propget-R svn:ignore
?这可能很有用。我注意到它不支持将外部模块转换为子模块。对此有什么建议吗?Rup:看看git svn脚本中的“cmd\u show\u ignore”函数。它叫“道具行走”。然后看看“道具行走”的定义。它调用$self->ra->get_dir($path,$rev);--获取目录的属性和子级的方法。然后“prop_walk”会为每个目录子级调用它自己。majajackson:不,SubGit现在没有将外部模块转换为子模块,但在RFE列表中有这个功能。并非每个svn:external都可以转换为Git子模块。首先,指向的存储库svn:externals应该具有Git接口。第二个svn:外部不应该指向头部修订,而是指向某个修订。还有另一个工具尝试处理svn:externals--SmartGit(它将它们转换为.gitsvnextmodules文件,并用此文件显示任何Git存储库的子模块)。但它是唯一的UI解决方案,不能从脚本调用。