Dies ist der Befehl git-diff-index, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann
PROGRAMM:
NAME/FUNKTION
git-diff-index – Vergleichen Sie einen Baum mit dem Arbeitsbaum oder Index
ZUSAMMENFASSUNG
git Diff-Index [-m] [--cached] [ ] [ ...]
BESCHREIBUNG
Vergleicht den Inhalt und Modus der in einem Baumobjekt gefundenen Blobs mit den entsprechenden
verfolgte Dateien im Arbeitsbaum oder mit den entsprechenden Pfaden im Index. Wann
Wenn Argumente vorhanden sind, werden nur Pfade verglichen, die diesen Mustern entsprechen. Ansonsten alles
Die verfolgten Dateien werden verglichen.
OPTIONAL
-p, -u, --patch
Patch generieren (siehe Abschnitt zum Generieren von Patches).
-s, --no-patch
Diff-Ausgabe unterdrücken. Nützlich für Befehle wie git show, die den Patch anzeigen
Standardeinstellung oder um die Wirkung von --patch aufzuheben.
-U , --unified=
Unterschiede generieren mit statt der üblichen drei Kontextzeilen. Impliziert -p.
--roh
Generieren Sie das Diff im Rohformat. Dies ist die Standardeinstellung.
--patch-with-raw
Synonym für -p --raw.
--minimal
Nehmen Sie sich mehr Zeit, um sicherzustellen, dass der kleinstmögliche Unterschied entsteht.
--Geduld
Generieren Sie einen Diff mit dem „Patience Diff“-Algorithmus.
--Histogramm
Generieren Sie einen Diff mit dem „Histogramm-Diff“-Algorithmus.
--diff-algorithm={patience|minimal|histogram|myers}
Wählen Sie einen Diff-Algorithmus. Die Varianten sind wie folgt:
Standard, Myers
Der grundlegende Greedy-Diff-Algorithmus. Derzeit ist dies die Standardeinstellung.
minimal
Nehmen Sie sich mehr Zeit, um sicherzustellen, dass der kleinstmögliche Unterschied entsteht.
Geduld
Verwenden Sie beim Generieren von Patches den „Patience Diff“-Algorithmus.
Histogramm
Dieser Algorithmus erweitert den Geduldsalgorithmus, um „gemeinsames Auftreten mit geringem Vorkommen“ zu unterstützen
Elemente".
Wenn Sie beispielsweise die Variable diff.algorithm auf einen nicht standardmäßigen Wert konfiguriert haben und
Wenn Sie die Standardeinstellung verwenden möchten, müssen Sie die Option --diff-algorithm=default verwenden.
--stat[= [, [, ]]]
Generieren Sie einen Diffstat. Standardmäßig wird so viel Platz wie nötig für verwendet
Dateinamenteil und der Rest für den Diagrammteil. Die maximale Breite ist standardmäßig auf Terminal eingestellt
Breite oder 80 Spalten, wenn keine Verbindung zu einem Terminal besteht, und kann durch überschrieben werden .
Die Breite des Dateinamensteils kann durch Angabe einer anderen Breite begrenzt werden
nach einem Komma. Die Breite des Diagrammteils kann mit begrenzt werden
--stat-graph-width= (betrifft alle Befehle, die ein Statistikdiagramm generieren) oder von
Einstellung von diff.statGraphWidth= (hat keinen Einfluss auf den Git-Format-Patch). Indem Sie a
dritter Parameter können Sie die Ausgabe auf die erste beschränken Zeilen, gefolgt
von ... wenn es noch mehr gibt.
Diese Parameter können auch individuell mit --stat-width= eingestellt werden ,
--stat-name-width= und --stat-count= .
--numstat
Ähnlich wie --stat, zeigt jedoch die Anzahl der hinzugefügten und gelöschten Zeilen in Dezimalschreibweise an
Pfadname ohne Abkürzung, um ihn maschinenfreundlicher zu machen. Für Binärdateien:
gibt zwei aus - statt 0 0 zu sagen.
--shortstat
Geben Sie nur die letzte Zeile des Formats --stat aus, die die Gesamtzahl der Änderungen enthält
Dateien sowie Anzahl der hinzugefügten und gelöschten Zeilen.
--dirstat[= ]
Geben Sie die Verteilung der relativen Änderungsmenge für jedes Unterverzeichnis aus. Der
Das Verhalten von --dirstat kann angepasst werden, indem eine durch Kommas getrennte Liste übergeben wird
Parameter. Die Standardeinstellungen werden durch die Konfigurationsvariable diff.dirstat gesteuert
(sehen git-config(1)). Folgende Parameter stehen zur Verfügung:
Änderungen
Berechnen Sie die Dirstat-Nummern, indem Sie die Zeilen zählen, die aus dem entfernt wurden
Quelle hinzugefügt oder zum Ziel hinzugefügt werden. Dabei wird die Menge an reinem Code ignoriert
Bewegungen innerhalb einer Datei. Mit anderen Worten: Das Neuanordnen von Zeilen in einer Datei ist nicht möglich
genauso viel gezählt wie andere Änderungen. Dies ist das Standardverhalten, wenn kein Parameter vorhanden ist
gegeben ist.
Linien
Berechnen Sie die Dirstat-Zahlen, indem Sie die reguläre zeilenbasierte Diff-Analyse durchführen, und
Summieren der Anzahl der entfernten/hinzugefügten Zeilen. (Zählen Sie bei Binärdateien 64-Byte-Blöcke
stattdessen, da Binärdateien kein natürliches Konzept von Zeilen haben). Das ist ein Mehr
teurer --dirstat-Verhalten als das Änderungsverhalten, aber es zählt
neu angeordnete Zeilen innerhalb einer Datei ebenso wie andere Änderungen. Die resultierende Ausgabe ist
im Einklang mit dem, was Sie von den anderen --*stat-Optionen erhalten.
Dateien
Berechnen Sie die Dirstat-Nummern, indem Sie die Anzahl der geänderten Dateien zählen. Jeder hat sich verändert
Datei zählt in der Dirstat-Analyse gleichermaßen. Dies ist rechnerisch am günstigsten
--dirstat Verhalten, da der Dateiinhalt überhaupt nicht geprüft werden muss.
kumulativ
Zählen Sie Änderungen in einem untergeordneten Verzeichnis auch für das übergeordnete Verzeichnis. Beachten Sie, dass
Bei kumulierter Verwendung kann die Summe der gemeldeten Prozentsätze 100 % überschreiten. Der
Das Standardverhalten (nicht kumulativ) kann mit der Funktion „Nicht kumulativ“ angegeben werden
Parameters.
Ein ganzzahliger Parameter gibt einen Cut-off-Prozentsatz an (standardmäßig 3 %). Verzeichnisse
Beiträge, die weniger als diesen Prozentsatz zu den Änderungen beitragen, werden in der Ausgabe nicht angezeigt.
Beispiel: Im Folgenden werden geänderte Dateien gezählt, während Verzeichnisse mit weniger Dateien ignoriert werden
mehr als 10 % der Gesamtmenge der geänderten Dateien ausmachen und die Anzahl der untergeordneten Verzeichnisse ansammelt
in den übergeordneten Verzeichnissen: --dirstat=files,10,cumulative.
--Zusammenfassung
Geben Sie eine komprimierte Zusammenfassung erweiterter Header-Informationen wie Erstellungen und Umbenennungen aus
und Modusänderungen.
--patch-with-stat
Synonym für -p --stat.
-z
Wenn --raw, --numstat, --name-only oder --name-status angegeben wurde, führen Sie kein Munge durch
Pfadnamen und verwenden Sie NULs als Abschlusszeichen für Ausgabefelder.
Ohne diese Option enthält jede Pfadnamenausgabe TAB, LF, doppelte Anführungszeichen und
Backslash-Zeichen werden durch \t, \n, \" bzw. \\ und den Pfadnamen ersetzt
wird in doppelte Anführungszeichen gesetzt, wenn eine dieser Ersetzungen erfolgt ist.
--nur Name
Nur Namen geänderter Dateien anzeigen.
--Name-Status
Zeigt nur Namen und Status der geänderten Dateien an. Siehe die Beschreibung des --diff-filters
Option zur Bedeutung der Statusbuchstaben.
--submodule[= ]
Geben Sie an, wie Unterschiede in Submodulen angezeigt werden. Wenn --submodule oder --submodule=log
gegeben ist, die Log Format verwendet wird. Dieses Format listet die Commits im Bereich wie auf Git-
Untermodul(1) Zusammenfassung tut es. Weglassen der Option --submodule oder Angabe
--submodule=short, verwendet die kurz Format. Dieses Format zeigt nur die Namen der
Commits am Anfang und Ende des Bereichs. Kann über das diff.submodul angepasst werden
variable Konfiguration.
--color[= ]
Farbunterschied anzeigen. --color (also ohne =) ist dasselbe wie --color=always.
kann immer, nie oder automatisch sein.
--keine Farbe
Schalten Sie den Farbunterschied aus. Es ist dasselbe wie --color=never.
--word-diff[= ]
Zeigen Sie einen Wortunterschied mit dem an um geänderte Wörter abzugrenzen. Standardmäßig sind es Wörter
durch Leerzeichen getrennt; siehe --word-diff-regex unten. Der Standardmäßig ist Ebene,
und muss einer von Folgendem sein:
Farbe
Markieren Sie geänderte Wörter nur mit Farben. Impliziert --color.
Ebene
Wörter als [-removed-] und {+added+} anzeigen. Unternimmt keine Fluchtversuche
Trennzeichen, wenn sie in der Eingabe erscheinen, sodass die Ausgabe möglicherweise mehrdeutig ist.
Porzellan
Verwenden Sie ein spezielles zeilenbasiertes Format, das für den Skriptverbrauch bestimmt ist.
Hinzugefügte/entfernte/unveränderte Läufe werden im üblichen einheitlichen Diff-Format gedruckt.
beginnend mit einem +/-/` `-Zeichen am Anfang der Zeile und endend auf
das Ende der Linie. Zeilenumbrüche in der Eingabe werden durch eine Tilde ~ in einer Zeile dargestellt
seiner eigenen.
keine
Deaktivieren Sie die Wortdifferenz erneut.
Beachten Sie, dass trotz des Namens des ersten Modus die Farbe zur Hervorhebung der Änderungen verwendet wird
Teile in allen Modi, sofern aktiviert.
--word-diff-regex=
Verwenden um zu entscheiden, was ein Wort ist, anstatt Reihen von Nicht-Leerzeichen zu berücksichtigen
ein Wort sein. Impliziert auch --word-diff, sofern es nicht bereits aktiviert war.
Jede nicht überlappende Übereinstimmung der gilt als Wort. Alles dazwischen
Diese Übereinstimmungen werden als Leerzeichen betrachtet und zum Zwecke der Suche ignoriert(!).
Unterschiede. Möglicherweise möchten Sie |[^[:space:]] an Ihren zu erstellenden regulären Ausdruck anhängen
Stellen Sie sicher, dass alle Zeichen, die keine Leerzeichen sind, übereinstimmen. Eine Übereinstimmung, die eine neue Zeile enthält, ist
am Zeilenumbruch stillschweigend abgeschnitten(!).
Beispiel: --word-diff-regex=. behandelt jedes Zeichen als Wort und
Zeigen Sie dementsprechend Unterschiede Zeichen für Zeichen an.
Der reguläre Ausdruck kann auch über einen Diff-Treiber oder eine Konfigurationsoption festgelegt werden, siehe
gittributes(1) oder git-config(1). Die explizite Angabe überschreibt alle Diff-Treiber oder
Konfigurationseinstellung. Diff-Treiber überschreiben Konfigurationseinstellungen.
--color-words[= ]
Entspricht --word-diff=color plus (wenn ein regulärer Ausdruck angegeben wurde)
--word-diff-regex= .
--no-renames
Deaktivieren Sie die Umbenennungserkennung, auch wenn die Konfigurationsdatei dies standardmäßig vorgibt
so.
--prüfen
Warnen Sie, wenn Änderungen zu Leerzeichenfehlern führen. Was als Leerzeichenfehler gilt, ist
gesteuert durch die core.whitespace-Konfiguration. Standardmäßig werden nachgestellte Leerzeichen verwendet
(einschließlich Zeilen, die ausschließlich aus Leerzeichen bestehen) und einem Leerzeichen
Unmittelbar gefolgt von einem Tabulatorzeichen innerhalb des ersten Einzugs der Zeile sind
werden als Leerzeichenfehler betrachtet. Wird mit einem Status ungleich Null beendet, wenn Probleme gefunden werden. Nicht
kompatibel mit --exit-code.
--ws-error-highlight=
Heben Sie Leerraumfehler in den von angegebenen Zeilen hervor in der von Ihnen angegebenen Farbe
color.diff.whitespace. ist eine durch Kommas getrennte Liste des alten, neuen Kontexts. Wenn
Diese Option ist nicht verfügbar, nur Leerzeichenfehler in neuen Zeilen werden hervorgehoben. Z.B
--ws-error-highlight=new,old hebt Leerzeichenfehler sowohl beim Löschen als auch beim Hinzufügen hervor
Linien. Alle können als Abkürzung für alt, neu, Kontext verwendet werden.
--full-index
Zeigen Sie statt der ersten Handvoll Zeichen den vollständigen Blob vor und nach dem Bild an
Objektnamen in der „Index“-Zeile beim Generieren der Patch-Format-Ausgabe.
--binär
Geben Sie zusätzlich zu --full-index ein binäres Diff aus, das mit git-apply angewendet werden kann.
--Abkürzung[= ]
Anstatt den vollständigen 40-Byte-Hexadezimal-Objektnamen in der Ausgabe im Diff-Raw-Format anzuzeigen
und Diff-Tree-Kopfzeilen zeigen nur einen Teil des Präfixes. Dies ist unabhängig von der
--full-index-Option oben, die das Diff-Patch-Ausgabeformat steuert. Nicht standardmäßig
Anzahl der Ziffern kann mit --abbrev= angegeben werden .
-B[ ][/ ], --break-rewrites[=[ ][/ ]]
Unterteilen Sie die Änderungen des vollständigen Umschreibens in Lösch- und Erstellungspaare. Dies dient zwei
Zwecke:
Es wirkt sich auf die Art und Weise einer Änderung aus, die einem vollständigen Neuschreiben einer Datei und nicht einer Serie gleichkommt
aus Löschungen und Einfügungen vermischt mit sehr wenigen Zeilen, die zufällig übereinstimmen
textlich als Kontext, sondern als einzelne Löschung von allem Alten, gefolgt von einem
einmalige Einfügung von allem Neuen, und die Zahl m steuert diesen Aspekt des -B
Option (standardmäßig 60 %). -B/70 % gibt an, dass weniger als 30 % des Originals vorhanden sein sollen
Bleiben Sie im Ergebnis, damit Git es als eine vollständige Neufassung betrachten kann (d. h. andernfalls die
Der resultierende Patch besteht aus einer Reihe von Lösch- und Einfügungsvorgängen, gemischt mit dem Kontext
Linien).
Bei Verwendung mit -M wird eine vollständig neu geschriebene Datei auch als Quelle von a betrachtet
umbenennen (normalerweise berücksichtigt -M nur eine Datei, die verschwunden ist, als Quelle einer Umbenennung),
und die Zahl n steuert diesen Aspekt der Option -B (standardmäßig 50 %). -B20%
Gibt an, dass eine Änderung mit Hinzufügung und Löschung im Vergleich zu 20 % oder mehr der
Dateigröße kommen als mögliche Quelle für eine Umbenennung in Frage
eine andere Datei.
-M[ ], --find-renames[= ]
Umbenennungen erkennen. Wenn n angegeben ist, handelt es sich um einen Schwellenwert für den Ähnlichkeitsindex (d. h
Anzahl der Hinzufügungen/Löschungen im Vergleich zur Dateigröße). Beispielsweise bedeutet -M90%
Git sollte ein Lösch-/Hinzufügen-Paar als Umbenennung betrachten, wenn mehr als 90 % der Datei vorhanden sind
hat sich nicht geändert. Ohne %-Zeichen ist die Zahl als Bruch zu lesen, mit a
Dezimalpunkt davor. Dh, -M5 wird zu 0.5 und entspricht somit -M50 %.
Ebenso ist -M05 dasselbe wie -M5%. Um die Erkennung auf exakte Umbenennungen zu beschränken, verwenden Sie -M100%.
Der Standard-Ähnlichkeitsindex beträgt 50 %.
-C[ ], --find-copies[= ]
Erkennen Sie Kopien und Umbenennungen. Siehe auch --find-copies-harder. Wenn n angegeben ist, ist es
hat die gleiche Bedeutung wie für -M .
--find-copys-harder
Aus Leistungsgründen findet die Option -C standardmäßig nur Kopien der Originaldatei
der Kopie wurde im selben Änderungssatz geändert. Dieses Flag veranlasst den Befehl zur Überprüfung
unveränderte Dateien als Kandidaten für die Kopierquelle. Das ist sehr teuer
Betrieb für große Projekte, also verwenden Sie es mit Vorsicht. Geben Sie mehr als eine -C-Option an
hat den gleichen Effekt.
-D, --irreversible-delete
Lassen Sie das Vorbild für Löschvorgänge weg, dh drucken Sie nur den Header, nicht jedoch den Unterschied zwischen den
preimage und /dev/null. Der resultierende Patch ist nicht dazu gedacht, mit Patch oder angewendet zu werden
git apply; Dies ist ausschließlich für Leute gedacht, die sich nur auf die Überprüfung konzentrieren möchten
Text nach der Änderung. Darüber hinaus fehlen der Ausgabe offensichtlich genügend Informationen
Wenden Sie einen solchen Patch in umgekehrter Reihenfolge an, auch manuell, daher der Name der Option.
Wenn Sie es zusammen mit -B verwenden, lassen Sie auch das Vorbild im Löschteil von a weg
Paar löschen/erstellen.
-l
Die Optionen -M und -C erfordern eine Verarbeitungszeit von O(n^2), wobei n die Anzahl von ist
potenzielle Ziele umbenennen/kopieren. Diese Option verhindert, dass die Umbenennungs-/Kopiererkennung ausgeführt wird
wenn die Anzahl der Umbenennungs-/Kopierziele die angegebene Anzahl überschreitet.
--diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]]
Wählen Sie nur Dateien aus, die hinzugefügt (A), kopiert (C), gelöscht (D), geändert (M) oder umbenannt sind
(R), deren Typ (z. B. reguläre Datei, Symlink, Submodul, ...) geändert wurde (T), sind
Nicht zusammengeführt (U), unbekannt (X) oder deren Paarung unterbrochen (B). Jede Kombination
Es können maximal XNUMX der Filterzeichen (einschließlich keines) verwendet werden. Wenn * (Alles oder nichts) hinzugefügt wird
Für die Kombination werden alle Pfade ausgewählt, wenn es eine Datei gibt, die mit anderen übereinstimmt
Kriterien im Vergleich; Wenn es keine Datei gibt, die anderen Kriterien entspricht, passiert nichts
ist ausgewählt.
-S
Suchen Sie nach Unterschieden, die die Häufigkeit des Vorkommens der angegebenen Zeichenfolge ändern
(z. B. Hinzufügen/Löschen) in einer Datei. Für den Gebrauch durch den Skripter gedacht.
Dies ist nützlich, wenn Sie nach einem genauen Codeblock (z. B. einer Struktur) suchen und möchten
Um die Geschichte dieses Blocks seit seiner Entstehung zu erfahren: Verwenden Sie die Funktion
iterativ, um den interessanten Block im Vorbild wieder in -S einzuspeisen und weiterzumachen
bis Sie die allererste Version des Blocks erhalten.
-G
Suchen Sie nach Unterschieden, deren Patchtext übereinstimmende hinzugefügte/entfernte Zeilen enthält .
Um den Unterschied zwischen -S zu veranschaulichen --pickaxe-regex und -G , halten
ein Commit mit dem folgenden Unterschied in derselben Datei:
+ return !regexec(regexp, two->ptr, 1, ®match, 0);
...
- hit = !regexec(regexp, mf2.ptr, 1, ®match, 0);
Während git log -G"regexec\(regexp" dieses Commit anzeigt, git log -S"regexec\(regexp"
--pickaxe-regex wird nicht (weil die Anzahl der Vorkommen dieser Zeichenfolge nicht stimmt).
Veränderung).
Weitere Informationen im Spitzhacke Eintritt in gitdiffcore(7) für weitere Informationen.
--pickaxe-all
Wenn -S oder -G eine Änderung findet, werden alle Änderungen in diesem Änderungssatz angezeigt, nicht nur die
Dateien, die die Änderung enthalten .
--pickaxe-regex
Behandeln Sie die wird -S als erweiterter regulärer POSIX-Ausdruck zur Übereinstimmung übergeben.
-Ö
Geben Sie den Patch in der in der angegebenen Reihenfolge aus , das eine Muschelkugel hat
Muster pro Zeile. Dies überschreibt die Konfigurationsvariable diff.orderFile (siehe Git-
Config(1)). Um diff.orderFile abzubrechen, verwenden Sie -O/dev/null.
-R
Zwei Eingänge vertauschen; Das heißt, es werden Unterschiede zwischen Index oder Datei auf der Festplatte und Baum angezeigt
Inhalt.
--relative[= ]
Wenn es aus einem Unterverzeichnis des Projekts ausgeführt wird, kann es angewiesen werden, Änderungen außerhalb auszuschließen
Mit dieser Option können Sie das Verzeichnis öffnen und die Pfadnamen relativ dazu anzeigen. Wenn Sie nicht da sind
In einem Unterverzeichnis (z. B. in einem Bare-Repository) können Sie benennen, welches Unterverzeichnis erstellt werden soll
die Ausgabe relativ zu durch Angabe von a als Argument.
-ein Text
Behandeln Sie alle Dateien als Text.
--ignore-space-at-eol
Ignorieren Sie Änderungen im Leerraum bei EOL.
-b, --ignore-space-change
Ignorieren Sie Änderungen in der Menge an Leerzeichen. Dies ignoriert Leerzeichen am Zeilenende und
betrachtet alle anderen Sequenzen aus einem oder mehreren Leerzeichen als gleichwertig.
-w, --ignore-all-space
Leerzeichen beim Zeilenvergleich ignorieren. Dadurch werden Unterschiede ignoriert, selbst wenn eine Zeile vorhanden ist
Leerzeichen, wo die andere Zeile keines hat.
--leerzeilen ignorieren
Ignorieren Sie Änderungen, deren Zeilen alle leer sind.
--inter-hunk-context=
Zeigt dabei den Kontext zwischen Diff-Hunks bis zur angegebenen Anzahl von Zeilen an
Verschmelzung von Kerlen, die nahe beieinander liegen.
-W, --function-context
Zeigen Sie die gesamten umgebenden Funktionen von Änderungen an.
--exit-code
Lassen Sie das Programm mit ähnlichen Codes beenden diff(1). Das heißt, es wird mit 1 beendet, wenn dort
gab es Unterschiede und 0 bedeutet keine Unterschiede.
--ruhig
Deaktivieren Sie alle Ausgaben des Programms. Impliziert --exit-code.
--ext-diff
Ermöglicht die Ausführung eines externen Diff-Helfers. Wenn Sie einen externen Diff-Treiber mit einstellen
gittributes(5) Sie müssen diese Option mit verwenden Git-Log(1) und Freunde.
--no-ext-diff
Externe Diff-Treiber nicht zulassen.
--textconv, --no-textconv
Erlauben (oder verbieten) Sie die Ausführung externer Textkonvertierungsfilter beim Vergleich von Binärdateien
Dateien. Sehen gittributes(5) für Einzelheiten. Da es sich bei Textconv-Filtern normalerweise um a handelt
Bei der Einwegkonvertierung ist das resultierende Diff für den menschlichen Verzehr geeignet, kann es aber nicht
angewendet werden. Aus diesem Grund sind Textconv-Filter standardmäßig nur für aktiviert Git-
diff(1) und Git-Log(1), aber nicht für Git-Format-Patch(1) oder diff-Sanitärbefehle.
--ignore-submodules[= ]
Ignorieren Sie Änderungen an Submodulen in der Diff-Generierung. kann entweder „keine“ sein,
„untracked“, „dirty“ oder „all“, was die Standardeinstellung ist. Wenn Sie „none“ verwenden, wird Folgendes berücksichtigt
Submodul geändert, wenn es entweder nicht verfolgte oder geänderte Dateien oder seinen HEAD enthält
unterscheidet sich von dem im Superprojekt aufgezeichneten Commit und kann zum Überschreiben eines beliebigen verwendet werden
Einstellungen des ignorieren Option in git-config(1) oder gitmodule(5). Wenn „untracked“ ist
Verwendete Submodule gelten nicht als schmutzig, wenn sie nur nicht verfolgte Inhalte enthalten (aber
sie werden weiterhin nach geänderten Inhalten durchsucht). Bei Verwendung von „dirty“ werden alle Änderungen ignoriert
Im Arbeitsbaum der Submodule werden nur Änderungen an den Commits im Superprojekt gespeichert
angezeigt (dies war das Verhalten bis 1.7.0). Wenn Sie „all“ verwenden, werden alle Änderungen ausgeblendet
Submodule.
--src-prefix=
Zeigt das angegebene Quellpräfix anstelle von „a/“ an.
--dst-prefix=
Zeigt das angegebene Zielpräfix anstelle von „b/“ an.
--kein Präfix
Zeigt kein Quell- oder Zielpräfix an.
Eine ausführlichere Erläuterung dieser allgemeinen Optionen finden Sie auch unter gitdiffcore(7).
Die ID eines Baumobjekts, gegen das unterschieden werden soll.
- zwischengespeichert
Berücksichtigen Sie die Datei auf der Festplatte überhaupt nicht
-m
Standardmäßig werden im Index erfasste, aber nicht ausgecheckte Dateien als gelöscht gemeldet.
Diese Flagge macht git Diff-Index sagen, dass alle nicht ausgecheckten Dateien aktuell sind.
RAW AUSGABE FORMAT
Das Rohausgabeformat von „git-diff-index“, „git-diff-tree“, „git-diff-files“ und „git
diff --raw“ sind sehr ähnlich.
Diese Befehle vergleichen alle zwei Gruppen von Dingen; Was verglichen wird, ist unterschiedlich:
Git-Diff-Index
vergleicht die und die Dateien im Dateisystem.
git-diff-index --cached
vergleicht die und der Index.
git-diff-tree [-r] [ ...]
vergleicht die durch die beiden Argumente benannten Bäume.
Git-Diff-Dateien [ ...]
vergleicht den Index und die Dateien im Dateisystem.
Der Befehl „git-diff-tree“ beginnt seine Ausgabe mit der Ausgabe des Hashs dessen, was gerade vorliegt
verglichen. Danach geben alle Befehle eine Ausgabezeile pro geänderter Datei aus.
Eine Ausgabezeile wird folgendermaßen formatiert:
Direktbearbeitung: 100644 100644 bcd1234... 0123456... M file0
Kopieren-Bearbeiten: 100644 100644 abcd123... 1234567... C68 Datei1 Datei2
umbenennen-bearbeiten :100644 100644 abcd123... 1234567... R86 Datei1 Datei3
erstellen :000000 100644 0000000... 1234567... Eine Datei4
löschen :100644 000000 1234567... 0000000... D-Datei5
nicht zusammengeführt :000000 000000 0000000... 0000000... U-Datei6
Das heißt, von links nach rechts:
1. ein Doppelpunkt.
2. Modus für „src“; 000000, wenn erstellt oder nicht zusammengeführt.
3. ein Leerzeichen.
4. Modus für „dst“; 000000, wenn gelöscht oder nicht zusammengeführt.
5. ein Leerzeichen.
6. sha1 für „src“; 0{40}, wenn erstellt oder nicht zusammengeführt.
7. ein Leerzeichen.
8. sha1 für „dst“; 0{40} bei Erstellung, nicht zusammengeführt oder „Arbeitsbaum ansehen“.
9. ein Leerzeichen.
10. Status, gefolgt von der optionalen „Score“-Nummer.
11. ein Tabulator oder ein NUL, wenn -z Option verwendet wird.
12. Pfad für „src“
13. ein Tabulator oder ein NUL, wenn -z Option wird verwendet; existiert nur für C oder R.
14. Pfad für „dst“; existiert nur für C oder R.
15. ein LF oder ein NUL, wenn -z Option wird verwendet, um den Datensatz zu beenden.
Mögliche Statusbriefe sind:
· A: Hinzufügen einer Datei
· C: Kopie einer Datei in eine neue
· D: Löschen einer Datei
· M: Änderung des Inhalts oder Modus einer Datei
· R: Umbenennen einer Datei
· T: Änderung des Dateityps
· U: Datei ist nicht zusammengeführt (Sie müssen die Zusammenführung abschließen, bevor sie festgeschrieben werden kann)
· X: „unbekannter“ Änderungstyp (höchstwahrscheinlich ein Fehler, bitte melden)
Den Statusbuchstaben C und R folgt immer eine Punktzahl (die den Prozentsatz angibt).
Ähnlichkeit zwischen Quelle und Ziel der Verschiebung oder Kopie). Statusbuchstabe M kann sein
gefolgt von einer Bewertung (die den Prozentsatz der Unähnlichkeit angibt) für das Umschreiben von Dateien.
wird nur mit Nullen angezeigt, wenn eine Datei neu im Dateisystem ist und nicht synchron ist
Der Index.
Ejemplo:
:100644 100644 5be4a4...... 000000...... M file.c
Wenn die Option -z nicht verwendet wird, werden TAB-, LF- und Backslash-Zeichen in Pfadnamen dargestellt
als \t, \n bzw. \\.
DIFF FORMAT FÜR VERSCHMELZT
„git-diff-tree“, „git-diff-files“ und „git-diff --raw“ können dauern -c or --cc Option zu
Generieren Sie eine Diff-Ausgabe auch für Merge-Commits. Die Ausgabe weicht vom beschriebenen Format ab
oben auf folgende Weise:
1. Für jedes Elternteil gibt es einen Doppelpunkt
Zweitens gibt es mehr „src“-Modi und „src“ sha2
3. Status besteht aus verketteten Statuszeichen für jedes übergeordnete Element
4. Keine optionale „Score“-Nummer
5. Einzelpfad, nur für „dst“
Ejemplo:
::100644 100644 100644 fabadb8... cc95eb0... 4866510... MM beschreiben.c
Beachten Sie, dass kombiniert diff listet nur Dateien auf, die von allen übergeordneten Dateien geändert wurden.
ERSTELLEN PATCHES MIT -P
Wenn „git-diff-index“, „git-diff-tree“ oder „git-diff-files“ mit a ausgeführt werden -p Option: „git
diff" ohne die --roh Option oder „git log“ mit der Option „-p“ erzeugen sie das nicht
Ausgabe wie oben beschrieben; Stattdessen erstellen sie eine Patch-Datei. Sie können die Erstellung anpassen
solcher Patches über die Umgebungsvariablen GIT_EXTERNAL_DIFF und GIT_DIFF_OPTS.
Was die Option -p erzeugt, unterscheidet sich geringfügig vom herkömmlichen Diff-Format:
1. Es wird ein „git diff“-Header vorangestellt, der wie folgt aussieht:
diff --git a/file1 b/file2
Die Dateinamen a/ und b/ sind identisch, es sei denn, es handelt sich um Umbenennen/Kopieren. Besonders sogar
für eine Erstellung oder Löschung ist /dev/null nicht wird anstelle von a/ oder b/ verwendet
Dateinamen.
Beim Umbenennen/Kopieren zeigen Datei1 und Datei2 den Namen der Quelldatei an
rename/copy und der Name der Datei, die rename/copy erzeugt.
2. Es folgen eine oder mehrere erweiterte Kopfzeilen:
Alter Modus
neuer Modus
Modus für gelöschte Dateien
Neuer Dateimodus
Kopie von
Kopieren nach
umbenennen von
umbenennen in
Ähnlichkeitsindex
Unähnlichkeitsindex
Index ..
Dateimodi werden als 6-stellige Oktalzahlen einschließlich Dateityp und Datei gedruckt
Berechtigungsbits.
Pfadnamen in erweiterten Headern enthalten nicht die Präfixe a/ und b/.
Der Ähnlichkeitsindex ist der Prozentsatz unveränderter Linien und der Unähnlichkeitsindex
ist der Prozentsatz der geänderten Zeilen. Es ist eine abgerundete Ganzzahl, gefolgt von einem
Prozentzeichen. Der Ähnlichkeitsindexwert von 100 % ist somit für zwei gleiche Dateien reserviert,
während 100 % Unähnlichkeit bedeutet, dass keine Zeile aus der alten Datei in die neue übernommen wurde
eins.
Die Indexzeile enthält die SHA-1-Prüfsumme vor und nach der Änderung. Der Ist
enthalten, wenn sich der Dateimodus nicht ändert; andernfalls geben separate Zeilen das Alte an
und der neue Modus.
3. TAB-, LF-, doppelte Anführungszeichen und Backslash-Zeichen in Pfadnamen werden als \t, \n,
\" bzw. \\. Wenn eine solche Ersetzung erforderlich ist, dann das Ganze
Der Pfadname wird in doppelte Anführungszeichen gesetzt.
4. Alle Datei1-Dateien in der Ausgabe beziehen sich auf Dateien vor dem Festschreiben und alle Datei2
Dateien beziehen sich auf Dateien nach dem Commit. Es ist falsch, jede Änderung auf jede einzelne anzuwenden
Datei nacheinander ablegen. Mit diesem Patch werden beispielsweise a und b vertauscht:
diff --git a/ab/b
umbenennen von a
umbenennen in b
diff --git a/bb/a
Umbenennen von b
umbenennen in a
KOMBINIERT DIFF FORMAT
Jeder Diff-erzeugende Befehl kann die Option -c oder --cc verwenden, um einen zu erzeugen kombiniert diff wann
zeigt eine Zusammenführung. Dies ist das Standardformat beim Anzeigen von Zusammenführungen mit git-diff(1) oder Git-
erklären(1). Beachten Sie auch, dass Sie jedem dieser Befehle die Option -m geben können, um sie zu erzwingen
Generierung von Diffs mit einzelnen übergeordneten Elementen einer Zusammenführung.
A kombiniert diff Format sieht so aus:
diff --combined beschreiben.c
Index fabadb8,cc95eb0..4866510
--- a/describe.c
+++ b/describe.c
@@@ -98,20 -98,12 +98,20 @@@
return (a_date > b_date) ? -1 : (a_date == b_date) ? 0 : 1;
}
- static void beschreiben(char *arg)
-static void beschreiben(struct commit *cmit, int last_one)
++static void beschreiben(char *arg, int last_one)
{
+ unsigned char sha1[20];
+ struct commit *cmit;
struct commit_list *list;
static int initialisiert = 0;
struct commit_name *n;
+ if (get_sha1(arg, sha1) < 0)
+ Nutzung(describe_usage);
+ cmit = lookup_commit_reference(sha1);
+ if (!cmit)
+ Nutzung(describe_usage);
+
if (!initialized) {
initialisiert = 1;
for_each_ref(get_name);
1. Es wird ein „git diff“-Header vorangestellt, der so aussieht (when -c Option ist
benutzt):
diff --combined-Datei
oder so (wann --cc Option wird verwendet):
diff --cc-Datei
2. Es folgen eine oder mehrere erweiterte Kopfzeilen (dieses Beispiel zeigt eine Zusammenführung mit
zwei Eltern):
Index , ..
Modus , ..
Neuer Dateimodus
Modus für gelöschte Dateien ,
Der Modus , .. Zeile erscheint nur, wenn mindestens eine der Ist
anders als der Rest. Erweiterte Header mit Informationen zu erkannten Inhalten
Bewegung (Umbenennen und Kopiererkennung) sind für die Arbeit mit Diff von zwei ausgelegt
und werden nicht vom kombinierten Diff-Format verwendet.
3. Es folgt ein zweizeiliger From-File/To-File-Header
--- eine Datei
+++ b/Datei
Ähnlich dem zweizeiligen Header für herkömmliche einheitlich Diff-Format, /dev/null wird verwendet
Signal erstellte oder gelöschte Dateien.
4. Das Chunk-Header-Format wurde geändert, um zu verhindern, dass Personen es versehentlich weiterleiten
Patch -p1. Das kombinierte Diff-Format wurde zur Überprüfung von Merge-Commit-Änderungen erstellt
war nicht für die Bewerbung gedacht. Die Änderung ähnelt der Änderung im erweiterten Index
Header:
@@@ @@@
Es gibt (Anzahl der Eltern + 1) @-Zeichen im Chunk-Header für kombinierte Diff
Format.
Im Gegensatz zu den traditionellen einheitlich Diff-Format, das zwei Dateien A und B mit einem einzigen zeigt
Spalte mit - (Minus – erscheint in A, wird aber in B entfernt), + (Plus – fehlt in A, fehlt aber
B hinzugefügt) oder das Präfix „ “ (Leerzeichen – unverändert), dieses Format vergleicht zwei oder mehr Dateien
Datei1, Datei2,... mit einer Datei X und zeigt, wie sich X von jeder DateiN unterscheidet. Eine Spalte
für jede DateiN wird der Ausgabezeile vorangestellt, um zu vermerken, wie sich die Zeile von X unterscheidet
es.
A - Zeichen in der Spalte N bedeutet, dass die Zeile in DateiN erscheint, aber nicht erscheint
im Ergebnis. Ein +-Zeichen in der Spalte N bedeutet, dass die Zeile im Ergebnis erscheint,
und fileN hat diese Zeile nicht (mit anderen Worten, die Zeile wurde ab dem Punkt hinzugefügt).
Ansicht dieses Elternteils).
In der obigen Beispielausgabe wurde die Funktionssignatur in beiden Dateien geändert (daher zwei).
- Entfernungen sowohl aus Datei1 als auch aus Datei2, plus ++, um zu bedeuten, dass eine hinzugefügte Zeile dies nicht tut
erscheinen entweder in Datei1 oder Datei2). Auch acht weitere Zeilen sind mit Datei1 identisch, tun es aber
erscheint nicht in Datei2 (daher mit dem Präfix +).
Wenn es von git diff-tree -c angezeigt wird, werden die übergeordneten Elemente eines Merge-Commits mit dem Merge verglichen
Ergebnis (d. h. Datei1..DateiN sind die übergeordneten Elemente). Wenn es von git diff-files -c angezeigt wird, wird es verglichen
Die beiden ungelösten übergeordneten Elemente werden mit der Arbeitsbaumdatei zusammengeführt (d. h. Datei 1 ist Stufe 2, auch bekannt als
„unsere Version“, Datei2 ist Stufe 3, auch bekannt als „ihre Version“).
anderes DIFF FORMATEN
Die Option --summary beschreibt neu hinzugefügte, gelöschte, umbenannte und kopierte Dateien. Der --stat
Option fügt hinzu diffstat(1) Diagramm zur Ausgabe. Diese Optionen können mit anderen kombiniert werden
Optionen wie -p sind für den menschlichen Verzehr gedacht.
Wenn eine Änderung angezeigt wird, die ein Umbenennen oder Kopieren beinhaltet, formatiert die Ausgabe von --stat die
Pfadnamen kompakt durch Kombination gemeinsamer Präfixe und Suffixe der Pfadnamen. Zum Beispiel ein
Änderung, die arch/i386/Makefile nach arch/x86/Makefile verschiebt und dabei 4 Zeilen ändert
so dargestellt:
arch/{i386 => x86}/Makefile | 4 +--
Die Option --numstat gibt die diffstat(1) Informationen, aber für eine einfachere Maschine konzipiert
Verbrauch. Ein Eintrag in der Ausgabe von --numstat sieht folgendermaßen aus:
1 2 README
3 1 arch/{i386 => x86}/Makefile
Das heißt, von links nach rechts:
1. die Anzahl der hinzugefügten Zeilen;
2. eine Registerkarte;
3. die Anzahl der gelöschten Zeilen;
4. eine Registerkarte;
5. Pfadname (ggf. mit Umbenennungs-/Kopierinformationen);
6. eine neue Zeile.
Wenn die Ausgabeoption -z aktiv ist, wird die Ausgabe folgendermaßen formatiert:
1 2 README NUL
3 1 NUL arch/i386/Makefile NUL arch/x86/Makefile NUL
Das heißt:
1. die Anzahl der hinzugefügten Zeilen;
2. eine Registerkarte;
3. die Anzahl der gelöschten Zeilen;
4. eine Registerkarte;
5. eine NUL (existiert nur, wenn umbenannt/kopiert);
6. Pfadname im Vorbild;
7. eine NUL (existiert nur, wenn umbenannt/kopiert);
8. Pfadname im Postimage (existiert nur, wenn umbenannt/kopiert);
9. eine NUL.
Die zusätzliche NUL vor dem Preimage-Pfad im umbenannten Fall dient dazu, Skripts zu ermöglichen, die das lesen
Ausgabe, um festzustellen, ob der aktuell gelesene Datensatz ein Single-Path-Datensatz oder eine Umbenennung/Kopie ist
Aufzeichnen, ohne vorher zu lesen. Nach dem Lesen hinzugefügter und gelöschter Zeilen wird bis NUL gelesen
würde den Pfadnamen ergeben, aber wenn dieser NUL ist, zeigt der Datensatz zwei Pfade an.
BETRIEBS MODI
Sie können wählen, ob Sie der Indexdatei vollständig vertrauen möchten (mithilfe von - zwischengespeichert Flagge)
oder bitten Sie die Diff-Logik, alle Dateien anzuzeigen, die nicht mit dem Statusstatus übereinstimmen
„vorläufig geändert“. Beide Operationen sind in der Tat sehr nützlich.
Zwischengespeichert MODUS
If - zwischengespeichert angegeben ist, können Sie Folgendes fragen:
Zeigen Sie mir die Unterschiede zwischen HEAD und dem aktuellen Index
Inhalte (die, die ich mit „git write-tree“ schreiben würde)
Angenommen, Sie haben an Ihrem Arbeitsverzeichnis gearbeitet und einige Dateien aktualisiert
im Index und sind zum Festschreiben bereit. Du willst es genau sehen was du wirst gehen
festschreiben, ohne ein neues Baumobjekt schreiben und es auf diese Weise vergleichen zu müssen, und um das zu tun,
Du tust es einfach
git diff-index --cached HEAD
Beispiel: Nehmen wir an, ich hätte commit.c in git-commit.c umbenannt und einen Update-Index erstellt
um dies in der Indexdatei wirksam zu machen. Git-Diff-Dateien würden überhaupt nichts anzeigen,
da die Indexdatei mit meinem Arbeitsverzeichnis übereinstimmt. Aber ich mache ein git Diff-Index macht:
torvalds@ppc970:~/git> git diff-index --cached HEAD
-100644 blob 4161aecc6700a2eb579e842af0b7f22b98443f74 commit.c
+100644 blob 4161aecc6700a2eb579e842af0b7f22b98443f74 git-commit.c
Sie können leicht erkennen, dass es sich hier um eine Umbenennung handelt.
Tatsächlich ist git diff-index --cached sollte immer völlig gleichbedeutend damit sein, tatsächlich etwas zu tun
git Schreibbaum und das vergleichen. Außer, dass dieser für den Fall, in dem Sie sind, viel schöner ist
Ich möchte nur überprüfen, wo Sie sind.
Daher ist die Ausführung eines git diff-index --cached grundsätzlich sehr nützlich, wenn Sie sich fragen
„Was habe ich bereits für die Zusage markiert und was ist der Unterschied zu einem vorherigen
Baum".
NICHT zwischengespeichert MODUS
Der Modus „Nicht zwischengespeichert“ verfolgt einen anderen Ansatz und ist möglicherweise nützlicher
die beiden darin, dass das, was es tut, nicht mit a emuliert werden kann git Schreibbaum + git Diff-Baum. Somit
Das ist der Standardmodus. Die nicht zwischengespeicherte Version stellt die Frage:
Zeigen Sie mir die Unterschiede zwischen HEAD und dem aktuell ausgecheckten
Baum – indiziert Inhalte und Dateien, die nicht aktuell sind
Das ist natürlich auch eine sehr nützliche Frage, da sie Ihnen sagt, was Sie wissen könnte verpflichten.
Auch hier stimmt die Ausgabe mit der überein git Diff-Baum -r Ausgang zu einem Abschlag, aber mit einer Wendung.
Die Besonderheit besteht darin, dass wir keinen Sicherungsspeicher haben, wenn eine Datei nicht mit dem Index übereinstimmt
Ding dafür, und wir verwenden den magischen „Alles-Null“-Sha1, um das zu zeigen. Nehmen wir also an, Sie
Ich habe kernel/sched.c bearbeitet, aber noch nichts gemacht git Update-Index noch dran -
Dem neuen Status ist kein „Objekt“ zugeordnet, und Sie erhalten:
torvalds@ppc970:~/v2.6/linux> git diff-index --abbrev HEAD
:100644 100664 7476bb... 000000... kernel/sched.c
Das heißt, es zeigt, dass sich der Baum geändert hat und dass kernel/sched.c nicht aktuell ist
und kann neue Sachen enthalten. Der Nullpunkt sha1 bedeutet, dass Sie dies tun müssen, um den tatsächlichen Unterschied zu erhalten
Schauen Sie sich das Objekt im Arbeitsverzeichnis direkt an, anstatt eine Objekt-zu-Objekt-Verknüpfung durchzuführen
versch.
Hinweis
Wie bei anderen Befehlen dieser Art auch: git Diff-Index Schaut man sich das eigentlich nicht an
Inhalt der Datei überhaupt. Vielleicht hat sich kernel/sched.c also nicht wirklich geändert, und das ist der Fall
nur, dass du es berührt hast. In jedem Fall ist es eine Notiz, die Sie machen müssen git
Update-Index Damit der Index synchronisiert ist.
Hinweis
Es kann sein, dass eine Mischung aus Dateien mit den Bezeichnungen „wurde aktualisiert“ und „ist noch verschmutzt“ angezeigt wird
das Arbeitsverzeichnis" zusammen. Sie können jederzeit erkennen, welche Datei sich in welchem Zustand befindet,
da die „wurde aktualisiert“ einen gültigen sha1 anzeigen und die „nicht synchron mit dem
index“ haben immer den speziellen All-Null-Sha1.
GIT
Ein Teil des git(1) Suite
Verwenden Sie git-diff-index online über die Dienste von onworks.net