git msysgit beyondcompare3

git difftool--dir-diff no está creando archivos temporales para que Beyond Compare 3 pueda usar



msysgit beyondcompare3 (4)

Estoy intentando usar el nuevo comando git de git (a partir de git 1.7.11) con Beyond Compare 3 como herramienta de datos, pero los archivos temporales no se están creando.

Por ejemplo:

git difftool --dir-diff <branch1> <branch2>

Beyond Compare abre una comparación de directorios con los directorios correctos y los archivos modificados enumerados.

Sin embargo, cuando hago clic en cualquiera de los archivos, aparece el siguiente error:

Unable to load C:/Users/<username>/AppData/Local/Temp/git-difftool.yG8V5/left/<path to some file>: The system cannot find the path specified

Por lo tanto, C:/Users/<username>/AppData/Local/Temp/git-difftool.yG8V5 directorio C:/Users/<username>/AppData/Local/Temp/git-difftool.yG8V5 existe y no existe.

Beyond Compare 3 funciona bien como diftool para diferencias y combinaciones que no son de directorio.

Estoy usando git para Windows (msysgit) 1.8.0.

Aquí están las configuraciones relevantes de .gitconfig:

# External Visual Diff/Merge Tool [diff] tool = bc3 [difftool "bc3"] path = "C:/Program Files (x86)/Beyond Compare 3/BComp.exe" [merge] tool = bc3 [mergetool "bc3"] keepTemporaries = false trustExitCode = true keepBackup = false path = "C:/Program Files (x86)/Beyond Compare 3/BComp.exe"


Hay una solución descrita here . Básicamente, si modifica su archivo .gitconfig para usar BCompare.exe lugar de BComp.exe , la sesión de la consola permanecerá abierta hasta que se cierre la ventana Más allá de la comparación.

Modifique su configuración .gitconfig para leer:

# External Visual Diff/Merge Tool [diff] tool = bc3 [difftool "bc3"] path = "C:/Program Files (x86)/Beyond Compare 3/BCompare.exe"


Intenté la respuesta de @ScottWegner , pero solo funciona cuando Beyond Compare aún no se está ejecutando. Encontré la solución con la ayuda de la @SergeyAzarkevich de @SergeyAzarkevich . Esto es lo que hice en mi .gitconfig

[diff] tool = bc3 [difftool] prompt = false [difftool "bc3"] cmd = /"c:/program files (x86)/beyond compare 3/bcompare.exe/" -solo /"$LOCAL/" /"$REMOTE/"

Note el -solo . Esto hace que Beyond Compare genere una nueva instancia del programa.

En Windows, deberíamos usar la opción /solo , pero como el comando git difftool genera un sh.exe para procesar su línea de comandos, la opción /solo se interpretó incorrectamente como una ruta. Así que tengo que usarlo como -solo

Con esta opción, ejecuto start git difftool --dir-diff , por lo que esto liberará mi indicador de comando, y un nuevo indicador continuará esperando que salga la nueva instancia de Beyond Compare. Esto también se asegurará de que los archivos / carpetas temporales creados por git continúen en funcionamiento hasta que la herramienta diff salga.


La respuesta de Scott Wegner es que tiene un pequeño inconveniente: si intenta ejecutar 2 comparaciones simultáneamente, la segunda no funcionará. Esto se debe a que BCompare.exe no ejecuta la segunda instancia de la aplicación y, por lo tanto, el proceso de inicio demasiado pronto.

Lamentablemente, BCompare.exe no comprende la opción de línea de comandos /solo , por lo que escribo un pequeño archivo bat en el directorio de instalación de Beyond Compare 3:

C: / Archivos de programa (x86) / Beyond Compare 3 / BCompD.bat

start /wait "" "%~dp0/bcomp.exe" %* /solo

y usarlo como herramienta

[difftool "bc3dir"] path = C:/Program Files (x86)/Beyond Compare 3/bcompd.bat cmd = /"C:/Program Files (x86)/Beyond Compare 3/bcompd.bat/" /"$LOCAL/" /"$REMOTE/"

No uso esto como predeterminado por defecto, así que lo llamo bc3dir y uso como siguiente:

git difftool --dir-diff --tool=bc3dir 760be6d47d35b42a6a2409636b40a5521361e72f^ 760be6d47d35b42a6a2409636b40a5521361e72f


Tenga en cuenta que tiene otro caso en el que git difftool --dir-diff podría tener un mal comportamiento.

" git difftool --dir-diff " tuvo una regresión menor cuando se inició desde un subdirectorio, que se ha corregido con Git 2.12 (Q1 2017).

Ver commit 853e10c (07 de diciembre de 2016) por David Aguilar ( davvid ) .
(Fusionada por Junio ​​C Hamano - gitster - in commit afe0e2a , 19 de diciembre de 2016)

difftool : corrige la creación del índice dir-diff cuando se encuentra en un subdirectorio

9ec26e7 (manejo de argumentos difftool : fix en subdirs, 2016-07-18, Git 2.9.3) corrigió la forma en que se manejan los argumentos de ruta en un subdirectorio, pero introdujo una regresión en la forma en que dir-diff maneja las entradas fuera del subdirectorio.

Cuando preparamos el lado derecho de la diferencia, solo incluimos las rutas cambiadas en el área temporal.
El lado izquierdo del diff se construye a partir de un índice temporal que se construye a partir del mismo conjunto de archivos modificados, pero se está construyendo desde dentro del subdirectorio.
Esto es un problema porque las rutas indexadas son relativas al nivel del mismo nivel y, por lo tanto, no se agregaron al índice.

Enseñe difftool to chdir al nivel superior del repositorio antes de preparar sus índices temporales.
Esto asegura que todas las rutas relativas al nivel superior sean válidas.