Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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
Performance Git-克隆前/克隆时筛选_Performance_Git_Filter_Git Clone - Fatal编程技术网

Performance Git-克隆前/克隆时筛选

Performance Git-克隆前/克隆时筛选,performance,git,filter,git-clone,Performance,Git,Filter,Git Clone,我有一个巨大的存储库——超过1 GB。克隆存储库需要几个小时。然而,这种大小的大部分是因为本地项目不需要数据目录。但是,我当然没有从存储库中删除目录的权限 有没有办法在克隆存储库之前将过滤器应用到存储库中,以便我只下载实际需要处理的文件?没有,通过git的设计,这是绝对不可能的。您必须更改中央存储库 作为一种临时解决方案,您可以创建一个新分支,只筛选该分支,然后从master到您的分支执行空合并。现在人们可以只克隆你的分支并对其进行操作。然后,您必须在某个地方合并到master。但由于您添加了空

我有一个巨大的存储库——超过1 GB。克隆存储库需要几个小时。然而,这种大小的大部分是因为本地项目不需要数据目录。但是,我当然没有从存储库中删除目录的权限


有没有办法在克隆存储库之前将过滤器应用到存储库中,以便我只下载实际需要处理的文件?

没有,通过git的设计,这是绝对不可能的。您必须更改中央存储库

作为一种临时解决方案,您可以创建一个新分支,只筛选该分支,然后从
master
到您的分支执行空合并。现在人们可以只克隆你的分支并对其进行操作。然后,您必须在某个地方合并到
master
。但由于您添加了空合并,现在您可以随时在这两个分支之间合并,只要不更改master上的数据目录即可


编辑:Sry,空合并会破坏整个目的,因为客户端会再次下拉所有数据。

这是一个选项吗@不幸的是,mnhg没有。我想排除的目录位于顶层,有用代码的深度远不止此。深度是一些修订,而不是目录级别(请参阅)@mnhg-oh,好吧,这很公平。我真的不明白那是怎么回事,因为每次提交都取决于最后一次……对不起,我帮不了你。从未使用过它。好吧,如果我签出
master
,创建一个新的
master skinny
分支,然后运行
git filter分支--index filter…
,然后提交并将过滤器推送到我的新分支,该怎么办。现在人们是否可以签出
master skinny
,而无需下拉
master
的所有额外版本信息?那么,是否有可能将更改合并回
master
,而无需整个
master
?或者这只能通过使用fork和pull请求来管理……我想我或多或少回答了我自己的问题。所以想必这是可能的——fork存储库,拉下我的fork,
git filter分支——index filter…
,提交回来。现在人们可以克隆我的瘦存储库了。人们是否有可能提交不包含
过滤器
更改,但包含所有其他更改的请求?在这种情况下,他们无法真正提交请求,并且在没有完整回购的情况下,您也无法合并请求。但是你可以在一台拥有完整回购协议的机器上合并他们在回购协议中的更改,其他人都可以使用瘦版本。要做到这一点,你应该使用嫁接来假装完整的回购之前已经合并到瘦回购中。好的,所以答案实际上只是一个完全否定的答案。我必须让所有合作者停止使用远程,过滤存储库,将我的更改推回远程,并让所有合作者再次退出。如果您能在回答中总结评论中讨论的要点,我将不胜感激?