
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?

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 cd
in ein Verzeichnis geschrieben, das das ursprüngliche Verzeichnis/die Datei mit dem Namen enthält a
und das geänderte Verzeichnis b
Es wird sein:
git diff --no-index a b > patch
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/repo
also 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.

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.
Hier ist das. URL: https://git-scm.com/docs/git-diff
git diff –no-index Verzeichnis 1 Projekt/Pfad Verzeichnis 2 Projekt/Pfad >> Dateiname
-
Verwenden Linux-Befehl diff –brief –recursive dir1path/ dir2Path/
-
Wenn Sie Windows verwenden, gibt es eine Anwendung WinMerge.
8477400cookie-checkZwischen zwei ganzen Verzeichnissen/Projekten in hg oder git unterscheiden?yes
stackoverflow.com/a/12123669/1815624
git diff master..yourbranch path/to/folder
– CrandellWS
13. Mai 2017 um 12:20 Uhr