2012-08-13 94 views
7

我想要使用Git來跟蹤大型工作目錄(許多演出)的微小變化(每天幾個)。數據將是混合二進制/純文本。二進制數據不會像文本信息那樣變化很多。很少需要訪問舊提交,並且可能會很慢,而最近的歷史需要很快。Git-歸檔舊提交

我不想永久丟失舊數據,只是將它移動到備份服務器或其他東西。 Git中有什麼東西允許將舊的歷史記錄歸檔並僅保留本地存儲庫中的某個子集?

如果不是,是否有更適合此目的的工具?我喜歡Git,因爲我知道它,我想要版本控制和差異。我不需要Git的任何高級功能(如分支/合併,不分發),所以其他類似的VCS會很好。

+0

大部分文本文件每天都會發生幾個變化,很難算作「微觀」,這與任何舊項目在各個階段的修復速度都比修復錯誤更重要,而不是新的開發。 Git *應該*能夠處理這個沒有太多的臃腫。您的存儲庫實際上是否在快速增長,以至於需要將部分歷史記錄廢棄? – millimoose 2012-08-13 11:42:57

+0

除總數據大小可能> 100GB外。即使使用巧妙的壓縮技術,即使每天多次對10,000個以上文件進行小幅更改也會顯着增加本地存儲庫緩存。我計劃自動重新分配資源,但同樣有用的限制。這並不是Git設計的,所以我想知道它是否已經支持這種類型的東西,然後我就掏出鑿子並重新發明輪子。 – tjameson 2012-08-13 22:03:59

回答

4

如果您使用git format-patch進行修補,請使用git clone --depth <depth>創建一個淺表副本並繼續。不過,你不是,在這種情況下,你可能會發現this answerthis answer有用。第二個結論是,git checkout --orphan也許是獲得你想要的最好的方式。當然,你仍然需要在本地克隆完整的歷史記錄,以創建一個更小的分支。

如果您感覺冒險,想要這樣做,並且願意忍受更復雜的推送過程,使用git format-patch創建補丁並將它們應用到另一個存儲庫git am既不難執行也不會腳本化。它會爲推送過程添加一個額外的圖層 - 例如在淺回購上創建補丁,以編程方式應用到完整的回購,這是本地或其他地方,從後者推。時間和麻煩可能是不值得的,但它當然是可能的。

+0

嗯。我得看看那個。我不需要一個很好的用戶界面,只要我可以通過編程方式獲取變更集並更新其他回購。我打算有幾個副本的回購,這將發生,所以他們需要同步,但這只是增加了樂趣。我寧願在某個時間點分割提交歷史記錄的方式,但... – tjameson 2012-08-13 22:06:07

+0

爲了澄清,切片歷史很容易。推動和拉動切片歷史是困難的。 Git不能對存儲庫的HEAD位置做出假設,也不能[可以解釋淺層存儲庫採用哪個片段]。(http://stackoverflow.com/a/6900428/877115)如果您願意編寫腳本,問題或多或少得到解決。將一個淺倉庫上的'git format-patch'傳遞給其他倉庫。用'git am'申請。你可以很容易地編寫腳本,特別是如果你沒有產生,比如合併提交。 – Christopher 2012-08-14 01:06:42

+0

它看起來像我可以合併回我的特定用例。一旦我更多地閱讀淺層克隆,我會接受這一點。謝謝! – tjameson 2012-08-14 14:26:19