Wie können wir den Unterschied zwischen zwei Git-Repositories ermitteln?
Das Szenario: Wir haben ein repo_a und ein repo_b. Letzteres wurde als Kopie von repo_a erstellt. In beiden Repositories gab es danach eine parallele Entwicklung. Gibt es eine Möglichkeit, die Unterschiede der aktuellen Versionen dieser beiden Repositorys aufzulisten?
Antworten:
In repo_a:
quelle
origin/master
eher spezifizieren als nacktmaster
. Dies stellt auch den Unterschied zwischen den Hauptzweigen fest. Was ist also, wenn Sie alle Zweige finden möchten, die unterschiedlich sind? ZB um den Status einer Repository-Sicherung zu überprüfen?Meld kann Verzeichnisse vergleichen:
Verwenden Sie einfach die Verzeichnisse der beiden Git-Repos und Sie erhalten einen schönen grafischen Vergleich:
Wenn Sie auf eines der blauen Elemente klicken, können Sie sehen, was sich geändert hat.
quelle
Sie können Ihrem aktuellen Repo zuerst ein anderes Repo als Fernbedienung hinzufügen:
dann holen Sie Brach von dieser Fernbedienung:
Dadurch wird dieser Zweig als neuer Zweig in Ihrem aktuellen Repo erstellt. Anschließend können Sie diesen Zweig mit jedem Ihrer Zweige unterscheiden, um beispielsweise den aktuellen Zweig mit dem neuen Zweig (Filialname) zu vergleichen:
quelle
Sobald Sie beide Zweige in einem Repository haben, können Sie eine
git diff
. Und sie in ein Repository zu bekommen ist so einfach wiequelle
Das ist falsch
remotes/b
ist eine Fernbedienung, aber kein Zweig.Um es zum Laufen zu bringen, musste ich tun:
quelle
Siehe http://git.or.cz/gitwiki/GitTips , Abschnitt "Vergleichen zweier lokaler Repositorys" in "Allgemein".
Kurz gesagt, Sie verwenden die Umgebungsvariable GIT_ALTERNATE_OBJECT_DIRECTORIES, um Zugriff auf die Objektdatenbank des anderen Repositorys zu erhalten, und verwenden git rev-
--git-dir
parse mit / GIT_DIR, um den symbolischen Namen in einem anderen Repository in den SHA-1-Bezeichner zu konvertieren.Die moderne Version würde ungefähr so aussehen (vorausgesetzt, Sie befinden sich in 'repo_a'):
Wo
../repo_b/.git
ist der Pfad zur Objektdatenbank in repo_b (es wäre repo_b.git, wenn es ein reines Repository wäre). Natürlich können Sie beliebige Versionen vergleichen, nicht nur HEADs.Beachten Sie, dass es möglicherweise sinnvoller ist, beide in dasselbe Repository zu stellen, wenn repo_a und repo_b dasselbe Repository sind. Verwenden Sie entweder "
git remote add -f ...
", um Spitznamen für das Repository für wiederholte Aktualisierungen zu erstellen, oder obe off "git fetch ...
". wie in anderen Antworten beschrieben.quelle
Ich verwende PyCharm, das großartige Möglichkeiten zum Vergleichen zwischen Ordnern und Dateien bietet.
Öffnen Sie einfach den übergeordneten Ordner für beide Repos und warten Sie, bis er indiziert ist. Dann können Sie mit der rechten Maustaste auf einen Ordner oder eine Datei klicken
Compare to...
und den entsprechenden Ordner / die entsprechende Datei auf der anderen Seite auswählen.Es zeigt nicht nur, welche Dateien unterschiedlich sind, sondern auch deren Inhalt. Viel einfacher als die Kommandozeile.
quelle
Am besten haben Sie beide Repos auf Ihrem lokalen Computer und verwenden den Befehl linux diff mit den beiden Verzeichnissen als Parameter:
diff -r repo-A repo-B
quelle
Eine einfache Möglichkeit, dies zu tun, ohne die Konfiguration Ihrer Fernbedienungen zu berühren. Aus Repo A in Master (vorausgesetzt, Sie möchten Master-Zweige vergleichen):
quelle
Sie können den folgenden Befehl verwenden:
oder für die Seite an Seite können Sie verwenden:
Wenn Sie jede Diff-Datei einfärben möchten, können Sie Folgendes verwenden:
quelle
Erinnerung an sich selbst ... zuerst abrufen, sonst hat das Repository keinen lokalen Hash (denke ich).
Schritt 1. Richten Sie die Upstream-Fernbedienung und höher ein
Das Differenzieren einer einzelnen Datei folgt diesem Muster:
git diff localBranch uppreamBranch --spacepath / singlefile
git diff master upstream/nameofrepo -- src/index.js
quelle