2009-12-28 3 views
87

Wie können wir den Unterschied zwischen zwei git Repositories bekommen?bekommen die Differenz zwischen zwei Repositories

Das Szenario: Wir haben eine repo_a und repo_b. Letzteres wurde als Kopie von repo_a erstellt. In beiden Repositorien wurden danach parallele Entwicklungen durchgeführt. Gibt es eine Möglichkeit, die Unterschiede der aktuellen Versionen dieser beiden Repositories aufzulisten?

+2

mögliches Duplikat von [Wie kann ich zwei Git-Repositories vergleichen?] (Http://stackoverflow.com/questions/687450/how-do-i-compare-two-git-repositories) –

Antwort

136

In repo_a:

git remote add -f b path/to/repo_b.git 
git remote update 
git diff master remotes/b/master 
git remote rm b 
+0

ausgezeichnete Erklärung, tat, was ich brauchte :) – Zlatko

+0

Ich musste Fernbedienungen/B/Master wie in der anderen Antwort angeben: http://StackOverflow.com/a/4710379/284051 –

+1

Was ist, wenn Sie repo_a/Master mit vergleichen müssen ein bestimmtes Tag von repo_b? –

7

Sobald Sie beide Zweige in einem Repository haben, können Sie eine git diff tun. Und sie in einem Repository bekommen ist so einfach wie

git fetch /the/other/repo/.git refs/heads/*:refs/remotes/other/* 
+0

Gibt es eine Möglichkeit, eine Auswahl zu treffen? Geschichte mit einer kleinen Änderung: Zum Beispiel in Remote-Repo-Datei wird in einem Verzeichnis abgelegt, aber ich möchte Änderungen an der gleichen Datei anwenden, aber das ist in einem anderen Verzeichnis in lokalen Repo? –

+0

Wenn Sie über eine kleine Änderung sprechen, denke ich, dass es am einfachsten wäre, ein diff zu erstellen und es dann mit Patch erneut auf die andere Datei anzuwenden. –

+0

Patch wird nicht angewendet wegen unterschiedlicher Dateinamen, obwohl es sich um dieselben Dateien handelt –

2

Siehe http://git.or.cz/gitwiki/GitTips, Abschnitt "zwei lokale Repositories vergleichen" in "General".

Kurzum Sie verwenden GIT_ALTERNATE_OBJECT_DIRECTORIES Umgebungsvariable Zugriff zu haben Datenbank der anderen Repository-Objekt, und mit git rev-parse mit --git-dir/GIT_DIR in anderen Repository symbolische Namen zu SHA-1 Kennung zu konvertieren.

Moderne Version wie folgt aussehen würde (vorausgesetzt, dass Sie in ‚repo_a‘) sind:

 
GIT_ALTERNATE_OBJECT_DIRECTORIES=../repo_b/.git/objects \ 
    git diff $(git --git-dir=../repo_b/.git rev-parse --verify HEAD) HEAD 

wo ../repo_b/.git Pfad Datenbank in repo_b zum Objekt (es wäre repo_b.git werden, wenn sie nackte Repository waren). Natürlich können Sie beliebige Versionen vergleichen, nicht nur HEADs.


Beachten Sie, dass, wenn repo_a und repo_b das gleiche Repository ist, könnte es mehr Sinn für sie beide im selben Repository setzen machen, entweder „git remote add -f ...“ kann für wiederholte Aktualisierungen Spitznamen (e) für Repository erstellen, oder obe off "git fetch ..."; wie in anderen Antworten beschrieben.

4
git diff master remotes/b 

Das ist falsch. remotes/b ist ein abgelegener, aber kein Zweig.

es zu erhalten, zu arbeiten, hatte ich zu tun:

git diff master remotes/b/master 
0

Ihre beste Wette ist, um beiden repos auf dem lokalen Computer haben und den Linux-Befehl diff mit den beiden Verzeichnissen als Parameter verwenden:

diff -r repo-A repo-B

+0

Die einzige Möglichkeit, dies nutzbar zu machen, besteht darin, eines der .git-Verzeichnisse umzubenennen. dies reduziert auf zwei Zeilen Seiten von Unterschieden, die keine Rolle spielen. War da, habe das getan, bin hier hergekommen und habe nach einer besseren Antwort gesucht. – hildred

2

Meld können vergleichen Verzeichnisse:

meld directory1 directory2 

einfach die Verzeichnisse der beiden git repos und Sie werden einen schönen grafischen Vergleich erhalten:

enter image description here

Wenn Sie auf einen der blauen Elemente klicken, können Sie sehen, was sich verändert.

+0

Meld friert ein, während Projekte in meiner VS-Lösung vergleichen, ist BeyondCompare nicht. –

+0

in OSX: diff -rq Ordner1 Ordner2 – Mark

0

Ich benutze PyCharm die großen Fähigkeiten hat zwischen Ordnern und Dateien zu vergleichen.

Öffnen Sie einfach den übergeordneten Ordner für beide Repos und warten Sie, bis es indiziert. Dann können Sie mit der rechten Maustaste auf einen Ordner oder eine Datei und Compare to... und wählen Sie den entsprechenden Ordner/Datei auf der anderen Seite.

Es zeigt nicht nur, welche Dateien unterschiedlich sind, sondern auch deren Inhalt. Viel einfacher als die Befehlszeile.

3

können Sie andere Repo hinzufügen zunächst als Fernbedienung, um Ihren aktuellen Repo:

git remote add other_name PATH_TO_OTHER_REPO 

dann Brach holen aus diesen entfernt:

git fetch other_name branch_name:branch_name 

dies in Ihrem aktuellen diesen Zweig als neuen Zweig erzeugt Repo, dann können Sie diese Verzweigung mit jeder Ihrer Verzweigungen vergleichen, um z. B. die aktuelle Verzweigung mit der neuen Verzweigung (Verzweigungsname) zu vergleichen:

git diff branch_name