Zwischen zwei ganzen Verzeichnissen/Projekten in hg oder git unterscheiden?

Lesezeit: 5 Minuten

Zwischen zwei ganzen VerzeichnissenProjekten in hg oder git unterscheiden
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?

  • stackoverflow.com/a/12123669/1815624 git diff master..yourbranch path/to/folder

    – CrandellWS

    13. Mai 2017 um 12:20 Uhr

Zwischen zwei ganzen VerzeichnissenProjekten in hg oder git unterscheiden
user56reinstatemonica8

Zu Erstellen Sie einfach einen Diff-Patch im Diff-Format von git aus zwei beliebigen Dateien oder Verzeichnissen, ohne ausgefallenes Repository-Zeug oder Versionskontrolle:

git diff --no-index some/path other/path > some_filename

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.”

    – qwr

    12. Juli 2020 um 6:11 Uhr

Von git diff manpage:

git diff [--options] [--] [<path>...]

[…]

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:

git diff --name-status --no-index ./ path/to/other/dir

…nur hinzugefügte Dateien anzeigen:

git diff --diff-filter=A --name-status --no-index ./ path/to/other/dir

… nur gelöschte Dateien anzeigen:

git diff --diff-filter=D --name-status --no-index ./ path/to/other/dir

…nur geänderte Dateien anzeigen:

git diff --diff-filter=M --name-status --no-index ./ path/to/other/dir

Siehe auch: https://git-scm.com/docs/git-diff

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.

1645745889 120 Zwischen zwei ganzen VerzeichnissenProjekten in hg oder git unterscheiden
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

1645745890 777 Zwischen zwei ganzen VerzeichnissenProjekten in hg oder git unterscheiden
Samir Lakhani

Es gibt folgende andere Möglichkeiten, um zwischen zwei vollständigen Verzeichnissen/Projekten zu unterscheiden.

  1. 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.

Hier ist das. URL: https://git-scm.com/docs/git-diff

git diff –no-index Verzeichnis 1 Projekt/Pfad Verzeichnis 2 Projekt/Pfad >> Dateiname

  1. Verwenden Linux-Befehl diff –brief –recursive dir1path/ dir2Path/

  2. Wenn Sie Windows verwenden, gibt es eine Anwendung WinMerge.

847740cookie-checkZwischen zwei ganzen Verzeichnissen/Projekten in hg oder git unterscheiden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy