2016-05-12 62 views
2

我使用bfg從git倉庫一(克隆)刪除一些子目錄:混帳:使用高爐煤氣重複後--prune空承諾

java -jar bfg-1.12.12.jar --delete-folders {folder1,folder2,folder3} --no-blob-protection myrepo.git/ 
git reflog expire --expire=now --all && git gc --prune=now --aggressive 

這工作不錯,但我已經使用高爐煤氣後,我有許多空提交(即提交良好的日誌消息,但沒有更改,因爲他們只接觸現在已被刪除的文件)。

因此,作爲下一步我試圖用

git filter-branch --commit-filter 'git_commit_non_empty_tree "[email protected]"' HEAD 

git filter-branch --prune-empty --tag-name-filter cat -- --all 

兩個版本沒有收到預期的效果(除去空提交)。

相反,我結束了一個資料庫,其中(見下面的截圖,左邊是修剪前,右邊是後):

  1. 幾個空的提交已被刪除
  2. 最空提交保持
  3. 非空提交被複制在提交

enter image description here

單獨列車

有何建議?

+0

你是如何創建'myrepo.git'的? - 根據BFG指導原則,它是一個裸/鏡像存儲庫嗎? – javabrett

+0

我用'git clone --mirror https://:@git ....'。那是正確的方法嗎? – fuenfundachtzig

+0

是的。在「filter-branch」開始之前,你是否還推回並重新獲取'origin'? – javabrett

回答

3

從您看到的重複歷史記錄中可以看出,您的BFG運行後嘗試刪除舊的,現在改寫的提交歷史記錄失敗。這可能有多種原因,但主要原因是如果myrepo.git不是BFG指令中列出的裸/鏡像副本回購。

某些東西正在保留舊的BFG前重寫歷史記錄,現在顯示爲重複記錄。這個歷史記錄可能存儲在一個遠程文件中,例如origin,這也可以解釋爲什麼你的filter-branch沒有刪除你期望的所有空提交。

最後,您可能對add the --prune-empty-commits feature to BFG的當前拉動請求感興趣 - 它運行良好,並且與所有BFG一樣,運行速度比運行filter-branch快幾個數量級。

+0

哪個版本你試圖建立?最新的PR 52a2ae7應該沒問題,也許你建了一箇舊版本。如果這個修改沒有建立,請在公關留言。 – javabrett

+0

經過仔細檢查,我簽出正確的版本,它編譯罰款。 (對不起,我第一次嘗試編譯github的pull請求。) – fuenfundachtzig

+0

它似乎比'git filter-branch'解決方案好得多。還有一些令人討厭的(空的)「合併分支」......的主人「,但除此之外,歷史是清潔的。 – fuenfundachtzig