Varios métodos para intentar configurar una herramienta git diff conducen a "fatal: no se puede ejecutar [...]: dirección incorrecta"

Varios métodos para intentar configurar una herramienta git diff conducen a "fatal: no se puede ejecutar [...]: dirección incorrecta"

Estoy en Linux Mint 17 de 64 bits. Recién purgado gity 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/confige intento el comando nuevamente y, efectivamente, el sistema básico integrado git difffunciona.

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_wrapperarchivo en my PATHy 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 errnoque 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

como enhttps://stackoverflow.com/questions/3338126/git-how-to-diff-the-same-file-between-two- Different-commits-on-the-same-branch

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Í.

información relacionada