git diffツールを設定しようとするさまざまな方法は、「致命的:実行できない[…]:悪いアドレス」につながります


4

Linux Mint 17 64ビットを使用しています。で削除gitして再インストールしましたapt。削除しました~/.gitconfig。おそらく新規インストール後に行う設定のみが(レポ内で)

git config diff.tool vimdiff

それから私は走る

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

そして得る

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

そこで、関連する行を削除し.git/configてコマンドを再試行し、組み込みの基本的なgit diff作業を十分に確認します。

このチュートリアルの手順も試しました:http : //technotales.wordpress.com/2009/05/17/git-diff-with-vimdiff/

それはわずかに異なるが同様のエラーにつながります。以下に新しいものを置きます~/.gitconfig

[diff]
  external = git_diff_wrapper
[pager]
  diff =

そして、実行可能git_diff_wrapperファイルをmy PATHに配置して作成し、実行します

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

そして得る

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

ただし、のコンテンツとは関係がないようですgit_diff_wrapper。置いた

#!/bin/bash
echo hello

それに、それは何も変えません。ただし、ファイルを削除するか名前を変更すると、これが取得されます

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

この場合、「悪いアドレス」の代わりに「No such file or directory」と表示されていることに注意してください。

私は検索しましたが、オンラインで同様の問題のインスタンスを見つけることができません。

更新

仮想マシンにUbuntu 14.04を新規インストールしても同じ問題が発生します

更新

私はgitのソースを見るのに少し時間を費やしましたが、この関数の過程で( "Bad address")にerrno設定されていると確信しEFAULTています。

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

これはこれを呼び出します:

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

何か案は?

ありがとう


git difftool -C --tool = meld -Y masterを使用して名前を変更したファイルにも同じ問題があります。-Cフラグがなければクラッシュしません(ただし、名前の変更も表示されません...)
user3819503

回答:



0

私にとっての解決策は、git 2.xにアップグレードすることでした。git 2.3.4では、この問題は発生しなくなりました。


-1

Ubuntu14でも同じ問題が発生し、gitをv1.9.1からv2.11.0にアップグレードすることで修正されました。

私が説明するように、アップグレードのためのGitのメンテナのレポを使用する必要がありましたHERE


リンクのみの回答はあまり役に立ちません。回答には、関連するすべての情報が含まれている必要があります。
ラムハウンド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.