有没有可能将git 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() {在这个例子中,它仍然是无害的,但是有一些例子表明,由于贪婪和幼稚的diff实现,函数和它们的docblock确实被撕裂了。
注意:我已经在~/.gitattributes中配置了*.php diff=php。
编辑:另一个例子:这里git diff混合了属性docblock和方法docblock:
/**
- * @var int
+ * @param string $str
*/发布于 2014-07-11 19:44:24
我不知道如何仅在git中做到这一点,但至少有一个商业工具(即它需要资金)可以处理这类问题,称为SemanticMerge。
它可以处理相当多很酷的情况,并且支持C#、Java和部分C语言。你可以配置git将其用作合并工具。
(我没有关联。)
发布于 2018-11-13 09:03:14
首先,使用更复杂的diff算法,比如:
git config --global diff.algorithm histogram还有像https://github.com/GumTreeDiff/gumtree这样的语义比较工具,其算法也已经在clang- diff:https://github.com/krobelus/clang-diff-playground中实现了
https://stackoverflow.com/questions/24162687
复制相似问题