Vários métodos de tentativa de configurar uma ferramenta git diff levam a "fatal: não é possível executar [...]: endereço incorreto"

Vários métodos de tentativa de configurar uma ferramenta git diff levam a "fatal: não é possível executar [...]: endereço incorreto"

Estou no Linux Mint 17 de 64 bits. Apenas purgado gite reinstalado com apt. Excluído ~/.gitconfig. A única configuração que faço após uma instalação supostamente nova é (enquanto dentro de um repositório)

git config diff.tool vimdiff

Então eu corro

git difftool HEAD:switch-monitor.sh master:switch-monitor.sh

e pegue

fatal: cannot exec 'git-difftool--helper': Bad address
external diff died, stopping at HEAD:switch-monitor.sh.

Então, removo a linha pertinente .git/confige tento o comando novamente, e com certeza o básico integrado git difffunciona.

Eu também tentei as instruções neste tutorial:http://technotales.wordpress.com/2009/05/17/git-diff-with-vimdiff/

Isso leva a um erro ligeiramente diferente, mas semelhante. Eu coloco o seguinte em um novo~/.gitconfig

[diff]
  external = git_diff_wrapper
[pager]
  diff =

E coloque e torne executável um git_diff_wrapperarquivo no meu PATHe execute

git diff HEAD:switch-monitor.sh master:switch-monitor.sh 

E pegue

fatal: cannot exec 'git_diff_wrapper': Bad address
external diff died, stopping at HEAD:switch-monitor.sh.

No entanto, parece não ter nada a ver com o conteúdo de git_diff_wrapper. eu coloquei

#!/bin/bash
echo hello

Entre nisso e isso não muda nada. No entanto, se euremovero arquivo ou renomeá-lo, então eu entendo isso

error: cannot run git_diff_wrapper: No such file or directory
external diff died, stopping at HEAD:switch-monitor.sh.

Observe que diz "Esse arquivo ou diretório não existe" em vez de "Endereço incorreto" neste caso.

Pesquisei e não consigo encontrar uma instância de problema semelhante online.

Atualizar

Estou tendo o mesmo problema em uma nova instalação do Ubuntu 14.04 em uma máquina virtual

Atualizar

Passei algum tempo olhando a fonte do git e tenho certeza errnoque está sendo definido como EFAULT("Endereço incorreto"), no decorrer desta função:

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;
}

O que chama isso:

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;
}

Alguma ideia?

Obrigado

Responder1

Eu sei que este é um tópico antigo, mas não parece estar fechado...

Encontrei um erro semelhante (também queria usar o vimdiff para verificar a diferença entre os dois commits). O que funcionou para mim: git difftool HEAD..HEAD~1 --path-to-file/file

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

Saúde

Responder2

A solução para mim foi atualizar para o git 2.x. Com o git 2.3.4, não tenho mais esse problema.

Responder3

Eu tive o mesmo problema no Ubuntu14, corrigido atualizando o git da v1.9.1 para a v2.11.0.

Eu tive que usar o repositório git mantenedor para a atualização, conforme descritoAQUI.

informação relacionada