Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么git svn show ignore/show externals这么慢?_Git_Svn_Git Svn_Svn Externals_Svnignore - Fatal编程技术网

为什么git svn show ignore/show externals这么慢?

为什么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个或更多分

我正在编写一个通用的svn
->
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解决方案,不能从脚本调用。