web-dev-qa-db-de.com

Git diff --stat den vollständigen Dateipfad anzeigen lassen

Bei der Ausführung von git diff --stat werden einige Dateien mit vollständigem Pfad von der Repository-Basis aus aufgelistet. Einige Dateien werden jedoch als:

.../short/path/to/filename.  

Der Pfad beginnt mit ... und es wird nur ein kurzer Pfad angezeigt.

Ich möchte, dass git diff den vollständigen Dateipfad für alle Dateien aufführt, damit er von einem Skript leicht verarbeitet werden kann. Gibt es eine Möglichkeit, git diff immer den vollständigen Pfad anzuzeigen?

77
Badri

Der Befehl git diff akzeptiert optionale Werte für --stat:

--stat[=<width>[,<name-width>[,<count>]]]
       Generate a diffstat. You can override the default output width for
       80-column terminal by --stat=<width>. The width of the filename
       part can be controlled by giving another width to it separated by a
       comma. By giving a third parameter <count>, you can limit the
       output to the first <count> lines, followed by ...  if there are
       more.

       These parameters can also be set individually with
       --stat-width=<width>, --stat-name-width=<name-width> and
       --stat-count=<count>.

(Für das Scripting möchten Sie vielleicht git diff-tree direkt verwenden, da es sich eher um einen "Klempner" -Befehl handelt, obwohl ich vermute, dass Sie auf jeden Fall in Ordnung sein werden. Beachten Sie, dass Sie bei Verwendung von --stat denselben zusätzlichen Text mit git diff-tree benötigen. Der wesentliche Unterschied zwischen der Verwendung von Das git diff "porcelain" -Frontend und der git diff-tree-Klempnerbefehl besagen, dass git diff in Ihren konfigurierten Einstellungen nach Optionen wie diff.renames sucht, um zu entscheiden, ob eine Umbenennungserkennung durchgeführt werden soll. Nun, plus das Frontend git diff entspricht git diff-index if Sie vergleichen beispielsweise ein Commit mit dem Index. Mit anderen Worten: git diff liest Ihre config und ruft automatisch die richtige Installation auf .)

83
torek

Für Bash-Benutzer können Sie die Variable $COLUMNS verwenden, um die verfügbare Terminalbreite automatisch auszufüllen:

git diff --stat=$COLUMNS

Sehr lange Pfadnamen werden möglicherweise noch abgeschnitten. In diesem Fall können Sie die Breite des +++/--- -Teils mit --stat-graph-width reduzieren, z.

git show --stat=$COLUMNS --stat-graph-width=$(($COLUMNS/5))

Für eine allgemeinere Lösung können Sie die Ausgabe von tput cols verwenden, um die Klemmenbreite zu bestimmen.

12
John Mellor

Für die Skriptverarbeitung ist es möglicherweise besser, eine der folgenden Optionen zu verwenden:

# list just the file names
git diff --name-only
path/to/modified/file
path/to/renamed/file


# list the names and change statuses:
git diff --name-status
M       path/to/modified/file
R100    path/to/existing/file   path/to/renamed/file


# list a diffstat-like output (+ed lines, -ed lines, file name):
git diff --numstat
1       0       path/to/modified/file
0       0       path/to/{existing => renamed}/file

Diese sind für eine robuste Skriptverarbeitung in Kombination mit der Option -z, die NUL als Feldabschlusszeichen verwendet, praktischer.

12
cmbuckley

Ich habe den folgenden Git-Alias ​​erstellt:

diffstat = ! "gitdiffstat() {  git diff --stat=$(tput cols) ${1:-master} ; }; gitdiffstat"

Es liest die Spaltenanzahl aus dem Befehl tput cols. Standardmäßig unterscheidet es sich von master, aber Sie können optional einen anderen Zweig angeben.

$ git diffstat
 .gitalias | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
0
user151841

Eine einfache Lösung, die ich gefunden habe, war, dies zu tun: (funktioniert nur auf * nix, sorry no osx)

git diff --stat=$COLUMNS --relative | head -n -1 | cut -c 2- | xargs -d '\n' -P4 printf "$(pwd)/%s\n"

Diese Version funktioniert für beide, sieht aber auf osx nicht gut aus.

git diff --stat=$COLUMNS --relative | sed -e '$ d' | cut -c 2- | xargs -n4 -I{} echo "$(pwd)/{}"
0
Javier Buzzi

Es gibt eine Option --name-only: git diff --name-only. Die Option wird auch von anderen git-Befehlen wie show und stash unterstützt.

Pfade werden mit der Option nicht gekürzt.

0
Yevhen Pavliuk