不区分function的git diffalgorithm? (语言意识差异)
可以configurationgit diff来尊重缩进和语法吗? 我不是在谈论忽略缩进和空格,而是使用空行,缩进级别和可能的括号来帮助将旧行匹配到新行。
例如,git diff通常会切换函数和docblock,如下所示:
class C { /** + * Goes to the bar. + */ + function bar() { + return 'bar'; + } + + /** * Gets your foo up to date. */ function foo() {
当我更喜欢
class C { + + /** + * Goes to the bar. + */ + function bar() { + return 'bar'; + } /** * Gets your foo up to date. */ function foo() {
在这个例子中,它仍然是非常无害的,但是有一些例子,function和它们的docblock由于贪婪和天真的差异实现而被真正的撕开了。
注意:我已经在~/.gitattributes
configuration了*.php diff=php
。
编辑:另一个例子:在这里git diff混合一个方法docblock属性docblock:
/** - * @var int + * @param string $str */
我不知道如何在git上单独做这件事,但至less有一个商业工具(即花钱)来处理这种问题,称为SemanticMerge 。
它可以处理很多很酷的情况,并支持C#,Java和部分C.你可以configurationgit使用它作为合并工具。
(我不隶属于)