más allá de comparar con `git difftool –dir-diff` – Golpear un problema con sym-links

Configura un nuevo repository git y agrega algunos files:

[Feb-09 18:35][Desktop]$ mkdir exampleForStackOverflow [Feb-09 18:35][Desktop]$ cd exampleForStackOverflow/ [Feb-09 18:35][exampleForStackOverflow]$ git init Initialized empty Git repository in ~/Desktop/exampleForStackOverflow/.git/ [Feb-09 18:35][exampleForStackOverflow]$ touch foo.txt [Feb-09 18:35][exampleForStackOverflow]$ touch bar.txt [Feb-09 18:35][exampleForStackOverflow]$ touch baz.txt [Feb-09 18:36][exampleForStackOverflow]$ git add * [Feb-09 18:36][exampleForStackOverflow]$ git commit -m "Create files" [master (root-commit) 42bfa60] Create files 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 bar.txt create mode 100644 baz.txt create mode 100644 foo.txt 

Modificar los files:

 [Feb-09 18:37][exampleForStackOverflow]$ echo "Foo" > foo.txt [Feb-09 18:37][exampleForStackOverflow]$ echo "Bar" > bar.txt [Feb-09 18:37][exampleForStackOverflow]$ echo "Baz" > baz.txt 

Estado actual:

 [Feb-09 18:38][exampleForStackOverflow]$ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: bar.txt modified: baz.txt modified: foo.txt no changes added to commit (use "git add" and/or "git commit -a") 

Diff actual:

 [Feb-09 18:38][exampleForStackOverflow]$ git diff diff --git a/bar.txt b/bar.txt index e69de29..ebd7525 100644 --- a/bar.txt +++ b/bar.txt @@ -0,0 +1 @@ +Bar diff --git a/baz.txt b/baz.txt index e69de29..a688182 100644 --- a/baz.txt +++ b/baz.txt @@ -0,0 +1 @@ +Baz diff --git a/foo.txt b/foo.txt index e69de29..bc56c4d 100644 --- a/foo.txt +++ b/foo.txt @@ -0,0 +1 @@ +Foo 

Ahora con bcompare obtengo lo siguiente:

 [Feb-09 18:38][exampleForStackOverflow]$ git difftool --dir-diff 

enter image description here

Esto claramente no es el comportamiento esperado. Los files no se alinean por lo que las diferencias no se pueden ver .


Estoy corriendo:

 [Feb-09 18:44][exampleForStackOverflow]$ git --version git version 2.7.1 [Feb-09 18:44][exampleForStackOverflow]$ cat /etc/networkinghat-release CentOS release 6.6 (Final) 

Beyond Compare: Version 4.1.3 (build 20814)

git config:

 [Feb-09 18:45][exampleForStackOverflow]$ git config --list color.ui=true user.name=FOO [email protected] log.decorate=full diff.tool=bc3 difftool.bc3=trustExitCode merge.tool=bc3 mergetool.bc3=trustExitCode core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true 

Pregunta: (De Ismail Badawi ) ¿Qué tiene esto que ver con los enlaces simbólicos?

Respuesta: Lamentablemente, la captura de pantalla no es muy clara, pero los files en el lado derecho son enlaces simbólicos. Vea abajo:

 [Feb-09 18:52][exampleForStackOverflow]$ cd /tmp/git-difftool.RWDqE/right [Feb-09 18:52][right]$ ll total 0 lrwxrwxrwx 1 BAZ BAZ_g 54 Feb 9 18:51 bar.txt -> /home/BAZ/Desktop/exampleForStackOverflow/bar.txt lrwxrwxrwx 1 BAZ BAZ_g 54 Feb 9 18:51 baz.txt -> /home/BAZ/Desktop/exampleForStackOverflow/baz.txt lrwxrwxrwx 1 BAZ BAZ_g 54 Feb 9 18:51 foo.txt -> /home/BAZ/Desktop/exampleForStackOverflow/foo.txt 

Además de la sugerencia de sixfootfootdude, otra opción es hacer que Beyond Compare siga enlaces simbólicos. Esto alineará enlaces simbólicos con files del mismo nombre.

En la comparación de carpetas , click el button de la barra de herramientas Reglas (icono de árbitro). Ve a la pestaña Manejo . Marque Seguir enlaces simbólicos .

Para que esto afecte a todas las sesiones nuevas, cambie la list desplegable en la parte inferior del cuadro de dialog de Usar para esta vista solo para también Actualizar los valores pnetworkingeterminados de la session antes de hacer clic en Aceptar.

Usar esto funcionará:

 git difftool --dir-diff --no-symlinks 

Del git doc :

– [no-] enlaces simbólicos

El comportamiento pnetworkingeterminado de git difftool es crear enlaces simbólicos al tree de trabajo cuando se ejecuta en modo –dir-diff y el lado derecho de la comparación produce el mismo contenido que el file en el tree de trabajo.

Especificar –no-symlinks instruye a git difftool para crear copys en su lugar. –no-symlinks es el valor pnetworkingeterminado en Windows.