2017-06-23 60 views
2

的子树工作,我希望做的the FreeBSD repository一个子集的一些工作。问题:这个存储库非常大; git clone拉下来接近2 GB。我只需要其中的一小部分来完成我想要做的事情;目前,大约140 KB。大Git项目

我希望能够从上游拉的变化(我真的宁可不要应用补丁),但我估计我需要在0%到推背的机会。

似乎每次我拒绝路径是一条死胡同:

  • 如果我克隆与--depth 1上游回购,我不能把它推到Github上。 (“不允许浅度更新”。Ubuntu 16.04上的Git 2.7.4)
  • 即使我git rm我不想要的东西(只留下140KB的工作目录),然后clone --single-branch,它拉下1.5 GB。我想知道如果可能只是这些包太糟糕了,并且有很多“虚假分享”,但我试图重新包装(根据我看到的一些随机命令),它仍然在〜880 MB之后。如果我再次克隆,那也一样。
  • 我想git gc而且只是去和做的事情远,差远了(6.6 GB)。
  • 我可以filter-branch掉不需要的东西,但好像我不能,如果我这样做拉之后。

有一些工作流程,将在这里工作,或者我应该只是切断连接到上游,filter-branch一切的,然后就拉补丁有新提交到上游?我应该忘记FreeBSD Github镜像并以某种方式使用git-svn来制作回购? (最后,我想要的一切将不会被包含在一个单一的目录,也就是说,我会想foo/barfoo/baz但不foo/qux

(而且什么了是获得并应用这些补丁的最佳方法? )

回答

1

即使我的git RM一切,我不希望(只留下那140KB在工作目录),然后克隆--single分支,它拉低1.5 GB

是,无论如何,Git会下载(获取)所有的回购,但只能在第一次推送。
但是这不应该阻止你往前推,如果你提交的范围有限(修改几个文件,并推后应该不会出现问题)

可以以本地限制工作树做的是一个稀疏的结帐(它仍然需要一个完整的提取,但不会检出所有内容)。
你可以在“git clone is not cloning recent version of a certain repository?”中看到一个稀疏克隆的例子

+0

当然,推回正常工作,并且我能避免工作的复印尺寸与稀疏检出,就像你说的。但是我想首先避免多GB的下载。 (更具体一点:一个稀疏的*结帐*我认为根本没有帮助我;我将有一个分支或整个回购分支,只有我感兴趣的子集,所以作为只要我在那个分支上,我一直都在积极研究它,我可以有一个非稀疏的结账。) – EvanED

+0

@EvanED是的,这是我的观点:如果你可以支持多gB *一次*(第一次读取),那就很理想。我不知道有部分获取的方法(在浅层克隆旁边)。我仍然使用稀疏检出(例如https://stackoverflow.com/a/2467629/6309) – VonC

+0

@EvanED“我将要有一个分支或整个回购分支,只有我感兴趣的子集in at al“:那么你需要将该回购拆分为两个回购(其中一个是另一个的子模块):https://stackoverflow.com/a/16728814/6309 – VonC

1

有迹象表明未来版本的git会支持它。补丁已被接受。搜索OPT_PARSE_LIST_OBJECTS_FILTERadd object filtering for partial fetch