2013-04-30 66 views
1

我們是一個開發團隊,他們在Windows文件共享中擁有我們的中央存儲庫。git在文件共享上需要顯示git gc嗎?

我們的開發人員之一錯誤地推動了一個分支上的大量提交。之後,我們從中央存儲庫中刪除了該分支,但顯然這並沒有真正刪除提交。

由於它只是一個文件共享,因此文件服務器上沒有自動運行的進程git gc

我們是否需要在中央存儲庫上明確運行git gc

回答

2

您的本地存儲庫也沒有過程。
git gc不由後臺服務運行。當達到某個應該刪除的對象的某個閾值時,它在客戶端自動運行,如commitpush

+0

好的,但由於沒有人通常在文件服務器上運行任何git命令,那麼我需要在那裏顯式運行'git gc'? – 2013-04-30 11:48:46

+0

@KlasMellbourn:你在服務器上運行命令,也就是當你做'git push'的時候。 – 2013-04-30 11:51:41

+0

因此,要明確地說,必要時,'git push'將會運行我正在推送*到*的遠程存儲庫上的'git gc'? – 2013-04-30 14:22:29

0

錯誤答案閱讀評論。

git gc刪除已經上演的無法訪問的對象(與git add。)我不認爲它會永遠刪除提交的文件。

+2

'git gc'肯定會刪除通過任何分支或標記無法訪問的提交。 – 2013-04-30 10:43:16

+0

@DanielHilgarth:有趣,不知道。我會留下答案,以便不知道這些的人可以學習一些東西:) – Andomar 2013-04-30 10:45:06

2

像丹尼爾說的那樣,存儲庫在共享文件系統上的事實對於Git來說並沒有什麼特別之處:它就像這個repo位於常規文件系統中一樣。因此,沒有服務器,只有一堆「客戶端」Git進程訪問同一個存儲庫。

也就是說,這種情況與通常僅由單個開發人員操作的「正常」本地存儲庫的情況沒有任何區別。

由於git-gc manual狀態Git確實通過運行git gc --auto來對存儲庫執行某些檢查,這可能會檢測到GC需要並執行它。

所以......

  1. git gc --auto會自動通過一個Git過程的開發人員對倉庫進行操作的一個運行催生。這將自行發生。

    可能觸發此事的精確Git操作未在文檔中明確指定。我認爲這是因爲沒有意義上的編纂(無論如何,這種GC應該是快速和透明的)。

  2. 我沒有看到你沒有理由爲什麼你會手工運行git gc --aggressive回收可用空間。

    你必須記住的是,如果你引用日誌啓用,你可能會想

    • 請通過git reflog expire --all或類似手動刪除只是需要更細粒度的方法確保引用日誌被清空(來自它的條目)。
    • 有沒有其他揮之不去的裁判(分支或標籤)指向不需要的歷史。

    同時還要注意的Git應該正確序列化所有訪問存儲庫和使用「創建+原子rename」操作,操作對象時,我會要求開發者不要進入倉庫,而被它進行垃圾收集。

P.S. 您可能會發現this thread有趣的閱讀,特別是this post討論所指的。