Das Standardverhalten von git diff besteht darin, jede diff-Datei seriell zu öffnen (warten Sie, bis die vorherige Datei geschlossen ist, bevor Sie die nächste Datei öffnen).
Ich suche nach einer Möglichkeit, alle Dateien auf einmal zu öffnen. In BeyondCompare würde dies beispielsweise alle Dateien in Registerkarten innerhalb desselben BC-Fensters öffnen.
Dies würde es einfacher machen, eine komplexe Reihe von Änderungen zu überprüfen. Blättern Sie zwischen den Diff-Dateien hin und her und ignorieren Sie unwichtige Dateien.
Antworten:
Ab
git
Version 1.7.11 können Siegit difftool --dir-diff
einen Verzeichnisdifferenz ausführen.Diese Funktion funktioniert beispielsweise gut mit Meld 3.14.2 und ermöglicht das Durchsuchen aller geänderten Dateien:
Dies ist eine praktische Bash-Funktion:
Die folgende Antwort gilt für
git
Installationen, die älter als Version 1.7.11 sind.Dieselbe Frage wurde auf der Git-Mail-Liste gestellt .
Ich habe ein Shell-Skript zusammengestellt, das auf diesem E-Mail-Thread basiert und einen Verzeichnisunterschied zwischen beliebigen Commits ausführt.
Ab Git v1.7.10 ist das
git-diffall
Skript incontrib
der Standard-Git-Installation enthalten.Für Versionen vor v1.7.10 können Sie aus dem
git-diffall
Projekt auf GitHub installieren .Hier ist die Projektbeschreibung:
quelle
git difftool --dir-diff
und Beyond Compare): Ich habe Scooter Software (Autoren von Beyond Compare) kontaktiert und sie sagen, dass diesbcompare.exe
keine unterstützte Lösung ist und Probleme verursachen kann, wenn mehr als ein Diff gleichzeitig geöffnet ist. Sie planen,bcomp.exe
in einer zukünftigen Version Unterstützung für Ordnerunterschiede hinzuzufügen (in der Zwischenzeit werde ich diese weiterhinbcompare.exe
als nicht unterstützte Problemumgehung verwenden).--dir-diff
perfekt mit Meld funktioniert. Von dort aus können Sie Unterschiede für einzelne Dateien auswählen und anzeigen.Hier ist, worauf ich mich festgelegt habe ...
Kopieren Sie den folgenden Code in eine Datei mit dem Namen
git-diffall
(keine Erweiterung):Legen Sie die Datei in den
cmd
Ordner Ihrer git Installationsverzeichnis (zBC:\Program Files (x86)\Git\cmd
)Und verwenden Sie wie Sie würden
git diff
:Hinweise: Der Schlüssel dazu ist & param, der den externen diff-Befehl anweist, in einer Hintergrundaufgabe ausgeführt zu werden, damit Dateien sofort verarbeitet werden. Im Fall von BeyondCompare wird ein Bildschirm mit jeder Datei auf einer eigenen Registerkarte geöffnet.
quelle
"$filename"
zu"../$filename"
. Dann funktionierte es perfekt mit Beyond Comparegit-diffall
Datei zumC:\Program Files\Git\cmd
Ordner hinzugefügt haben ? Ich tat genau wie angewiesen, aber als ich es tat$ git diffall git: 'diffall' is not a git command. See 'git --help'. Did you mean this? difftool
meld
hat eine nette Funktion, die, wenn Sie ihm ein Verzeichnis unter Quellcodeverwaltung geben (Git, Mercurial, Subversion, Bazaar und wahrscheinlich andere), automatisch alle geänderten Dateien auflistet und Sie doppelklicken können, um die einzelnen Unterschiede anzuzeigen.IMO ist es viel einfacher
meld .
, das VCS einzugeben und herauszufinden, als das VCS für den Start zu konfigurierenmeld
. Außerdem können Sie denselben Befehl verwenden, unabhängig davon, welches VCS Ihr Projekt gerade verwendet. Dies ist großartig, wenn Sie häufig zwischen diesen wechseln.Der einzige Nachteil ist, dass es für meld langsamer ist, nach Änderungen zu suchen, als die Änderungen von git / hg / svn zu übergeben. Ob es jedoch langsam genug ist, um ein Problem zu sein, hängt davon ab, wie Sie es verwenden, da bin ich mir sicher.
quelle
git diff
nicht möglich ist.Ich habe diese Methode gefunden (GitDiff.bat und GitDiff.rb), die die Dateien in alte / neue temporäre Verzeichnisse kopiert und dann einen Ordner vergleicht.
Ich möchte die Arbeitsdateien jedoch lieber direkt (aus dem Arbeitsverzeichnis) anzeigen, da BeyondCompare die praktische Funktion bietet, die Datei aus dem Diff-Fenster heraus bearbeiten zu können, was sich hervorragend für schnelle Bereinigungen eignet.
Bearbeiten: eine ähnliche Methode hier als Antwort auf meine Frage auf der Git-Mailingliste.
quelle
git meld
=> https://github.com/wmanley/git-meld ist ein fantastisches Skript, das einen ordentlichen Unterschied aller Dateien in einem einzigen Fenster öffnet.quelle
Hier wurde festgestellt, dass Araxis Merge eine Befehlsoption '-nowait' hat:
Vielleicht gibt dies einen sofortigen Exit-Code zurück und würde funktionieren, hat das jemand erlebt? Eine ähnliche Option für BeyondCompare kann nicht gefunden werden ...
quelle
Diffuse hat auch VCS-Integration. Es arbeitet mit einer Vielzahl anderer VCS zusammen, einschließlich SVN, Mercurial, Bazaar, ... Für Git werden sogar drei Fenster angezeigt, wenn einige, aber nicht alle Änderungen vorgenommen werden. Bei Konflikten gibt es sogar vier Fenster.
Rufe es mit auf
in Ihrer Git-Arbeitskopie.
Wenn Sie mich fragen, ist der beste visuelle Unterschied, den ich seit einem Jahrzehnt gesehen habe. (Und ich habe auch versucht zu verschmelzen.)
quelle
Wenn Sie nur alle aktuell geänderten Dateien öffnen möchten, versuchen Sie Folgendes:
Wenn Sie "komplexe Änderungssätze" festschreiben, möchten Sie möglicherweise Ihren Workflow überdenken. Eine der wirklich schönen Eigenschaften von git ist, dass es dem Entwickler leicht fällt, komplexe Änderungssätze auf eine Reihe einfacher Patches zu reduzieren. Anstatt zu versuchen, alle aktuell geänderten Dateien zu bearbeiten, sollten Sie sich diese ansehen
Dadurch können Sie selektiv Hunks inszenieren.quelle
Ich habe ein Powershell-Skript geschrieben, das zwei Arbeitsbäume dupliziert und mit DiffMerge vergleicht. So können Sie tun:
Zum Beispiel, um den Hauptzweig vor drei Checkins mit dem aktuellen Arbeitsbaum zu vergleichen.
Es ist glänzend und neu und wahrscheinlich voller Käfer. Ein Nachteil ist, dass Dateien in Ihrem Arbeitsbaum, die noch nicht hinzugefügt wurden, in beide Arbeitsbäume kopiert werden. Es kann auch langsam sein.
http://github.com/fschwiet/GitNdiff
quelle
Für diejenigen, die an der Verwendung von git-diffall unter Mac OS X mit Araxis interessiert sind, habe ich das git-diffall-Projekt auf github gegabelt und ein AppleScript hinzugefügt, das den Befehl Araxis Merge umschließt. Hinweis: Dies ist ein leicht geänderter Klon der
araxisgitdiff
Datei, die mit Araxis Merge für Mac OS X geliefert wird.https://github.com/sorens/git-diffall
quelle
Das Folgende funktioniert mit meld und kdiff3
Öffnet alle Dateien in einem Fenster, das Sie problemlos durchsuchen können. Kann mit Änderungssätzen anstelle von Ursprungs- / Zweignamen verwendet werden
z.B:
git difftool --dir-diff origin/master..24604fb72f7e16ed44115fbd88b447779cc74bb1
quelle
Sie können gitk verwenden und alle Unterschiede gleichzeitig sehen
quelle