Zwischen zwei ganzen Verzeichnissen/Projekten in hg oder git unterscheiden?
Lesezeit: 5 Minuten
meder omuraliev
Ich habe ein ursprünglich in CVS gespeichertes Projekt mit allen Revisionen geerbt. Ich habe einige Änderungen vorgenommen und versuche, alle Änderungen, die ich im ursprünglichen Verzeichnis vorgenommen habe, in Bezug auf neu hinzugefügte Dateien mit den alten zu vergleichen.
Gibt es eine Art Dienstprogramm für hg/git, mit dem ich einen Baumunterschied oder etwas in der Art machen kann? Das heißt, es gibt eine Markierung zwischen neu hinzugefügten Dateien und gelöschten Dateien. Verlange ich zu viel?
Zu Erstellen Sie einfach einen Diff-Patch im Diff-Format von git aus zwei beliebigen Dateien oder Verzeichnissen, ohne ausgefallenes Repository-Zeug oder Versionskontrolle:
Jakub Narębskis Kommentar zu knittls Antwort deutete auf die Antwort hin … Der Einfachheit halber ist dies der vollständige Befehl.
Die > part erstellt eine Datei und leitet die Ausgabe dorthin um. Wenn Sie keine Datei möchten und nur die Ausgabe in Ihrer Konsole gedruckt haben möchten, damit Sie sie kopieren können, entfernen Sie einfach die > some_filename Teil.
Zum bequemen Kopieren und Einfügen, falls Sie dies bereits getan haben cdin ein Verzeichnis geschrieben, das das ursprüngliche Verzeichnis/die Datei mit dem Namen enthält a und das geänderte Verzeichnis bEs wird sein:
git diff --no-index a b > patch
Benutzen git diff Optionen, fügen Sie die Optionen vor den Pfaden hinzu. Z.B git diff --name-status --no-index some/path other/path arbeitet mit der --name-status Möglichkeit.
– Shaun Lutin
8. Januar 2017 um 22:31 Uhr
verwenden --binary für Binärdateien, sonst sagt der Patch nur “Binärdateien unterscheiden sich”
– qwr
11. Juli 2020 um 0:05 Uhr
Aus der git-diff-Manpage: „Sie können das weglassen --no-index Option, wenn der Befehl in einem von Git kontrollierten Arbeitsbaum ausgeführt wird und mindestens einer der Pfade außerhalb des Arbeitsbaums zeigt, oder wenn der Befehl außerhalb eines von Git kontrollierten Arbeitsbaums ausgeführt wird.”
Wenn genau zwei Pfade angegeben sind und mindestens einer nicht verfolgt wird, vergleichen Sie die beiden Dateien / Verzeichnisse. Dieses Verhalten kann erzwungen werden --no-index.
Wenn Sie zwei Versionen (z. B. zwei getaggte Releases oder zwei Zweige) in zwei verschiedenen Repositories vergleichen möchten, können Sie den in beschriebenen Trick verwenden GitTipps Seite im Git-Wiki unter “Wie man zwei lokale Repositories vergleicht”.
Angenommen, Sie befinden sich in einem Repository und das zweite Repository befindet sich darin /path/to/repoalso ist es GIT_DIR /path/to/repo/.git Wenn es sich um ein Non-Bare-Repository handelt, können Sie Folgendes tun:
$ GIT_ALTERNATE_OBJECT_DIRECTORIES=/path/to/repo/.git/objects \
git diff $(git --git-dir=/path/to/repo/.git rev-parse --verify A) B
wobei A und B Revisionen sind, die Sie vergleichen möchten. Natürlich können Sie im obigen Ausdruck auch Pfadbegrenzer angeben.
Erläuterung:GIT_ALTERNATE_OBJECT_REPOSITORIES Variable kann verwendet werden, um Git-Befehle dazu zu bringen, die Objektdatenbank der beiden Repositories zu verketten. git --git-dir=... rev-parse ... wird verwendet, um den Namen (erweiterter SHA-1-Ausdruck) im als Parameter angegebenen Repository umzuwandeln git-dir Option in eine eindeutige SHA-1-Kennung. Die $( ... ) Konstrukt fügt das Ergebnis des Aufrufs des angegebenen Befehls in die Befehlszeile ein. git diff wird verwendet, um zwei Revisionen zu vergleichen (wobei eine aus einem alternativen Objekt-Repository stammt).
Alternative Lösung wäre einfach importieren anderes Repository in ein bestimmtes Repository, mit git remote add (und git fetch). Dann hätten Sie alles lokal und könnten einen Vergleich innerhalb eines einzelnen Repositorys durchführen.
Gibt es eine Art Dienstprogramm für hg/git, wo ich einen Baumunterschied machen kann … [s]o das sagen, Es gibt eine Markierung zwischen neu hinzugefügten Dateien und gelöschten Dateien… [emphasis added]
Jawohl. Wir können git diff das aktuelle Verzeichnis gegen ein anderes Verzeichnis und …
…Markieren Sie die hinzugefügten, gelöschten und geänderten Dateien:
Es ist nicht git-spezifisch, aber als allgemeines Diff-Dienstprogramm für Windows gefällt es mir sehr gut WinMerge.
Ich verstehe nicht wirklich, was Sie wollen, aber es ist nicht diff -ur genug für dich? Es funktioniert sogar mit Verzeichnissen ohne Versionskontrolle.
gestrickt
git diff tut genau das. aber es funktioniert nur für Git-Projekte.
hg diff, svn diff So ziemlich jedes Versionskontrollsystem kann Verzeichnisbäume unterscheiden
Samir Lakhani
Es gibt folgende andere Möglichkeiten, um zwischen zwei vollständigen Verzeichnissen/Projekten zu unterscheiden.
In Git gibt es Syntax:
Syntax: git-diff [] [–] […]
Dieses Formular dient zum Anzeigen der Änderungen, die Sie relativ zum Index vorgenommen haben (Staging-Bereich für den nächsten Commit). Mit anderen Worten, die Unterschiede sind das, was Sie Git sagen könnten, um es weiter zum Index hinzuzufügen, aber Sie haben es immer noch nicht getan.
stackoverflow.com/a/12123669/1815624
git diff master..yourbranch path/to/folder
– CrandellWS
13. Mai 2017 um 12:20 Uhr