以下是我用來重寫多個父存儲庫中引用的子模塊的歷史記錄的腳本。這在Windows環境中運行在Git bash中。重新編寫子模塊的git歷史記錄後,更新對父存儲庫中子模塊的引用
#!/bin/bash
cd submodule_repo
git filter-branch --index-filter 'git rm -q --cached --ignore-unmatch files_to_remove' \--tag-name-filter cat -- --all
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --prune=now
我需要的SHA一箇舊提交的某種方式映射到新創建的SHA S,這樣我就可以更新父庫相同的參考。有沒有辦法做到這一點?我確實看過Repository with submodules after rewriting history of submodule,但這並不是真正的幫助,因爲我正在更新原始參考文件,以確保我刪除的文件不會被任何機會重新打包。我對使用git比較陌生,所以任何指導都會非常感激。
編輯:
繼公認的答案(由@torek)的評論部分中提到的步驟爲我工作。
謝謝@torek這是令人失望的:(應該有一個選項來保留或放棄地圖一旦過濾器分支完成,將在這種情況下非常有用。任何解決方法,我可以用來手動創建地圖? –
最簡單的方法就是修改過濾分支代碼,這是一個shell腳本,所以修改起來非常簡單,只需找到刪除臨時目錄的地方,然後讓它對地圖進行一些有用的操作即可保存。 – torek
已經有一段時間了,但現在我又回到了這個任務,所以我使用了'$ GIT_COMMIT'變量,如[這裏]所述(https://stackoverflow.com/questions/14782906/how-do-i-get- ),並創建了地圖作爲filter-branch的一部分,它似乎正確地填充地圖(所有我的修改提交在地圖中註冊)以及舊的提交。 –