2016-05-08 97 views
0

git version control system是一種分佈式日誌(與raft共識協議有一些概念上的相似之處)。我可以將git存儲庫中已刪除的文件展平嗎?

筏和其他一些系統的概念是log compaction,所以冗餘變更集不會批量更改整個日誌。

我想要的是'批量清理'刪除的文件 - 不隔離單個排除。

我的問題是:我可以從git存儲庫中刪除已刪除的文件嗎?

編輯:

  • 想在我的歷史 - 我有專人時間在不同點中的五個不同100M的二進制文件檢查五個獨立的場景 - 我寧願沒有下載的每個時間有人做了一個克隆。我正在尋找'從我的回購中刪除的文件的批量清理',同時仍然保留我的回購。
+1

你是什麼意思的「乾淨」或「平坦」刪除的文件?如果任何提交引用它們,它們都不能從存儲庫中刪除;否則你會失去你的修訂歷史的一部分。但Git通過內容散列存儲文件,因此每個版本的文件只有一個副本,無論它包含多少修訂版本。 – Wyzard

+0

除當前樹以外的所有文件都被「刪除」。如果你想擺脫它們,只需創建一個新的存儲庫並將當前樹導入它。你想要刪除什麼以及要保留什麼? –

+0

謝謝@Wyzard - 我澄清了這個情況。 – hawkeye

回答

0

確定 - 這裏是需要檢查的事項列表:

您可以運行:

git gc 

可以使用獲得的信息:

git count-objects -v 

有一個腳本here for git-fatfiles

這是一個recreating all the branches在新的回購腳本。

使用這個你可以列出的大對象,並對其進行排序:

git verify-pack -v .git/objects/pack/pack-*.idx | sort -k3n 

使用this你可以找到其呈交了,佔用的空間團塊。

0

「假設在我的歷史中 - 我有五個不同的場景,有人在100M文件中檢查 - 我寧願不必每次都有人下載克隆。」

Git已經這樣做了。只要文件內容相同,其散列值就會相同。 Git使用散列來標識文件,因此文件將解析爲相同的散列,並且不會增加空間使用量。

如果,另一方面,該文件的內容是略有不同,那麼空間可能會或可能不會被保存,這取決於他們在哪裏在GIT樹,各種細節和所使用的選項時,git gc被執行。 (假設文件是​​diffable的,二進制文件可能會也可能不會查找git delta壓縮)

說了這麼多,git在很多方面都不適用於大的二進制文件(我假設100 MB文件是二進制的,儘管它們可能不是),你可能想看看類似git large files或git中的其他東西來支持大文件或者git以外的scm。

相關問題