用于重建git历史记录的脚本,将代码清理应用于每个版本

时间:2010-03-23 13:58:14

标签: git version-control history code-formatting

有没有人有git脚本可以浏览历史记录,检查每个版本,应用清理脚本,然后将清理后的版本检查到另一个存储库?

我有一些我一直在开发的代码,但我没有与代码格式保持一致,例如标签与空格等我想重写我的整个历史记录以符合新标准。

1 个答案:

答案 0 :(得分: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

  

警告!重写的历史记录将具有不同的对象名称   所有对象,不会与原始分支汇合。您   将无法轻松推送和分发重写的分支   在原始分支之上。如果,请不要使用此命令   你不知道完整的含义,并且无论如何都要避免使用它,   如果一个简单的单一提交就足以解决您的问题。 (看到   git-rebase(1)中的“从上游重新恢复”部分   有关重写已发布历史的更多信息。)