我正在使用 Git 来跟踪一些 matlab 代码。玩具示例最能说明问题。到目前为止,该项目看起来像这样。
C
/
A--
\
B
A 的内容是 x=5
我们提交 C,其中行更改为 x=6
然后我们进行提交 B,我们的内容如下所示
if flag==1
x=5
end
如果我们尝试与项目的目标 merge
C
/ \
A-- D
\ /
B
D 中的 merge 结果会产生冲突,因为两者的主线都已更改(B 中添加了缩进,C 中将 5 更改为 6)。
是否有最佳实践方法来整合来自一个分支的缩进更改和来自另一个分支的内容更改,以获得 merge 结果?
我在 https://stackoverflow.com/a/5262473/288545 中读到过一种策略, 虽然这可以避免冲突,但它会放弃缩进以支持内容更改(这是一种改进,但仍然会使代码更难阅读)。
我想我可以接受它并且在编写代码时不更改缩进。这使得它的可读性降低,但在 matlab 中并不是什么大问题。然而,在 python 中,缩进确实很重要,那么 python 人如何处理它呢?如果我们稍后将大块代码更改为位于控制结构内部,这将变得更加丑陋,因此差异会涉及很多行并使 merge 冲突成为一个令人头疼的问题。
是否有一种 merge 策略可以分别处理间距变化和内容变化,然后将它们整合?我希望 merge 的结果是
if flag==1
x=6
end
最佳答案
解决问题的关键是将空白清理和函数重写视为单独的提交。
作为一个经常进行分支集成的人,我可以诚实地说,对于集成商来说,最烦人的两件事是:1) 喜欢重新格式化不是他们编写的文件或他们没有重写的函数的编码人员,以及 2)只需打开和保存文件即可重新格式化整个文件的 IDE。当然,在这两种情况下文件都更具可读性,但这完全违背了版本控制的 Gist :提交应该智能地调整大小、构建和审查。他们的命令应该有意义。厨房水槽提交会产生无用的历史记录,而历史记录应该只是有用的。
这种理念意味着“不要将空白更改转储到不属于它们的提交中”。如果您要重写 touched 函数,当然可以改进间距。否则将其留给自己提交,并确保处理该文件的其他人知道即将进行空白更改。这将使您在集成时省去麻烦。
此外,您可以使用 git 的 stock 预提交 Hook 避免意外的空白错误(尾随空格、空格后的制表符等)。在您的存储库中发出此命令以进行设置:
mv .git/hooks/pre-commit.sample .git/hooks/pre-commit
它或多或少会发出 git diff --check
问题,这对于检测这些类型的问题也非常有用。
关于python - merge 期间在 Git 中集成缩进和内容更改 : Best practices?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12376550/