git patch忽略空格diffs c ++

时间:2010-05-13 08:45:45

标签: c++ git

我唯一关心的是C ++文件。 (不要担心二进制文件,文本等...你可以假设一切都是C ++代码_)。

我有这些分支:

* dev
  master

现在,我可以创建一个新的分支“魔术”,其中分支魔法等同于“dev”(就生成的C ++代码而言),但最小化无用的whiteline差异(如插入额外的换行符)。 p>

这可能吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

我的问题并不完全清楚。我想你希望新分支包含一系列提交,这些提交与 dev 中的提交“等效”,但不包含不必要的空格更改。

最简单的方法是使用git rebase --interactive。这允许您手动编辑一系列提交。您可以使用git rev-list HEAD | tail -n 1获取第一个(“root”)提交的哈希值。如果你想编辑第一个提交,那就更难了,但是有一个SO答案。

git checkout dev
git checkout -b magic
git rebase --interactive $(git rev-list HEAD | tail -n 1)

这将按照正向时间顺序在提交列表中显示一个编辑器。您在要更改的提交上将选择更改为编辑。然后git会在处理每个提交之前暂停,允许您使用git commit --amend修改它,然后使用git rebase --continue继续使用rebase。您当然可以运行脚本来清理文件,而不是手动编辑它们。如果您希望根据与之前提交的差异执行此操作,则需要使用git cat-file blob HEAD^:filename之类的内容来获取以前的修订版,或使用git diff HEAD^ filename

如果您想自动完成整个过程,则可以使用git filter-branch --tree-filter script。有关详细信息,请查看 git-filter-branch 的手册页。

如果您想阻止将来的提交包含空格错误,可以设置预提交 hook以禁止它们。

一旦您对新分支 magic 感到满意,您可以使用它来替换 dev

git branch -m dev dev-old
git branch -m magic dev

但是,请注意,这可能会导致已经拥有自己的回购中 dev 副本的人员出现问题。那么做一个合并会更好。

答案 1 :(得分:0)

git diff --ignore-space-change ...

答案 2 :(得分:0)

你可以尝试设置一个post-merge hook,它将:

  • 只有当前分支是魔法时才会做任何事情
  • 删除* .cpp文件的所有白名单
  • 进行新的提交(因为post-merge挂钩不能直接影响git merge的结果)