2014-09-21 27 views
2

我找到了答案How to shrink a Git repo,我的問題是什麼時候做正確的時間點。這裏的背景下,這可能有助於瞭解:10人工作代碼,4局部在德國,6個遠程在中國何時收縮Git存儲庫?

  • 我們有一個小的項目〜。
  • 存儲庫是一年前(無歷史記錄)與我們項目的源代碼(主要是Java)一起創建的。
  • 我們有一個相對簡單的過程
    • 開發商在一個特性分支(與他人共享)在本地工作。如果有必要,他們會添加一個開發者分支(也會被推送)以避免數據丟失。
    • 當功能完成後,功能分支隨後在主設備上合併,並在一段時間後移除。
  • 存儲庫現在大小爲4.5 GB,這對我們的本地網絡來說是一種負擔,但在遠程工作時更是如此。

什麼時候收縮存儲庫是正確的時間?

+3

爲什麼當你幾乎從不需要整體克隆時,存儲庫的整體大小會成爲一種負擔?你在工作流程中沒有問題嗎?爲什麼它這麼大,你不在那裏存儲大的非源代碼數據?數據本身有多大?另外,我擔心的問題*當*做到這一點時只能由您回答。 – 2014-09-21 16:19:42

+0

我不在這個項目中工作,所以我最近才聽到。通過互聯網克隆(1MBit連接)是一種負擔,因此遠程工作人員必須使用不同的策略。我會投入一些時間來自大小,但這是一個不同的問題。你認爲有策略可以幫助管理嗎? – mliebelt 2014-09-21 16:30:08

+0

這聽起來像一個克隆將需要更多或更少的十個小時。即使是一個大型項目,這聽起來也難以承受。最好的策略是隻將源代碼放到你的git倉庫中。如果您需要對大塊進行版本控制,請爲這些塊使用一個或多個單獨的存儲庫或子模塊。我只是看着linux內核的repo,'.git'目錄的內存少於1G。我猜這是目前我的電腦中克隆的最大的項目。如果你有一個擁有大量開發人員和千兆字節代碼的巨大項目,那麼它可能也應該分裂。 – 2014-09-21 16:38:19

回答

3

作爲比較:我知道的最大的git倉庫Linux repository擁有將近470k的提交和超過4k的貢獻者。結帳時花費了1.15GB。在git gc --aggressive之後,其大小降至858MB。

你的存儲庫中肯定有文件不屬於那裏。我主要想到各種二進制文件。如果佔用太多空間,這些應該存儲在別處。

如果您碰巧存儲編譯的文件,您應該從存儲庫中刪除它們並將相應的模式添加到您的.gitignore文件中。作爲一個經驗法則,可以從存儲庫中的其他文件生成並佔用空間或是二進制文件的文件不應該被提交。

我剛剛發現這個工具:BFG Repo-cleaner。這是一個幫助工具,可以讓你用刪除有問題的文件來重寫歷史記錄。您可以使用它來刪除不屬於那裏的文件。
請注意,重寫歷史意味着大多數提交會得到不同的SHA-1哈希。因此,您的團隊中的每個人都必須同時切換存儲庫:您生成新的存儲庫,然後每個人都必須放棄舊的存儲庫並從現在開始使用新的存儲庫。

但是:首先克隆存儲庫不應該有問題。你應該只克隆一次倉庫。如果您因爲任何原因需要第二個存儲庫,請從第一個存儲庫克隆它,或者從中複製.git目錄。

同樣,遠程人員只能克隆一次倉庫(因此您只需在德國和中國之間轉移這些4.5 GB的倉庫)。然後,中國人可以在他們本地克隆它,然後切換遠端的遠端。

總之,我不知道清理存儲庫是否值得,因爲你不應該經常克隆它。

+2

+1此答案值得更多upvotes。 – Jubobs 2014-09-22 12:45:26

+0

我也是,這正是我所要求的答案。來自其他人的評論? – mliebelt 2014-09-22 14:53:47

+0

Upvoting,儘管它或多或少只是常識。 – 2014-09-23 12:16:09