files example commits branches git language-agnostic diff semantic-diff

example - ¿Algoritmo git diff que no rasga funciones?(Difícil del lenguaje)



git pull (2)

¿Es posible configurar git diff para respetar la sangría y la sintaxis? No estoy hablando de ignorar la sangría y los espacios, sino más bien utilizar líneas en blanco, niveles de sangría y posiblemente corchetes, para ayudar a hacer coincidir las líneas antiguas con las nuevas.

Por ejemplo, git diff a menudo corta funciones y su bloque de documentos, como este:

class C { /** + * Goes to the bar. + */ + function bar() { + return ''bar''; + } + + /** * Gets your foo up to date. */ function foo() {

Cuando preferiria

class C { + + /** + * Goes to the bar. + */ + function bar() { + return ''bar''; + } /** * Gets your foo up to date. */ function foo() {

En este ejemplo, sigue siendo bastante inofensivo, pero hay ejemplos en los que las funciones y su docblock están realmente destrozados debido a la implementación codiciosa y vívida de la diferencia.

Nota: Ya configuré *.php diff=php en ~/.gitattributes .

EDITAR: Otro ejemplo: aquí git diff mezcla una propiedad docblock con un método docblock:

/** - * @var int + * @param string $str */



No sé cómo hacerlo solo en git, pero hay al menos una herramienta comercial (es decir, cuesta dinero) que se ocupa de ese tipo de problemas, llamada SemanticMerge .

Puede manejar muchos casos interesantes, y es compatible con C #, Java y parcialmente C. Puedes configurar git para usarlo como herramienta de combinación.

(No estoy afiliado).