我想对the FreeBSD repository的子集做一些工作。问题:这个存储库非常大; git clone
拉近2 GB。我只需要一小部分用于我想做的事情;目前,大约140 KB。
我希望能够从上游获取更改(我真的不需要应用补丁),但我估计我有可能需要回到0%。
似乎我拒绝的每一条路都是死路一条:
--depth 1
克隆上游回购,我无法将其推送到Github。 (“不允许浅更新”.Ubuntu 16.04上的Git 2.7.4)git rm
我不想要的一切(在工作目录中仅留下140KB)然后clone --single-branch
,它也会下降1.5 GB。我想知道是否可能只是包装很糟糕并且有很多“错误共享”,但我尝试重新包装(-a -d -f --depth=250 --window=250
,根据我看到的一些随机命令),它仍然是~880 MB之后。如果我再次克隆它,也一样。git gc
而且只是做了很多,更糟糕的事情(6.6 GB)。filter-branch
远离不必要的东西,但是如果我这样做的话,我似乎无法继续拉。是否有一些工作流可以在这里工作,或者我应该只是切断与上游的连接,filter-branch
所有的东西,然后只是拉入补丁,因为有新的提交上游?我应该忘记FreeBSD Github镜像并以某种方式使用git-svn
制作回购? (最终,我想要的一切都不会包含在一个目录中;即,我需要foo/bar
和foo/baz
,而不是foo/qux
。)
(获取和应用这些补丁的最佳方式是什么?)
答案 0 :(得分:1)
即使我把所有我不想要的东西(在工作目录中留下140KB)然后克隆--single-branch,它也会降低1.5 GB
是的,Git无论如何都会下载(获取)所有回购,但仅限于第一次推送 但这不应该阻止你推迟,如果你提交的范围有限(修改一些文件,那推送应该没有问题)
为了在本地限制工作树,你可以做的是一个稀疏的结账(首先它仍然需要完整的提取,但不会检查所有内容)。
您可以在" git clone is not cloning recent version of a certain repository?"
答案 1 :(得分:1)
有迹象表明未来的git版本会支持它。补丁已被接受。搜索OPT_PARSE_LIST_OBJECTS_FILTER
或add object filtering for partial fetch