2010-03-23 36 views
2

有沒有人有一個可以瀏覽歷史的git腳本,查看每個版本,應用清理腳本,然後將清理後的版本檢入另一個存儲庫?重建git歷史的腳本,將代碼清理應用到每個版本

我有一些我一直在開發的代碼,但我沒有與代碼格式一致,例如標籤與空格等。我想重寫我的整個歷史,以符合新標準。

回答

5

git filter-branch命令可以滿足您的需求。

例如:

# Make a backup! 
cp -r <repo> <repo>.backup 
cd <repo> 
# Replace tabs with two spaces in all .cpp and .h files in all branches. 
git filter-branch --tree-filter \ 
    "find \(-iname '*.cpp' -o -iname '*.h' \) \ 
    -exec sed -i -re 's/\t/ /g' {} \;" -- --all 
# Delete branch backups created by 'git filter-branch'. 
# From the end of `man git filter-branch`; more cleanup 
# suggestions there. 
git for-each-ref --format="%(refname)" refs/original/ | \ 
    xargs -n 1 git update-ref -d 
# You still have ../<repo>.backup, in case something went wrong. 

但要小心......這些將git倉庫。 如果有人擁有一個克隆...它不會再連接到您的新回購。 從man git filter-branch

警告!重寫的歷史記錄對於所有對象將具有不同的對象名稱,並且不會與原始分支會聚。您 將無法​​輕鬆地將重寫的分支 推送並分發到原始分支的頂部。如果 不知道全部含義,請不要使用此命令,並且無論如何都要避免使用它,如果簡單的單個提交就足以解決您的問題,則請不要使用此命令, 。 (見 想改寫出版歷史的進一步資料混帳底墊(1)「恢復上游REBASE」部分 。)

+0

我使用上述以修正內容在個人回購橫跨三個部門約15提交時我意識到我開始使用的文件全是製表符(我在所有編輯中都使用了空格)。 – ntc2 2014-01-06 02:09:24