Estoy en Linux Mint 17 de 64 bits. Recién purgado git
y reinstalado con apt
. Eliminado ~/.gitconfig
. La única configuración que hago después de una instalación supuestamente nueva es (mientras estoy dentro de un repositorio)
git config diff.tool vimdiff
entonces corro
git difftool HEAD:switch-monitor.sh master:switch-monitor.sh
y obten
fatal: cannot exec 'git-difftool--helper': Bad address
external diff died, stopping at HEAD:switch-monitor.sh.
Así que elimino la línea pertinente .git/config
e intento el comando nuevamente y, efectivamente, el sistema básico integrado git diff
funciona.
También probé las instrucciones de este tutorial:http://technotales.wordpress.com/2009/05/17/git-diff-with-vimdiff/
Eso lleva a un error ligeramente diferente pero similar. coloco lo siguiente en un nuevo~/.gitconfig
[diff]
external = git_diff_wrapper
[pager]
diff =
Y coloque y haga ejecutable un git_diff_wrapper
archivo en my PATH
y ejecute
git diff HEAD:switch-monitor.sh master:switch-monitor.sh
Y obten
fatal: cannot exec 'git_diff_wrapper': Bad address
external diff died, stopping at HEAD:switch-monitor.sh.
Sin embargo, parece no tener nada que ver con el contenido de git_diff_wrapper
. Coloqué
#!/bin/bash
echo hello
En eso y eso no cambia nada. Sin embargo, si yoeliminarel archivo o cambiarle el nombre, entonces me sale esto
error: cannot run git_diff_wrapper: No such file or directory
external diff died, stopping at HEAD:switch-monitor.sh.
Tenga en cuenta que en este caso dice "No existe tal archivo o directorio" en lugar de "Dirección incorrecta".
He buscado y no puedo encontrar un caso de un problema similar en línea.
Actualizar
Tengo el mismo problema en una nueva instalación de Ubuntu 14.04 en una máquina virtual
Actualizar
He pasado algún tiempo mirando el código fuente de git y estoy bastante seguro de errno
que se está configurando en EFAULT
("Dirección incorrecta"), en el transcurso de esta función:
static int execv_shell_cmd(const char **argv)
{
const char **nargv = prepare_shell_cmd(argv);
trace_argv_printf(nargv, "trace: exec:");
sane_execvp(nargv[0], (char **)nargv);
free(nargv);
return -1;
}
Que llama a esto:
int sane_execvp(const char *file, char * const argv[])
{
if (!execvp(file, argv))
return 0; /* cannot happen ;-) */
/*
* When a command can't be found because one of the directories
* listed in $PATH is unsearchable, execvp reports EACCES, but
* careful usability testing (read: analysis of occasional bug
* reports) reveals that "No such file or directory" is more
* intuitive.
*
* We avoid commands with "/", because execvp will not do $PATH
* lookups in that case.
*
* The reassignment of EACCES to errno looks like a no-op below,
* but we need to protect against exists_in_PATH overwriting errno.
*/
if (errno == EACCES && !strchr(file, '/'))
errno = exists_in_PATH(file) ? EACCES : ENOENT;
else if (errno == ENOTDIR && !strchr(file, '/'))
errno = ENOENT;
return -1;
}
¿Algunas ideas?
Gracias
Respuesta1
Sé que este es un hilo antiguo, pero no parece estar cerrado...
Encontré un error similar (también quería usar vimdiff para verificar la diferencia entre las dos confirmaciones). Lo que funcionó para mí: git difftool HEAD..HEAD~1 --path-to-file/file
Salud
Respuesta2
La solución para mí fue actualizar a git 2.x. Con git 2.3.4, ya no tengo este problema.
Respuesta3
Tuve el mismo problema en Ubuntu14, solucionado actualizando git de v1.9.1 a v2.11.0.
Tuve que usar el repositorio de mantenimiento de git para la actualización, como se describeAQUÍ.