2017-06-23 59 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