Git补丁:忽略C++代码中的空格差异

4

我只关心 C++ 文件。(不用担心二进制文件、文本等内容...你可以假设所有的代码都是 C++ 代码)。

这些是我的分支:

* dev
  master

现在,我可以创建一个名为"magic"的新分支,其中分支"magic"相当于"dev"(从生成的C++代码角度来看),但最小化了与主分支之间无用的空白行差异(例如插入额外的换行符)。
这个可行吗?
谢谢!

你需要保留在开发中的更改历史记录吗? - leedm777
3个回答

1

你的问题对我来说不是很清楚。我认为你想让新分支包含一系列提交,这些提交与dev中的提交“等效”,但不包含不必要的空格更改。

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

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

这会在按时间正序排列的提交列表中打开一个编辑器。您可以将pick更改为希望更改的提交中的edit。Git然后会暂停处理这些提交之前,允许您使用git commit --amend修改它,然后继续使用git rebase --continue重新设置基础分支。当然,您可以运行脚本来清理文件,而不是手动编辑它们。如果要基于上一个提交的差异进行清理,则需要使用git cat-file blob HEAD ^:filename 来获取以前的版本,或者使用git diff HEAD ^ filename

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

如果要防止未来的提交包含空格错误,则可以设置一个pre-commithook来禁止它们。

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

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

然而,需要注意的是这可能会给那些已经在自己的仓库中拥有dev副本的人造成问题。此时最好进行合并操作。


0

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

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


0
你可以尝试设置一个post-merge hook,它将会:
  • 只有当前分支是magic时才会执行任何操作
  • 删除所有*.cpp文件的空白行
  • 创建一个新的提交(因为post-merge hook不能直接影响git merge的结果)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接