2016-12-15 73 views
0

我有一個名爲「master.git」的git倉庫,我定期運行「git gc --prune = now」。git gc需要鏡像的git裸倉庫,其中用戶不推動任何更改

我有另一個名爲「slave.git」的git裸存儲庫,它是使用「master.git」中的--mirror選項創建的。但我已經停止了「git gc」,並且不會運行,甚至可以通過在gitconfig中關閉來自動運行。

上午保持 「slave.git」 保持同步 「master.git」 通過與來自master.git --force --mirror選項推 - > slave.git

的master.git庫將得到改變從開發人員和slave.git不得到從開發人員的任何更改,就像一個只讀副本。

所以問題是如果master.git存儲庫定期GC'ed和它的變化推動鏡像選項slave.git,將slave.git存儲庫需要一個「git gc」運行,以保持優化或因爲我們鏡像已經GC'ed存儲庫slave.git不需要垃圾收集?

+0

由於'master'是默認分支名稱,'master'對於一個倉庫來說是一個糟糕的名字。 –

回答

0

鏡像方面git push --mirror意味着refs(分支和標籤)在相同的名稱下可用,並指向與源相同的對象。這並不意味着底層數據庫就是一面鏡子。

是的,您仍然需要在鏡像目標中設置gc,因爲當廢棄舊對象時它會累積垃圾。這些對象不會因推送操作而被清除,只是因爲對象不再存在於源中。

1

我有一個名爲「master.git」的git裸存儲庫,我定期運行git gc --prune=now

這肯定是矯枉過正。例如, du -sh objects在你的gc之前和之後的回購中,看看你有多少存款空間。我建議使用git gc --auto

上午保持「slave.git」保持同步「master.git」由master.git與--force --mirror選項推 - > slave.git [...]將slave.git庫要求「混帳氣相色譜法」來運行以保持優化或者由於我們正在鏡像已經GC'ed的存儲庫slave.git不需要垃圾收集?

當您推送或抓取時,新對象在包中傳送。 git gc將會在包裝太多的時候合併包裝(現在有50個,從2008年的20個提高),所以最終它會變得有價值。

+0

謝謝jthill,是的,我確實有一個腳本,檢查對象,他們是否需要包裝,然後做gc。對不起,我沒有詳細說明。 –