2011-11-28 34 views
7

使用git gcgit repack(有各種選項)後,我仍然有4825 寬鬆提交在文件夾.git/objects。我想把它們全部放在包文件中,其餘的或在另一個包文件中。Git:如何重新包裝所有寬鬆提交

我做了很多提交重寫(修改+ rebase),因此有許多不可達的提交是完全正常的。我的.gitconfig包含這些參數來長時間保持reflogs和不可達的提交。

[gc] 
    reflogExpire = 300 days 
    reflogExpireUnreachable = 200 days 
    pruneExpire = 90 days 

你可能不知道它是否有道理,但我已經需要和已經恢復了幾人犯數個月前提出。發生這種情況的原因是,我們在一組新的高優先級分支上開發了好幾個月,然後繼續在較低優先級的分支上繼續工作。

這個問題的主要原因是,git gui不斷抱怨壓縮我的數據庫despites我做了很多次。 如果我們無法收拾那些寬鬆的提交,那麼這個「抱怨」可能是git gui中的一個錯誤。

+0

哇,我不知道人們實際上可以用那麼多的寬鬆承諾 – prusswan

+0

dupe/related? http://stackoverflow.com/questions/3765234/listing-and-deleting-git-commits-that-are-under-no-branch-dangling – cregox

回答

1

考慮到git bundle僅用於包裝對象(稱爲fetch-pack),您是否嘗試to bundle,然後克隆您的回購?

git bundle create aBundle --all # hopefully package everything, 
           # the result being *one* file. 
git clone aBundle newRepo  # recreate a full repo 
# check if the cloned repo contains only packaged object 

如果這樣做,你可以繼續,使用新的克隆回購作爲你的主要回購。

+0

恐怕這沒有幫助。我創建了這樣一個包,它是60 MB。但是,我的.git/objects/pack中的文件包爲64 MB,所有鬆散對象一起佔用32 MB。我嘗試引用捆綁中的懸掛提交(我的存儲庫),但它不起作用(任何人都知道如何?)。 –

+1

@PaulPladijs:但是該包的克隆是否包含任何解壓縮的對象?不過,我同意git bundle可能只考慮引用提交。 – VonC

1

來自git-gui的警告只是一個暗示,你可能想要做一些維護。對於大多數擁有大量物品的人來說,它們正在放慢速度。在你的情況下,你應該禁用該警告。有問題的函數是hint_gc,它在git-gui腳本文件末尾附近調用。只是評論如下。

if {[is_enabled multicommit]} { 
     #after 1000 hint_gc 
} 

multicommit業務是一個標誌,確定我們是否作爲committool或通用應用程序運行。

如果你想在其他地方正常使用git-gui,那麼你可以添加一個respository特定的標誌。例如:

if {[is_enabled multicommit] && ![is_config_true gui.skip_gc_warning]} { 
     after 1000 hint_gc 
} 

應該讓您使用git config --bool gui.skip_gc_warning true在每個存儲庫的基礎上禁用該功能。

+0

這是個好主意!我試過了,但是你必須在'skip_gc_warning'中刪除下劃線'_'才能使它工作。我還在等待重新包裝解決方案(我很好奇,如果有可能的話)。否則這可能會成爲最好的答案。 –