Verschiedene Methoden, ein git diff-Tool einzurichten, führen zu "fatal: [...] exec [...]: schlechte Adresse".

2228
user354932

Ich bin auf Linux Mint 17 64-Bit. Einfach gereinigt gitund mit neu installiert apt. Gelöscht ~/.gitconfig. Die einzige Konfiguration, die ich nach angeblich neu installieren muss, ist (während in einem Repo)

git config diff.tool vimdiff 

Dann laufe ich

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

und bekomme

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

Also entferne ich die betreffende Zeile .git/configund versuche den Befehl erneut, und die eingebauten Grundfunktionen git difffunktionieren.

Ich habe auch die Anweisungen in diesem Tutorial ausprobiert: http://technotales.wordpress.com/2009/05/17/git-diff-with-vimdiff/

Das führt zu einem etwas anderen, aber ähnlichen Fehler. Ich stelle folgendes in ein neues~/.gitconfig

[diff] external = git_diff_wrapper [pager] diff = 

Und platziere und mache eine ausführbare git_diff_wrapperDatei auf meinem PATHund führe es aus

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

Und bekomme

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

Es scheint jedoch nichts mit dem Inhalt von zu tun zu haben git_diff_wrapper. Ich platzierte

#!/bin/bash echo hello 

Daran und das ändert nichts. Wenn ich jedoch die Datei entferne oder umbenenne, bekomme ich diese

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

Beachten Sie, dass in diesem Fall "Keine solche Datei oder ein solches Verzeichnis" anstelle von "Ungültige Adresse" angezeigt wird.

Ich habe online ein ähnliches Problem gefunden und kann es nicht finden.

Aktualisieren

Das gleiche Problem tritt bei einer Neuinstallation von Ubuntu 14.04 auf einer virtuellen Maschine auf

Aktualisieren

Ich habe einige Zeit damit verbracht an git der Quelle suchen, und ich bin mir ziemlich sicher errnowird immer gesetzt EFAULT( „Bad - Adresse“), im Laufe dieser Funktion:

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

Welches nennt das:

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

Irgendwelche Ideen?

Vielen Dank

4
Ich habe das gleiche Problem bei umbenannten Dateien mit git difftool -C --tool = meld -Y master Ohne die -C-Markierung stürzt sie nicht ab (sie sieht jedoch keine Umbenennungen ...) user3819503 vor 9 Jahren 0

3 Antworten auf die Frage

1
uros

Ich weiß, dass dies ein alter Thread ist, aber es scheint nicht geschlossen zu sein ...

Ich bin auf einen ähnlichen Fehler gestoßen (ich wollte auch vimdiff verwenden, um den Unterschied zwischen den beiden Commits zu überprüfen). Was für mich funktioniert hat: git difftool HEAD..HEAD ~ 1 --path-to-file / file

wie in https://stackoverflow.com/questions/3338126/git-how-to-diff-the-same-file-file-zwischen-zwei-different-commits-on-der-samestation

Prost

0
Stephen

Die Lösung für mich war ein Upgrade auf git 2.x. Mit git 2.3.4 habe ich dieses Problem nicht mehr.

-1
sam

Ich hatte das gleiche Problem auf Ubuntu14, behoben durch ein Upgrade von git von v1.9.1 auf v2.11.0.

Ich hatte git Maintainer Repo für das Upgrade zu verwenden, wie beschrieben HIER .

Nur-Link-Antworten sind nicht sehr hilfreich. Ihre Antwort selbst sollte alle relevanten Informationen enthalten. Ramhound vor 7 Jahren 0