14 Stimmen

Verzeichnisvergleich von Git-Zweigen

Einer meiner Lieblingsarbeitsabläufe mit svn ist die Verwendung der Ordnervergleichsfunktion von Beyond Compare, um die Nettounterschiede zwischen zwei Zweigen oder einem Zweig und dem Stamm zu sehen. Gibt es eine Möglichkeit, dies in Git zu tun, ohne manuell mehrere Klone desselben Repositorys erstellen zu müssen?

Während ich diese Frage stelle, fällt mir ein, dass ich ein Skript schreiben könnte, das das aktuelle Repo in ein temporäres Verzeichnis klont, den gewünschten Zweig auscheckt und dann BCompare.exe mit den beiden Verzeichnissen als Argumente aufruft. Die Ordnervergleichsansicht wird aufgerufen mit

BCompare.exe path/to/folder1 path/to/folder2

Hört sich das vernünftig an? Könnte ich den zusätzlichen Klon löschen, wenn ich mit Beyond Compare fertig bin?

34voto

VonC Punkte 1117238

Dies (Vergleich von Verzeichnissen statt von Dateien) sollte bald verfügbar sein:
Siehe [ANNOUNCE] Git 1.7.11.rc1 :

" git difftool " lernte die " --dir-diff "Option, um externe Diff-Tools zu erzeugen, die zwei Verzeichnishierarchien vergleichen nacheinander, nachdem zwei temporäre Verzeichnisse angelegt wurden, anstatt eine Instanz des externen Tools einmal pro Dateipaar auszuführen .

Siehe " Aufnäher difftool : unterrichten difftool zur Behandlung von Verzeichnisunterschieden ", aus diesem Abzweigung von Git :

Wann ' difftool ' aufgerufen wird, um eine Reihe von Commits zu vergleichen, die mehr als eine Datei ändern, wird für jede geänderte Datei eine eigene Instanz des Diff-Tools geöffnet.

Die neue ' --dir-diff ' kopiert alle geänderten Dateien an einen temporären Ort und führt einen Verzeichnisvergleich in einer einzigen Instanz des Vergleichsprogramms aus.

2voto

Russell Silva Punkte 2612

Es klingt, als hätten Sie bereits die richtige Antwort gefunden - verwenden Sie git clone y git checkout um ein Verzeichnis für den Vergleich einzurichten, und führen Sie dann BCompare.exe . Das folgende Skript könnte ein guter Ausgangspunkt sein.

#!/bin/sh
(                              # execute in a subshell so you can continue
                               #   working in the current shell
    set -o xtrace              # bash setting that echos each command before it's executed
    > /tmp/auto_bcompare_log   # truncate existing log file
    BRANCH="$1"                # get branch argument from command line
    TEMPDIR=`mktemp -d`        # get a temp directory
    CWD=`pwd`                  # remember the current directory
    git clone $CWD $TEMPDIR
    cd $TEMPDIR
    git checkout $BRANCH
    cd $CWD
    BCompare.exe $CWD $TEMPDIR
    rm -rf $TEMPDIR
) >> /tmp/auto_bcompare_log 2>&1 < /dev/null & # background and redirect
                                               # stdout/stderr/stdin

0voto

ustun Punkte 6723

Einfach git diff mit den Namen oder Hashes der Zweige, die Sie vergleichen wollen, so einfach ist das. Eigentlich können Sie zwei beliebige Commits anhand ihrer Hashes vergleichen.

0voto

Yoni Gerufi Punkte 21

Vergewissern Sie sich zunächst, dass Sie über den Vergleich hinaus Zugang haben,

können Sie verwenden: git difftool --tool-help um die verfügbaren Vergleichswerkzeuge aufzulisten. (um es als def G )

I

git difftool branch1 branch2 file -t bc   // or -d directory instead of file
git difftool hash1   hash2   file -t bc

E

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X