¿Por qué la comunidad Git parece ignorar las diferencias de lado a lado [cerrado]

33

Solía ​​usar Windows, SVN, Tortoise SVN y Beyond Compare. Fue una gran combinación para hacer revisiones de código.

Ahora uso OSX y Git. Me las arreglé para reunir un script bash junto con Gitx y DiffMerge para encontrar una solución apenas aceptable.

Me he confundido con esta configuración y otras similares durante más de un año. También he intentado usar el visor de diferencias de Github y el visor de diferencias de Gitx, por lo que no es que no les haya dado una oportunidad.

Hay muchas personas inteligentes que hacen grandes cosas con Git. ¿Por qué no la diferencia lado a lado con la opción de ver el archivo completo? Con las personas que han usado ambos, nunca he oído hablar de alguien a quien le guste la vista individual +/- mejor, al menos por más de una comprobación rápida.

Kyle Heironimus
fuente
Puede configurar TortoiseGit para usar Beyond Compare para diiffs, en cuyo caso verá el archivo completo lado a lado (sin embargo, nunca probé esta configuración personalmente [pero planeo hacerlo, uno de estos días]).
wildpeaks
1
Solo un comentario, uso para usar Windows, SVN y Beyond Compare. Pero ahora uso Ubuntu + Git. Afortunadamente, todavía puedo usar a mi viejo amigo Beyond Compare. Funciona bien en Ubuntu. Y aunque no es gratis, vale cada centavo para mí. :) Lo siento, no puedo ofrecerle una solución en OSX, pero no quería que la gente pensara que Beyond Compare era una solución exclusiva de Windows.
David S
7 años después, todavía me siento de esta manera, pero me he entrenado para preferir la diferencia en línea en todos los casos, excepto en los más complejos. Luego saco a mi viejo amigo Beyond Compare.
Kyle Heironimus

Respuestas:

19

No puedo hablar por Linus sobre esto, pero la forma en que git maneja las herramientas de herramientas es muy poco elegante, filosóficamente hablando. git hace lo que hace muy bien y utiliza herramientas externas para todo lo demás, incluida la fusión y la fusión más sofisticadas.

También uso DiffMerge con git en OS X, y no he tenido que recurrir a ningún shell de bash. Fue complicado, pero configuré la configuración de herramienta de diferencias y herramientas de combinación de git para llamar a DiffMerge directamente, y ahora puedo ver diferencias y resolver conflictos de fusión en una excelente herramienta visual de terceros.

Aquí está mi configuración:

[mergetool "diffmerge"]
        cmd = "diffmerge --merge --result=\"$MERGED\" \"$LOCAL\" \"$(if test -f \"$BASE\"; then echo \"$BASE\"; else echo \"$LOCAL\"; fi)\" \"$REMOTE\""
        trustExitCode = false
[difftool "diffmerge"]
        cmd = diffmerge \"$LOCAL\" \"$REMOTE\"
[merge]
        tool = diffmerge
[diff]
        tool = diffmerge
Dan Ray
fuente
1
Esto funciona bien, pero cuando cambian varios archivos, puedo verlos uno a la vez, en el orden en que git decide mostrármelos. Debo cerrar una para abrir otra. Es por eso que también uso scripts bash cuando quiero ver todos los archivos a la vez.
Kyle Heironimus
No sé qué esperarías ver en términos de "mirarlos todos a la vez". Pero echa un vistazo git diff --stat. Le ofrece una buena lista gráfica de todos los archivos modificados, con el número de líneas modificadas.
Dan Ray
Pensando un poco más en esta cosa de "abrirlos todos a la vez" ... ¿Cuántos archivos puede editar / ver a la vez? Solo puedo mirar un archivo en un momento dado. Supongo que no entiendo lo que deseas que haga.
Dan Ray
2
El mejor ejemplo es TortoiseSVN con Beyond Compare. Por ejemplo, si el último commit de mi compañero de trabajo ha cambiado 3 archivos, mostrará los tres archivos en una lista. Luego puedo hacer clic en el archivo apropiado para ver las diferencias. También podría tener 3 ventanas separadas abiertas, cada una con el archivo diferente. Entonces puedo ir y venir entre ellos, según sea necesario para examinar el cambio. Básicamente, le permite ver todos los cambios en sus propios términos, no en serie en el orden dictado por sus vcs.
Kyle Heironimus
1
Sabes, deberías echar un vistazo a Tower. Es la mejor interfaz gráfica de usuario de Mac que he visto, y hace lo que estás hablando y MUCHO más. git-tower.com
Dan Ray
16

Notarás que SVN en sí mismo tampoco ofrece una solución de lado a lado. Lo que has enumerado son herramientas de terceros. Como con la mayoría de las cosas en git, esto es extraordinariamente configurable, y tiene un gran soporte de herramientas listo para usar. ¿Tiene configurada una herramienta de combinación ? Si no, deberías. Si lo haces, inténtalo git difftool. Luego eche un vistazo a la página de manual para ver las opciones de configuración.

Utilizo KDiff3 como mi herramienta de combinación, ya que es una buena herramienta multiplataforma, y ​​sin otra configuración, git difftoolhace exactamente lo que me pides.

Ryan Stewart
fuente
2
En realidad, funciona bien con difftool, pero aún falla cuando se miran muchos archivos. Deben abrirse uno a la vez. Para abrirlos todos a la vez, tengo que hacer hackeo de script bash.
Kyle Heironimus
9

Es la filosofía * nix. Muchas de las personas que usan estas herramientas pasan mucho tiempo en la terminal. El terminal no requiere que muevamos nuestras manos del teclado al mouse. Sé que prefiero el estilo +/- a las herramientas de combinación / diferencia visual, principalmente porque solo me importan las diferencias. Me importan las 3-4 líneas alrededor del cambio y el cambio en sí. Algo más es información extra que realmente no me ayuda.

Los diferenciales se usan comúnmente para echar un vistazo rápido a lo que se ha cambiado. No leer el código.

Nunca he encontrado que las herramientas de diferencia visual sean muy útiles en comparación con la diferencia predeterminada en los sistemas GNU. Todo lo que me hacen hacer es comenzar a jugar con el mouse y obligarme a desplazarme por el archivo, descubrir su interfaz de usuario y luego luchar para volver a la línea de comando donde puedo hacer algo sobre un problema que veo en la diferencia .

jsternberg
fuente
1
vimdiff está bien, generalmente solo te muestra las partes. Lo uso para fusiones; No es necesario un mouse.
alternativa
8
¿Alguna vez has visto los cambios realizados por un compañero de trabajo? ¿A áreas del código con las que no está tan familiarizado? Lo hago todo el tiempo, y no puedo imaginar hacerlo sin lado a lado, todo el código. Para mí, el +/- es excelente para los cambios realizados por be, pero no para otros. No digo que estés equivocado o que seas malo ni nada. Sólo preguntaba.
Kyle Heironimus
1
A menudo me encuentro con el código cambiado por los compañeros de trabajo, a menudo en áreas con las que no estoy familiarizado. Creo que he usado uno al lado del otro tal vez 3 o 4 veces, y podría haberlo hecho fácilmente sin él. Solo depende de cuál sea su estilo operativo preferido. Funciona para ti, lo encuentro innecesario.
Brian Knoblauch
0

Desde mi uso personal, creo que la respuesta es principalmente que las diferencias son lo suficientemente cortas como para que no importe.

Para las revisiones de código, utilizo una herramienta de revisión de código con todas las funciones, que me da todo lo que me gusta, como comentarios, resaltado de sintaxis y vista de lado a lado.

Lo uso git diffcasi exclusivamente durante la puesta en escena del código para confirmar; Cuando ese es el caso, los diferenciales son lo suficientemente pequeños, y lo suficientemente recientes, que no necesito ver el contexto para recordar lo que está sucediendo.

Mi herramienta de revisión de código de elección Phabricator , o posiblemente herramientas integradas por IDE, que son conscientes del contexto del lenguaje. Creo que el flujo de solicitud de extracción de github es terrible para la revisión de código, principalmente porque muestra diferencias unificadas y no una al lado de la otra.

aviv
fuente