Einrichtung und Konfiguration
Projekte holen und erstellen
Grundlegende Snapshots
Branching und Merging
Projekte teilen und aktualisieren
Inspektion und Vergleich
Patching
Debugging
Externe Systeme
Server-Administration
Anleitungen
- gitattributes
- Konventionen der Kommandozeile
- Tägliches Git
- Häufig gestellte Fragen (FAQ)
- Glossar
- Hooks
- gitignore
- gitmodules
- Revisionen
- Submodule
- Tutorial
- Workflows
- Alle Anleitungen...
Administration
Plumbing-Befehle
-
2.52.0
2025-11-17
- 2.51.2 keine Änderungen
-
2.51.1
2025-10-15
- 2.50.1 → 2.51.0 keine Änderungen
-
2.50.0
2025-06-16
- 2.49.1 keine Änderungen
-
2.49.0
2025-03-14
- 2.48.1 → 2.48.2 keine Änderungen
-
2.48.0
2025-01-10
- 2.47.1 → 2.47.3 keine Änderungen
-
2.47.0
2024-10-06
- 2.46.1 → 2.46.4 keine Änderungen
-
2.46.0
2024-07-29
- 2.45.2 → 2.45.4 keine Änderungen
-
2.45.1
2024-04-29
-
2.45.0
2024-04-29
- 2.44.2 → 2.44.4 keine Änderungen
-
2.44.1
2024-04-19
-
2.44.0
2024-02-23
- 2.43.5 → 2.43.7 keine Änderungen
-
2.43.4
2024-04-19
- 2.43.2 → 2.43.3 keine Änderungen
-
2.43.1
2024-02-09
-
2.43.0
2023-11-20
- 2.42.3 → 2.42.4 keine Änderungen
-
2.42.2
2024-04-19
-
2.42.1
2023-11-02
-
2.42.0
2023-08-21
- 2.41.2 → 2.41.3 keine Änderungen
-
2.41.1
2024-04-19
-
2.41.0
2023-06-01
- 2.40.3 → 2.40.4 keine Änderungen
-
2.40.2
2024-04-19
- 2.40.1 keine Änderungen
- 2.40.0 keine Änderungen
- 2.39.5 keine Änderungen
-
2.39.4
2024-04-19
- 2.39.1 → 2.39.3 keine Änderungen
-
2.39.0
2022-12-12
- 2.38.3 → 2.38.5 keine Änderungen
-
2.38.2
2022-12-11
- 2.38.1 keine Änderungen
-
2.38.0
2022-10-02
- 2.37.3 → 2.37.7 keine Änderungen
-
2.37.2
2022-08-11
- 2.37.1 keine Änderungen
-
2.37.0
2022-06-27
- 2.36.1 → 2.36.6 keine Änderungen
-
2.36.0
2022-04-18
- 2.35.1 → 2.35.8 keine Änderungen
-
2.35.0
2022-01-24
- 2.34.1 → 2.34.8 keine Änderungen
-
2.34.0
2021-11-15
- 2.33.3 → 2.33.8 keine Änderungen
-
2.33.2
2022-03-23
-
2.33.1
2021-10-12
- 2.32.1 → 2.33.0 keine Änderungen
-
2.32.0
2021-06-06
- 2.31.1 → 2.31.8 keine Änderungen
-
2.31.0
2021-03-15
- 2.30.1 → 2.30.9 keine Änderungen
-
2.30.0
2020-12-27
- 2.29.1 → 2.29.3 keine Änderungen
-
2.29.0
2020-10-19
- 2.28.1 keine Änderungen
-
2.28.0
2020-07-27
- 2.27.1 keine Änderungen
-
2.27.0
2020-06-01
- 2.26.1 → 2.26.3 keine Änderungen
-
2.26.0
2020-03-22
- 2.25.2 → 2.25.5 keine Änderungen
-
2.25.1
2020-02-17
-
2.25.0
2020-01-13
- 2.23.1 → 2.24.4 keine Änderungen
-
2.23.0
2019-08-16
- 2.22.2 → 2.22.5 keine Änderungen
-
2.22.1
2019-08-11
-
2.22.0
2019-06-07
- 2.20.1 → 2.21.4 keine Änderungen
-
2.20.0
2018-12-09
- 2.19.3 → 2.19.6 keine Änderungen
-
2.19.2
2018-11-21
- 2.19.1 keine Änderungen
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 keine Änderungen
-
2.18.0
2018-06-21
- 2.17.1 → 2.17.6 keine Änderungen
-
2.17.0
2018-04-02
-
2.16.6
2019-12-06
-
2.15.4
2019-12-06
-
2.14.6
2019-12-06
- 2.13.7 keine Änderungen
-
2.12.5
2017-09-22
-
2.11.4
2017-09-22
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
-
2.7.6
2017-07-30
-
2.6.7
2017-05-05
-
2.5.6
2017-05-05
-
2.4.12
2017-05-05
-
2.3.10
2015-09-28
-
2.2.3
2015-09-04
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
SYNOPSIS
git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | -P | --no-pager] [--no-replace-objects] [--no-lazy-fetch]
[--no-optional-locks] [--no-advice] [--bare] [--git-dir=<path>]
[--work-tree=<path>] [--namespace=<name>] [--config-env=<name>=<envvar>]
<command> [<args>]
BESCHREIBUNG
Git ist ein schnelles, skalierbares, verteiltes Revisionskontrollsystem mit einem ungewöhnlich umfangreichen Befehlssatz, der sowohl hochrangige Operationen als auch vollen Zugriff auf interne Funktionen bietet.
Siehe gittutorial[7] für den Einstieg, dann siehe giteveryday[7] für eine nützliche Mindestmenge an Befehlen. Das Git User's Manual bietet eine ausführlichere Einführung.
Nachdem Sie die grundlegenden Konzepte gemeistert haben, können Sie auf diese Seite zurückkehren, um zu erfahren, welche Befehle Git bietet. Mehr über einzelne Git-Befehle erfahren Sie mit "git help command". Die Handbuchseite gitcli[7] gibt Ihnen einen Überblick über die Syntax der Befehlszeilenbefehle.
Eine formatierte und hyperverlinkte Kopie der neuesten Git-Dokumentation kann unter https://git.github.io/htmldocs/git.html oder https://git-scm.de/docs eingesehen werden.
OPTIONEN
- -v
- --version
-
Gibt die Git-Suite-Version aus, von der das Programm git stammt.
Diese Option wird intern in
gitversion... umgewandelt und akzeptiert dieselben Optionen wie der Befehl git-version[1]. Wenn auch--helpangegeben wird, hat dies Vorrang vor--version. - -h
- --help
-
Gibt die Syntax und eine Liste der am häufigsten verwendeten Befehle aus. Wenn die Option
--alloder-aangegeben wird, werden alle verfügbaren Befehle ausgegeben. Wenn ein Git-Befehl benannt wird, ruft diese Option die Handbuchseite für diesen Befehl auf.Weitere Optionen sind verfügbar, um die Anzeige der Handbuchseite zu steuern. Informationen dazu finden Sie unter git-help[1], da
git--help... intern ingithelp... umgewandelt wird. - -C <Pfad>
-
Führen Sie aus, als ob git in <Pfad> statt im aktuellen Arbeitsverzeichnis gestartet worden wäre. Wenn mehrere
-COptionen angegeben werden, wird jede nachfolgende nicht-absolute-C<Pfad> relativ zur vorherigen-C<Pfad> interpretiert. Wenn <Pfad> vorhanden, aber leer ist, z. B.-C"", dann bleibt das aktuelle Arbeitsverzeichnis unverändert.Diese Option beeinflusst Optionen, die Pfadnamen erwarten, wie z. B.
--git-dirund--work-tree, da deren Interpretation der Pfadnamen relativ zum Arbeitsverzeichnis erfolgt, das durch die Option-Cverursacht wurde. Zum Beispiel sind die folgenden Aufrufe äquivalentgit --git-dir=a.git --work-tree=b -C c status git --git-dir=c/a.git --work-tree=c/b status
- -c <Name>=<Wert>
-
Übergibt einen Konfigurationsparameter an den Befehl. Der angegebene Wert überschreibt Werte aus Konfigurationsdateien. Der <Name> wird im selben Format erwartet, wie er von git config aufgeführt wird (Unterkeys getrennt durch Punkte).
Beachten Sie, dass das Weglassen des
=ingit-cfoo.bar... zulässig ist undfoo.barauf den booleschen Wert true setzt (ähnlich wie [foo]barin einer Konfigurationsdatei). Das Einbeziehen des Gleichheitszeichens mit einem leeren Wert (wiegit-cfoo.bar=...) setztfoo.barauf den leeren String, dengitconfig--type=boolinfalsekonvertiert. - --config-env=<Name>=<Umgebungsvariable>
-
Ähnlich wie
-c<Name>=<Wert>, weist der Konfigurationsvariable <Name> einen Wert zu, wobei <Umgebungsvariable> der Name einer Umgebungsvariablen ist, aus der der Wert abgerufen werden soll. Im Gegensatz zu-cgibt es keine Kurzform zum direkten Setzen des Wertes auf einen leeren String; stattdessen muss die Umgebungsvariable selbst auf den leeren String gesetzt werden. Es ist ein Fehler, wenn die <Umgebungsvariable> in der Umgebung nicht existiert. <Umgebungsvariable> darf kein Gleichheitszeichen enthalten, um Mehrdeutigkeit zu vermeiden, falls <Name> eines enthält.Dies ist nützlich für Fälle, in denen Sie flüchtige Konfigurationsoptionen an git übergeben möchten, dies aber auf Betriebssystemen tun, auf denen andere Prozesse Ihre Kommandozeile (z. B.
/proc/self/cmdline) lesen könnten, aber nicht Ihre Umgebung (z. B./proc/self/environ). Dieses Verhalten ist unter Linux Standard, aber möglicherweise nicht auf Ihrem System.Beachten Sie, dass dies die Sicherheit für Variablen wie
http.extraHeadererhöhen kann, bei denen die sensiblen Informationen Teil des Wertes sind, aber nicht z. B. fürurl.<base>.insteadOf, wo die sensiblen Informationen Teil des Schlüssels sein können. - --exec-path[=<Pfad>]
-
Pfad zu den Kern-Git-Programmen, wo immer sie installiert sind. Dies kann auch durch Setzen der Umgebungsvariable GIT_EXEC_PATH gesteuert werden. Wenn kein Pfad angegeben wird, gibt git die aktuelle Einstellung aus und beendet sich dann.
- --html-path
-
Gibt den Pfad aus, ohne abschließenden Schrägstrich, an dem die HTML-Dokumentation von Git installiert ist, und beendet sich.
- --man-path
-
Gibt den Manpath (siehe
man(1)) für die Manpages dieser Git-Version aus und beendet sich. - --info-path
-
Gibt den Pfad aus, an dem die Info-Dateien zur Dokumentation dieser Git-Version installiert sind, und beendet sich.
- -p
- --paginate
-
Leitet die gesamte Ausgabe in less (oder, wenn gesetzt, $PAGER) um, wenn die Standardausgabe ein Terminal ist. Dies überschreibt die Konfigurationsoptionen
pager.<cmd> (siehe Abschnitt "Konfigurationsmechanismus" unten). - -P
- --no-pager
-
Leitet die Git-Ausgabe nicht in einen Pager um.
- --git-dir=<Pfad>
-
Legt den Pfad zum Repository (".git"-Verzeichnis) fest. Dies kann auch durch Setzen der Umgebungsvariable
GIT_DIRgesteuert werden. Es kann ein absoluter Pfad oder ein relativer Pfad zum aktuellen Arbeitsverzeichnis sein.Die Angabe des Speicherorts des ".git"-Verzeichnisses mit dieser Option (oder der Umgebungsvariable
GIT_DIR) deaktiviert die Repository-Suche, die versucht, ein Verzeichnis mit einer ".git"-Unterverzeichnis zu finden (wodurch das Repository und die oberste Ebene des Arbeitsbaums entdeckt werden), und teilt Git mit, dass Sie sich auf der obersten Ebene des Arbeitsbaums befinden. Wenn Sie sich nicht im obersten Verzeichnis des Arbeitsbaums befinden, sollten Sie Git mit der Option--work-tree=<Pfad> (oder der UmgebungsvariableGIT_WORK_TREE) mitteilen, wo sich die oberste Ebene des Arbeitsbaums befindet.Wenn Sie git einfach so ausführen möchten, als wäre es in <Pfad> gestartet worden, verwenden Sie
git-C<Pfad>. - --work-tree=<Pfad>
-
Legt den Pfad zum Arbeitsbaum fest. Es kann ein absoluter Pfad oder ein Pfad relativ zum aktuellen Arbeitsverzeichnis sein. Dies kann auch durch Setzen der Umgebungsvariable GIT_WORK_TREE und der Konfigurationsvariable core.worktree gesteuert werden (siehe core.worktree in git-config[1] für eine detailliertere Diskussion).
- --namespace=<Pfad>
-
Legt den Git-Namespace fest. Weitere Details finden Sie unter gitnamespaces[7]. Äquivalent zum Setzen der Umgebungsvariable
GIT_NAMESPACE. - --bare
-
Behandelt das Repository als ein Bare-Repository. Wenn die Umgebungsvariable GIT_DIR nicht gesetzt ist, wird sie auf das aktuelle Arbeitsverzeichnis gesetzt.
- --no-replace-objects
-
Verwendet keine Ersetzungsreferenzen, um Git-Objekte zu ersetzen. Dies ist äquivalent zum Exportieren der Umgebungsvariable
GIT_NO_REPLACE_OBJECTSmit beliebigem Wert. Weitere Informationen finden Sie unter git-replace[1]. - --no-lazy-fetch
-
Ruft fehlende Objekte nicht bei Bedarf vom Promisor-Remote ab. Nützlich zusammen mit
gitcat-file-e<Objekt>, um zu sehen, ob das Objekt lokal verfügbar ist. Dies ist äquivalent zum Setzen der UmgebungsvariableGIT_NO_LAZY_FETCHauf1. - --no-optional-locks
-
Führt keine optionalen Operationen aus, die Sperren erfordern. Dies ist äquivalent zum Setzen von
GIT_OPTIONAL_LOCKSauf0. - --no-advice
-
Deaktiviert die Ausgabe aller Ratschläge.
- --literal-pathspecs
-
Behandelt Pfadangaben wörtlich (d. h. kein Globbing, keine Pfadspec-Magie). Dies ist äquivalent zum Setzen der Umgebungsvariable
GIT_LITERAL_PATHSPECSauf1. - --glob-pathspecs
-
Fügt allen Pfadangaben "glob"-Magie hinzu. Dies ist äquivalent zum Setzen der Umgebungsvariable
GIT_GLOB_PATHSPECSauf1. Das Deaktivieren von Globbing für einzelne Pfadangaben kann mit der Pfadspec-Magie ":(literal)" erfolgen. - --noglob-pathspecs
-
Fügt allen Pfadangaben "literal"-Magie hinzu. Dies ist äquivalent zum Setzen der Umgebungsvariable
GIT_NOGLOB_PATHSPECSauf1. Das Aktivieren von Globbing für einzelne Pfadangaben kann mit der Pfadspec-Magie ":(glob)" erfolgen. - --icase-pathspecs
-
Fügt allen Pfadangaben "icase"-Magie hinzu. Dies ist äquivalent zum Setzen der Umgebungsvariable
GIT_ICASE_PATHSPECSauf1. - --list-cmds=<Gruppe>[,<Gruppe>…]
-
Listet Befehle nach Gruppe auf. Dies ist eine interne/experimentelle Option und kann sich in Zukunft ändern oder entfernt werden. Unterstützte Gruppen sind: builtins, parseopt (eingebaute Befehle, die parse-options verwenden), deprecated (veraltete eingebaute Befehle), main (alle Befehle im libexec-Verzeichnis), others (alle anderen Befehle in
$PATHmit dem Präfix git-), list-<kategorie> (siehe Kategorien in command-list.txt), nohelpers (Hilfsbefehle ausschließen), alias und config (Befehlsliste aus Konfigurationsvariable completion.commands abrufen). - --attr-source=<tree-ish>
-
Liest gitattributes aus <tree-ish> anstelle des Arbeitsbaums. Siehe gitattributes[5]. Dies ist äquivalent zum Setzen der Umgebungsvariable
GIT_ATTR_SOURCE.
GIT BEFEHLE
Wir teilen Git in Befehle auf hoher Ebene ("Porcelain") und Befehle auf niedriger Ebene ("Plumbing") ein.
Befehle auf hoher Ebene (Porcelain)
Wir trennen die Porcelain-Befehle in die Hauptbefehle und einige ergänzende Benutzerhilfen.
Haupt-Porcelain-Befehle
- git-add[1]
-
Fügt Datei-Inhalte zum Index hinzu
- git-am[1]
-
Wendet eine Reihe von Patches aus einer Mailbox an
- git-archive[1]
-
Erstellt ein Archiv von Dateien aus einem benannten Baum
- git-backfill[1]
-
Lädt fehlende Objekte in einem Teilklon herunter
- git-bisect[1]
-
Verwendet binäre Suche, um den Commit zu finden, der einen Fehler eingeführt hat
- git-branch[1]
-
Listet, erstellt oder löscht Zweige
- git-bundle[1]
-
Bewegt Objekte und Referenzen per Archiv
- git-checkout[1]
-
Wechselt Zweige oder stellt Arbeitsbaumdateien wieder her
- git-cherry-pick[1]
-
Wendet die Änderungen an, die durch einige vorhandene Commits eingeführt wurden
- git-citool[1]
-
Grafische Alternative zu git-commit
- git-clean[1]
-
Entfernt nicht verfolgte Dateien aus dem Arbeitsbaum
- git-clone[1]
-
Klonen eines Repositorys in ein neues Verzeichnis
- git-commit[1]
-
Zeichnet Änderungen im Repository auf
- git-describe[1]
-
Gibt einem Objekt einen menschenlesbaren Namen basierend auf einer verfügbaren Referenz
- git-diff[1]
-
Zeigt Änderungen zwischen Commits, Commit und Arbeitsbaum usw.
- git-fetch[1]
-
Lädt Objekte und Referenzen aus einem anderen Repository herunter
- git-format-patch[1]
-
Bereitet Patches für die E-Mail-Einreichung vor
- git-gc[1]
-
Bereinigt unnötige Dateien und optimiert das lokale Repository
- git-grep[1]
-
Gibt Zeilen aus, die einem Muster entsprechen
- git-gui[1]
-
Eine portable grafische Benutzeroberfläche für Git
- git-init[1]
-
Erstellt ein leeres Git-Repository oder initialisiert ein bestehendes neu
- git-log[1]
-
Zeigt Commit-Logs an
- git-maintenance[1]
-
Führt Aufgaben zur Optimierung von Git-Repository-Daten aus
- git-merge[1]
-
Fügt zwei oder mehr Entwicklungsgeschichten zusammen
- git-mv[1]
-
Verschiebt oder benennt eine Datei, ein Verzeichnis oder einen Symlink um
- git-notes[1]
-
Fügt Notizen zu Objekten hinzu oder inspiziert sie
- git-pull[1]
-
Holt von und integriert mit einem anderen Repository oder einem lokalen Zweig
- git-push[1]
-
Aktualisiert Remote-Referenzen zusammen mit zugehörigen Objekten
- git-range-diff[1]
-
Vergleicht zwei Commit-Bereiche (z. B. zwei Versionen eines Zweigs)
- git-rebase[1]
-
Wendet Commits erneut auf eine andere Basis-Spitze an
- git-reset[1]
-
Setzt den aktuellen HEAD auf den angegebenen Zustand zurück
- git-restore[1]
-
Stellt Arbeitsbaumdateien wieder her
- git-revert[1]
-
Macht einige bestehende Commits rückgängig
- git-rm[1]
-
Entfernt Dateien aus dem Arbeitsbaum und dem Index
- git-shortlog[1]
-
Fasst die Ausgabe von git log zusammen
- git-show[1]
-
Zeigt verschiedene Arten von Objekten an
- git-sparse-checkout[1]
-
Reduziert Ihren Arbeitsbaum auf eine Teilmenge von verfolgten Dateien
- git-stash[1]
-
Lagert Änderungen in einem unsauberen Arbeitsverzeichnis aus
- git-status[1]
-
Zeigt den Status des Arbeitsbaums an
- git-submodule[1]
-
Initialisiert, aktualisiert oder inspiziert Untermodule
- git-switch[1]
-
Wechselt Zweige
- git-tag[1]
-
Erstellt, listet, löscht oder verifiziert Tags
- git-worktree[1]
-
Verwaltet mehrere Arbeitsbäume
- gitk[1]
-
Der Git-Repository-Browser
- scalar[1]
-
Ein Werkzeug zur Verwaltung großer Git-Repositories
Ergänzende Befehle
Manipulatoren
- git-config[1]
-
Ruft Repository- oder globale Optionen ab und setzt sie
- git-fast-export[1]
-
Git-Datenexporteur
- git-fast-import[1]
-
Backend für schnelle Git-Datenimporteure
- git-filter-branch[1]
-
Schreibt Zweige neu
- git-mergetool[1]
-
Führt Merge-Konfliktlösungs-Tools aus, um Merge-Konflikte zu lösen
- git-pack-refs[1]
-
Packt Heads und Tags für einen effizienten Repository-Zugriff
- git-prune[1]
-
Beschneidet alle unerreichbaren Objekte aus der Objektdatenbank
- git-reflog[1]
-
Verwaltet Reflog-Informationen
- git-refs[1]
-
Low-Level-Zugriff auf Refs
- git-remote[1]
-
Verwaltet Sätze von verfolgten Repositories
- git-repack[1]
-
Packt entpackte Objekte in einem Repository
- git-replace[1]
-
Erstellt, listet, löscht Referenzen zum Ersetzen von Objekten
Interrogatoren
- git-annotate[1]
-
Annotiert Zeilen einer Datei mit Commit-Informationen
- git-blame[1]
-
Zeigt an, welche Revision und welcher Autor jede Zeile einer Datei zuletzt geändert hat
- git-bugreport[1]
-
Sammelt Informationen für den Benutzer zur Einreichung eines Fehlerberichts
- git-count-objects[1]
-
Zählt die Anzahl der entpackten Objekte und ihren Speicherplatzverbrauch
- git-diagnose[1]
-
Erstellt ein ZIP-Archiv mit Diagnoseinformationen
- git-difftool[1]
-
Zeigt Unterschiede mit gängigen Diff-Tools an
- git-fsck[1]
-
Überprüft die Konnektivität und Gültigkeit der Objekte in der Datenbank
- git-help[1]
-
Zeigt Hilfsinformationen zu Git an
- git-instaweb[1]
-
Durchsuchen Sie Ihr Arbeitsrepository sofort in gitweb
- git-merge-tree[1]
-
Führt einen Merge durch, ohne Index oder Arbeitsbaum zu berühren
- git-rerere[1]
-
Wiederverwendet aufgezeichnete Lösungen für Konflikt-Merges
- git-show-branch[1]
-
Zeigt Zweige und ihre Commits an
- git-verify-commit[1]
-
Überprüft die GPG-Signatur von Commits
- git-verify-tag[1]
-
Überprüft die GPG-Signatur von Tags
- git-version[1]
-
Zeigt Versionsinformationen über Git an
- git-whatchanged[1]
-
Zeigt Logs mit den Unterschieden, die jeder Commit einführt
- gitweb[1]
-
Git Web-Schnittstelle (Web-Frontend für Git-Repositories)
Interaktion mit anderen
Diese Befehle dienen zur Interaktion mit fremden SCMs und mit anderen Personen über Patches per E-Mail.
- git-archimport[1]
-
Importiert ein GNU Arch-Repository in Git
- git-cvsexportcommit[1]
-
Exportiert einen einzelnen Commit in einen CVS-Checkout
- git-cvsimport[1]
-
Rettet Ihre Daten aus einem anderen SCM, das andere gerne hassen
- git-cvsserver[1]
-
Ein CVS-Server-Emulator für Git
- git-imap-send[1]
-
Sendet eine Sammlung von Patches von stdin an einen IMAP-Ordner
- git-p4[1]
-
Importiert aus und sendet an Perforce-Repositories
- git-quiltimport[1]
-
Wendet einen Quilt-Patchset auf den aktuellen Zweig an
- git-request-pull[1]
-
Erstellt eine Zusammenfassung der ausstehenden Änderungen
- git-send-email[1]
-
Sendet eine Sammlung von Patches als E-Mails
- git-svn[1]
-
Bidirektionale Operation zwischen einem Subversion-Repository und Git
Reset, Restore und Revert
Es gibt drei Befehle mit ähnlichen Namen: git reset, git restore und git revert.
-
git-revert[1] befasst sich damit, einen neuen Commit zu erstellen, der die von anderen Commits gemachten Änderungen rückgängig macht.
-
git-restore[1] befasst sich damit, Dateien im Arbeitsbaum entweder aus dem Index oder aus einem anderen Commit wiederherzustellen. Dieser Befehl aktualisiert Ihren Zweig nicht. Der Befehl kann auch verwendet werden, um Dateien im Index aus einem anderen Commit wiederherzustellen.
-
git-reset[1] befasst sich damit, Ihren Zweig zu aktualisieren und die Spitze zu verschieben, um Commits zum Zweig hinzuzufügen oder zu entfernen. Diese Operation ändert die Commit-Historie.
gitresetkann auch verwendet werden, um den Index wiederherzustellen, was sich mitgitrestoreüberschneidet.
Befehle auf niedriger Ebene (Plumbing)
Obwohl Git über eine eigene Porcelain-Schicht verfügt, reichen seine Low-Level-Befehle aus, um die Entwicklung alternativer Porcelains zu unterstützen. Entwickler solcher Porcelains beginnen vielleicht mit dem Lesen von git-update-index[1] und git-read-tree[1].
Die Schnittstelle (Eingabe, Ausgabe, Optionssatz und Semantik) zu diesen Low-Level-Befehlen ist darauf ausgelegt, weitaus stabiler zu sein als die Schnittstellen zu Porcelain-Befehlen, da diese Befehle hauptsächlich für die skriptgesteuerte Verwendung gedacht sind. Die Schnittstelle zu Porcelain-Befehlen kann hingegen geändert werden, um die Benutzerfreundlichkeit zu verbessern.
Die folgende Beschreibung unterteilt die Low-Level-Befehle in Befehle, die Objekte manipulieren (im Repository, Index und Arbeitsbaum), Befehle, die Objekte abfragen und vergleichen, und Befehle, die Objekte und Referenzen zwischen Repositories bewegen.
Manipulationsbefehle
- git-apply[1]
-
Wendet einen Patch auf Dateien und/oder den Index an
- git-checkout-index[1]
-
Kopiert Dateien aus dem Index in den Arbeitsbaum
- git-commit-graph[1]
-
Schreibt und verifiziert Git Commit-Graph-Dateien
- git-commit-tree[1]
-
Erstellt ein neues Commit-Objekt
- git-hash-object[1]
-
Berechnet die Objekt-ID und erstellt optional ein Objekt aus einer Datei
- git-index-pack[1]
-
Erstellt eine Pack-Indexdatei für ein vorhandenes gepacktes Archiv
- git-merge-file[1]
-
Führt einen Drei-Wege-Dateimerge durch
- git-merge-index[1]
-
Führt einen Merge für Dateien durch, die zusammengeführt werden müssen
- git-mktag[1]
-
Erstellt ein Tag-Objekt mit zusätzlicher Validierung
- git-mktree[1]
-
Erstellt ein Baum-Objekt aus ls-tree-formatiertem Text
- git-multi-pack-index[1]
-
Schreibt und verifiziert Multi-Pack-Indizes
- git-pack-objects[1]
-
Erstellt ein gepacktes Archiv von Objekten
- git-prune-packed[1]
-
Entfernt zusätzliche Objekte, die bereits in Pack-Dateien vorhanden sind
- git-read-tree[1]
-
Liest Baum-Informationen in den Index
- git-replay[1]
-
EXPERIMENTELL: Wendet Commits auf einer neuen Basis erneut an, funktioniert auch mit Bare-Repositories
- git-symbolic-ref[1]
-
Liest, modifiziert und löscht symbolische Referenzen
- git-unpack-objects[1]
-
Objekte aus einem gepackten Archiv entpacken
- git-update-index[1]
-
Dateiinhalte im Arbeitsbaum im Index registrieren
- git-update-ref[1]
-
Sicher den Objekt-Namen in einem Ref aktualisieren
- git-write-tree[1]
-
Einen Baum-Objekt aus dem aktuellen Index erstellen
Abfragebefehle
- git-cat-file[1]
-
Inhalte oder Details von Repository-Objekten bereitstellen
- git-cherry[1]
-
Commits finden, die noch nicht auf den Upstream angewendet wurden
- git-diff-files[1]
-
Dateien im Arbeitsbaum und im Index vergleichen
- git-diff-index[1]
-
Einen Baum mit dem Arbeitsbaum oder dem Index vergleichen
- git-diff-pairs[1]
-
Inhalt und Modus von bereitgestellten Blob-Paaren vergleichen
- git-diff-tree[1]
-
Inhalt und Modus von Blobs vergleichen, die über zwei Baum-Objekte gefunden wurden
- git-for-each-ref[1]
-
Informationen über jeden Ref ausgeben
- git-for-each-repo[1]
-
Einen Git-Befehl auf einer Liste von Repositories ausführen
- git-get-tar-commit-id[1]
-
Commit-ID aus einem mit git-archive erstellten Archiv extrahieren
- git-last-modified[1]
-
EXPERIMENTELL: Zeigen, wann Dateien zuletzt geändert wurden
- git-ls-files[1]
-
Informationen über Dateien im Index und im Arbeitsbaum anzeigen
- git-ls-remote[1]
-
Referenzen in einem entfernten Repository auflisten
- git-ls-tree[1]
-
Den Inhalt eines Baum-Objekts auflisten
- git-merge-base[1]
-
Möglichst gute gemeinsame Vorfahren für einen Merge finden
- git-name-rev[1]
-
Symbolische Namen für gegebene Revisionen finden
- git-pack-redundant[1]
-
Redundante Pack-Dateien finden
- git-repo[1]
-
Informationen über das Repository abrufen
- git-rev-list[1]
-
Commit-Objekte in umgekehrt chronologischer Reihenfolge auflisten
- git-rev-parse[1]
-
Parameter auswählen und bearbeiten
- git-show-index[1]
-
Index eines gepackten Archivs anzeigen
- git-show-ref[1]
-
Referenzen in einem lokalen Repository auflisten
- git-unpack-file[1]
-
Erzeugt eine temporäre Datei mit dem Inhalt eines Blobs
- git-var[1]
-
Einen logischen Git-Variablenwert anzeigen
- git-verify-pack[1]
-
Gepackte Git-Archivdateien validieren
Generell berühren die Abfragebefehle die Dateien im Arbeitsbaum nicht.
Synchronisieren von Repositories
- git-daemon[1]
-
Ein sehr einfacher Server für Git-Repositories
- git-fetch-pack[1]
-
Fehlende Objekte von einem anderen Repository empfangen
- git-http-backend[1]
-
Serverseitige Implementierung von Git über HTTP
- git-send-pack[1]
-
Objekte über das Git-Protokoll an ein anderes Repository senden
- git-update-server-info[1]
-
Hilfsdatei aktualisieren, um "dumme" Server zu unterstützen
Die folgenden sind Hilfsbefehle, die von den obigen Befehlen verwendet werden; Endbenutzer verwenden sie normalerweise nicht direkt.
- git-http-fetch[1]
-
Von einem entfernten Git-Repository über HTTP herunterladen
- git-http-push[1]
-
Objekte über HTTP/DAV an ein anderes Repository senden
- git-receive-pack[1]
-
Empfangen, was in das Repository gepusht wurde
- git-shell[1]
-
Eingeschränkte Login-Shell für reinen Git-SSH-Zugang
- git-upload-archive[1]
-
Archiv an git-archive zurücksenden
- git-upload-pack[1]
-
Objekte gepackt an git-fetch-pack zurücksenden
Interne Hilfsbefehle
Dies sind interne Hilfsbefehle, die von anderen Befehlen verwendet werden; Endbenutzer verwenden sie normalerweise nicht direkt.
- git-check-attr[1]
-
gitattributes-Informationen anzeigen
- git-check-ignore[1]
-
gitignore / exclude-Dateien debuggen
- git-check-mailmap[1]
-
Kanonische Namen und E-Mail-Adressen von Kontakten anzeigen
- git-check-ref-format[1]
-
Stellt sicher, dass ein Referenzname korrekt formatiert ist
- git-column[1]
-
Daten in Spalten anzeigen
- git-credential[1]
-
Benutzeranmeldeinformationen abrufen und speichern
- git-credential-cache[1]
-
Helfer zum temporären Speichern von Passwörtern im Speicher
- git-credential-store[1]
-
Helfer zum Speichern von Anmeldeinformationen auf der Festplatte
- git-fmt-merge-msg[1]
-
Eine Merge-Commit-Nachricht erstellen
- git-hook[1]
-
Git-Hooks ausführen
- git-interpret-trailers[1]
-
Strukturierte Informationen in Commit-Nachrichten hinzufügen oder parsen
- git-mailinfo[1]
-
Patch und Autorschaft aus einer einzelnen E-Mail-Nachricht extrahieren
- git-mailsplit[1]
-
Einfaches UNIX mbox-Splitterprogramm
- git-merge-one-file[1]
-
Das Standard-Hilfsprogramm für git-merge-index
- git-patch-id[1]
-
Eindeutige ID für einen Patch berechnen
- git-sh-i18n[1]
-
Git's i18n-Setup-Code für Shell-Skripte
- git-sh-setup[1]
-
Gemeinsamer Setup-Code für Git-Shell-Skripte
- git-stripspace[1]
-
Unnötige Leerzeichen entfernen
Anleitungen
Die folgenden Dokumentationsseiten sind Anleitungen zu Git-Konzepten.
- gitcore-tutorial[7]
-
Ein Git-Core-Tutorial für Entwickler
- gitcredentials[7]
-
Bereitstellung von Benutzernamen und Passwörtern für Git
- gitcvs-migration[7]
-
Git für CVS-Benutzer
- gitdiffcore[7]
-
Anpassen der Diff-Ausgabe
- giteveryday[7]
-
Ein nützlicher Mindestsatz von Befehlen für den täglichen Git-Gebrauch
- gitfaq[7]
-
Häufig gestellte Fragen zur Verwendung von Git
- gitglossary[7]
-
Ein Git-Glossar
- gitnamespaces[7]
-
Git-Namensräume
- gitremote-helpers[7]
-
Hilfsprogramme zur Interaktion mit entfernten Repositories
- gitsubmodules[7]
-
Ein Repository innerhalb eines anderen einbinden
- gittutorial[7]
-
Eine Einführung in Git
- gittutorial-2[7]
-
Eine Einführung in Git: Teil zwei
- gitworkflows[7]
-
Eine Übersicht über empfohlene Arbeitsabläufe mit Git
Repository-, Befehls- und Dateischnittstellen
Diese Dokumentation bespricht Repository- und Befehlsschnittstellen, mit denen Benutzer direkt interagieren sollen. Weitere Details zu den Kriterien finden Sie unter --user-formats in git-help[1].
- gitattributes[5]
-
Attribute pro Pfad definieren
- gitcli[7]
-
Git-Befehlszeilenschnittstelle und Konventionen
- githooks[5]
-
Von Git verwendete Hooks
- gitignore[5]
-
Definiert absichtlich nicht verfolgte Dateien, die ignoriert werden sollen
- gitmailmap[5]
-
Autoren-/Committernamen und/oder E-Mail-Adressen zuordnen
- gitmodules[5]
-
Submodul-Eigenschaften definieren
- gitrepository-layout[5]
-
Git-Repository-Layout
- gitrevisions[7]
-
Revisionen und Bereiche für Git spezifizieren
Dateiformate, Protokolle und andere Entwicklerschnittstellen
Diese Dokumentation bespricht Dateiformate, übertragene Protokolle und andere Git-Entwicklerschnittstellen. Siehe --developer-interfaces in git-help[1].
- gitformat-bundle[5]
-
Das Bundle-Dateiformat
- gitformat-chunk[5]
-
Chunk-basierte Dateiformate
- gitformat-commit-graph[5]
-
Git Commit-Graph-Format
- gitformat-index[5]
-
Git-Index-Format
- gitformat-pack[5]
-
Git-Pack-Format
- gitformat-signature[5]
-
Git kryptografische Signaturformate
- gitprotocol-capabilities[5]
-
Protokoll v0 und v1 Fähigkeiten
- gitprotocol-common[5]
-
Gemeinsamkeiten verschiedener Protokolle
- gitprotocol-http[5]
-
Git HTTP-basierte Protokolle
- gitprotocol-pack[5]
-
Wie Packs über das Netzwerk übertragen werden
- gitprotocol-v2[5]
-
Git Wire Protocol, Version 2
Konfigurationsmechanismus
Git verwendet ein einfaches Textformat, um Anpassungen zu speichern, die pro Repository und pro Benutzer gelten. Eine solche Konfigurationsdatei kann wie folgt aussehen
# # A '#' or ';' character indicates a comment. # ; core variables [core] ; Don't trust file modes filemode = false ; user identity [user] name = "Junio C Hamano" email = "gitster@pobox.com"
Verschiedene Befehle lesen aus der Konfigurationsdatei und passen ihre Operationen entsprechend an. Siehe git-config[1] für eine Liste und weitere Details zum Konfigurationsmechanismus.
Terminologie für Bezeichner
- <object>
-
Gibt den Objekt-Namen für jeden Objekttyp an.
- <blob>
-
Gibt einen Blob-Objekt-Namen an.
- <tree>
-
Gibt einen Baum-Objekt-Namen an.
- <commit>
-
Gibt einen Commit-Objekt-Namen an.
- <tree-ish>
-
Gibt einen Baum-, Commit- oder Tag-Objektnamen an. Ein Befehl, der ein <tree-ish>-Argument nimmt, möchte letztendlich mit einem Baum-Objekt arbeiten, dereferenziert aber automatisch Commit- und Tag-Objekte, die auf ein Baum-Objekt verweisen.
- <commit-ish>
-
Gibt einen Commit- oder Tag-Objektnamen an. Ein Befehl, der ein <commit-ish>-Argument nimmt, möchte letztendlich mit einem Commit-Objekt arbeiten, dereferenziert aber automatisch Tag-Objekte, die auf einen Commit verweisen.
- <type>
-
Gibt an, dass ein Objekttyp erforderlich ist. Derzeit einer von:
blob,tree,commitodertag. - <file>
-
Gibt einen Dateinamen an – fast immer relativ zum Wurzelverzeichnis der Baumstruktur, die
GIT_INDEX_FILEbeschreibt.
Symbolische Bezeichner
Jeder Git-Befehl, der ein <object> akzeptiert, kann auch die folgende symbolische Notation verwenden
Eine vollständigere Liste von Möglichkeiten, Objekt-Namen zu schreiben, finden Sie im Abschnitt "SPECIFYING REVISIONS" in gitrevisions[7].
Datei-/Verzeichnisstruktur
Bitte sehen Sie das Dokument gitrepository-layout[5].
Lesen Sie githooks[5] für weitere Details zu jedem Hook.
Höher entwickelte SCMs können zusätzliche Informationen im $GIT_DIR bereitstellen und verwalten.
Terminologie
Bitte sehen Sie gitglossary[7].
Umgebungsvariablen
Verschiedene Git-Befehle beachten Umgebungsvariablen und ändern ihr Verhalten. Die als "Boolean" gekennzeichneten Umgebungsvariablen nehmen ihre Werte auf die gleiche Weise an wie boolesche Konfigurationsvariablen, d.h. "true", "yes", "on" und positive Zahlen werden als "yes" interpretiert, während "false", "no", "off" und "0" als "no" interpretiert werden.
Hier sind die Variablen
Das Git-Repository
Diese Umgebungsvariablen gelten für *alle* Kern-Git-Befehle. Hinweis: Es ist erwähnenswert, dass sie von SCMs oberhalb von Git verwendet/überschrieben werden können, also seien Sie vorsichtig, wenn Sie ein fremdes Frontend verwenden.
GIT_INDEX_FILE-
Diese Umgebungsvariable gibt eine alternative Indexdatei an. Wenn sie nicht angegeben ist, wird der Standard
$GIT_DIR/indexverwendet. GIT_INDEX_VERSION-
Diese Umgebungsvariable gibt an, welche Indexversion beim Schreiben der Indexdatei verwendet wird. Sie hat keine Auswirkungen auf bestehende Indexdateien. Standardmäßig wird Indexdatei-Version 2 oder 3 verwendet. Siehe git-update-index[1] für weitere Informationen.
GIT_OBJECT_DIRECTORY-
Wenn das Objekt-Speicherverzeichnis über diese Umgebungsvariable angegeben wird, werden die sha1-Verzeichnisse darunter erstellt – andernfalls wird das Standardverzeichnis
$GIT_DIR/objectsverwendet. GIT_ALTERNATE_OBJECT_DIRECTORIES-
Aufgrund der unveränderlichen Natur von Git-Objekten können alte Objekte in gemeinsame, schreibgeschützte Verzeichnisse archiviert werden. Diese Variable gibt eine durch ":" getrennte (unter Windows durch ";" getrennte) Liste von Git-Objektverzeichnissen an, die zur Suche nach Git-Objekten verwendet werden können. Neue Objekte werden nicht in diese Verzeichnisse geschrieben.
Einträge, die mit
"(doppeltes Anführungszeichen) beginnen, werden als C-artige Anführungszeichenpfade interpretiert, wobei führende und nachfolgende doppelte Anführungszeichen entfernt und Backslash-Escapes beachtet werden. Z.B. der Wert "path-with-\"-and-:-in-it":vanilla-path hat zwei Pfade:path-with-"-and-:-in-itundvanilla-path. GIT_DIR-
Wenn die Umgebungsvariable
GIT_DIRgesetzt ist, gibt sie einen Pfad an, der anstelle des Standards.gitfür die Basis des Repositorys verwendet wird. Die Kommandozeilenoption--git-dirsetzt diesen Wert ebenfalls. GIT_WORK_TREE-
Setzt den Pfad zum Stammverzeichnis des Arbeitsbaums. Dies kann auch durch die Kommandozeilenoption
--work-treeund die Konfigurationsvariable core.worktree gesteuert werden. GIT_NAMESPACE-
Setzt den Git-Namensraum; siehe gitnamespaces[7] für Details. Die Kommandozeilenoption
--namespacesetzt diesen Wert ebenfalls. GIT_CEILING_DIRECTORIES-
Dies sollte eine durch Doppelpunkte getrennte Liste von absoluten Pfaden sein. Wenn gesetzt, ist dies eine Liste von Verzeichnissen, in die Git nicht wechseln soll, während es nach einem Repository-Verzeichnis sucht (nützlich zum Ausschließen langsam ladender Netzwerkverzeichnisse). Es schließt das aktuelle Arbeitsverzeichnis oder ein über die Befehlszeile oder Umgebung gesetztes GIT_DIR nicht aus. Normalerweise muss Git die Einträge in dieser Liste lesen und alle eventuell vorhandenen Symlinks auflösen, um sie mit dem aktuellen Verzeichnis zu vergleichen. Wenn jedoch selbst dieser Zugriff langsam ist, können Sie einen leeren Eintrag zur Liste hinzufügen, um Git mitzuteilen, dass die nachfolgenden Einträge keine Symlinks sind und nicht aufgelöst werden müssen; z.B.
GIT_CEILING_DIRECTORIES=/maybe/symlink::/very/slow/non/symlink. GIT_DISCOVERY_ACROSS_FILESYSTEM-
Wenn Git in einem Verzeichnis ausgeführt wird, das kein ".git" Repository-Verzeichnis hat, versucht es, ein solches Verzeichnis in den übergeordneten Verzeichnissen zu finden, um die Spitze des Arbeitsbaums zu finden, aber standardmäßig überschreitet es keine Dateisystemgrenzen. Diese boolesche Umgebungsvariable kann auf true gesetzt werden, um Git anzuweisen, nicht an Dateisystemgrenzen zu stoppen. Wie
GIT_CEILING_DIRECTORIESwird dies kein explizites Repository-Verzeichnis beeinflussen, das überGIT_DIRoder auf der Befehlszeile gesetzt wurde. GIT_COMMON_DIR-
Wenn diese Variable auf einen Pfad gesetzt ist, werden Nicht-Arbeitsbaum-Dateien, die normalerweise in $GIT_DIR liegen, stattdessen aus diesem Pfad genommen. Arbeitsbaum-spezifische Dateien wie HEAD oder Index werden aus $GIT_DIR genommen. Siehe gitrepository-layout[5] und git-worktree[1] für Details. Diese Variable hat eine geringere Priorität als andere Pfadvariablen wie GIT_INDEX_FILE, GIT_OBJECT_DIRECTORY...
GIT_DEFAULT_HASH-
Wenn diese Variable gesetzt ist, wird der Standard-Hash-Algorithmus für neue Repositories auf diesen Wert gesetzt. Dieser Wert wird beim Klonen ignoriert und die Einstellung des entfernten Repositorys wird immer verwendet. Der Standard ist "sha1". Siehe
--object-formatin git-init[1]. GIT_DEFAULT_REF_FORMAT-
Wenn diese Variable gesetzt ist, wird das Standard-Referenz-Backend-Format für neue Repositories auf diesen Wert gesetzt. Der Standard ist "files". Siehe
--ref-formatin git-init[1].
Git-Commits
GIT_AUTHOR_NAME-
Der lesbare Name, der in der Autorenidentität bei der Erstellung von Commit- oder Tag-Objekten oder beim Schreiben von Reflogs verwendet wird. Überschreibt die Konfigurationseinstellungen
user.nameundauthor.name. GIT_AUTHOR_EMAIL-
Die E-Mail-Adresse, die in der Autorenidentität bei der Erstellung von Commit- oder Tag-Objekten oder beim Schreiben von Reflogs verwendet wird. Überschreibt die Konfigurationseinstellungen
user.emailundauthor.email. GIT_AUTHOR_DATE-
Das Datum, das für die Autorenidentität bei der Erstellung von Commit- oder Tag-Objekten oder beim Schreiben von Reflogs verwendet wird. Gültige Formate finden Sie in git-commit[1].
GIT_COMMITTER_NAME-
Der lesbare Name, der in der Committer-Identität bei der Erstellung von Commit- oder Tag-Objekten oder beim Schreiben von Reflogs verwendet wird. Überschreibt die Konfigurationseinstellungen
user.nameundcommitter.name. GIT_COMMITTER_EMAIL-
Die E-Mail-Adresse, die in der Autorenidentität bei der Erstellung von Commit- oder Tag-Objekten oder beim Schreiben von Reflogs verwendet wird. Überschreibt die Konfigurationseinstellungen
user.emailundcommitter.email. GIT_COMMITTER_DATE-
Das Datum, das für die Committer-Identität bei der Erstellung von Commit- oder Tag-Objekten oder beim Schreiben von Reflogs verwendet wird. Gültige Formate finden Sie in git-commit[1].
EMAIL-
Die E-Mail-Adresse, die in der Autoren- und Committer-Identität verwendet wird, wenn keine andere relevante Umgebungsvariable oder Konfigurationseinstellung gesetzt wurde.
Git Diffs
GIT_DIFF_OPTS-
Nur gültige Einstellung ist "--unified=??" oder "-u??" um die Anzahl der Kontextzeilen festzulegen, die bei der Erstellung eines Unified Diffs angezeigt werden. Dies hat Vorrang vor jedem "-U" oder "--unified" Optionswert, der auf der Git diff Befehlszeile übergeben wird.
GIT_EXTERNAL_DIFF-
Wenn die Umgebungsvariable
GIT_EXTERNAL_DIFFgesetzt ist, wird das durch sie benannte Programm zum Erzeugen von Diffs aufgerufen, und Git verwendet nicht seine interne Diff-Maschinerie. Für einen hinzugefügten, entfernten oder geänderten Pfad wirdGIT_EXTERNAL_DIFFmit 7 Parametern aufgerufenpath old-file old-hex old-mode new-file new-hex new-mode
wobei
- <old|new>-file
-
Dateien sind, die GIT_EXTERNAL_DIFF zum Lesen des Inhalts von <old|new> verwenden kann,
- <old|new>-hex
-
die 40-stelligen SHA-1-Hashes sind,
- <old|new>-mode
-
die oktale Darstellung der Dateimodi sind.
Die Datei-Parameter können auf die Arbeitsdatei des Benutzers zeigen (z.B.
new-filein "git-diff-files"),/dev/null(z.B.old-file, wenn eine neue Datei hinzugefügt wird) oder eine temporäre Datei (z.B.old-fileim Index).GIT_EXTERNAL_DIFFmuss sich nicht um das Unlinking der temporären Datei kümmern – sie wird entfernt, wennGIT_EXTERNAL_DIFFbeendet wird.Für einen nicht zusammengeführten Pfad wird
GIT_EXTERNAL_DIFFmit 1 Parameter, <path>, aufgerufen.Für jeden Pfad, für den
GIT_EXTERNAL_DIFFaufgerufen wird, werden zwei Umgebungsvariablen gesetzt:GIT_DIFF_PATH_COUNTERundGIT_DIFF_PATH_TOTAL. GIT_EXTERNAL_DIFF_TRUST_EXIT_CODE-
Wenn diese boolesche Umgebungsvariable auf true gesetzt ist, wird erwartet, dass der Befehl
GIT_EXTERNAL_DIFFden Exit-Code 0 zurückgibt, wenn er die Eingabedateien als gleich betrachtet, oder 1, wenn er sie als unterschiedlich betrachtet, ähnlich wiediff(1). Wenn sie auf false gesetzt ist, was der Standard ist, wird erwartet, dass der Befehl unabhängig von der Gleichheit den Exit-Code 0 zurückgibt. Jeder andere Exit-Code führt dazu, dass Git einen fatalen Fehler meldet. GIT_DIFF_PATH_COUNTER-
Ein 1-basierter Zähler, der für jeden Pfad um eins erhöht wird.
GIT_DIFF_PATH_TOTAL-
Die Gesamtzahl der Pfade.
andere
GIT_MERGE_VERBOSITY-
Eine Zahl, die die Menge der von der rekursiven Merge-Strategie angezeigten Ausgaben steuert. Überschreibt merge.verbosity. Siehe git-merge[1]
GIT_PAGER-
Diese Umgebungsvariable überschreibt
$PAGER. Wenn sie auf eine leere Zeichenkette oder den Wert "cat" gesetzt ist, startet Git keinen Pager. Siehe auch die Optioncore.pagerin git-config[1]. GIT_PROGRESS_DELAY-
Eine Zahl, die steuert, wie viele Sekunden gewartet wird, bevor optionale Fortschrittsanzeigen angezeigt werden. Standardwert ist 1.
GIT_EDITOR-
Diese Umgebungsvariable überschreibt
$EDITORund$VISUAL. Sie wird von mehreren Git-Befehlen verwendet, wenn im interaktiven Modus ein Editor gestartet werden soll. Siehe auch git-var[1] und die Optioncore.editorin git-config[1]. GIT_SEQUENCE_EDITOR-
Diese Umgebungsvariable überschreibt den konfigurierten Git-Editor beim Bearbeiten der To-do-Liste eines interaktiven Rebase. Siehe auch git-rebase[1] und die Option
sequence.editorin git-config[1]. GIT_SSHGIT_SSH_COMMAND-
Wenn eine dieser Umgebungsvariablen gesetzt ist, verwenden git fetch und git push den angegebenen Befehl anstelle von ssh, wenn sie sich mit einem entfernten System verbinden müssen. Die an den konfigurierten Befehl übergebenen Kommandozeilenparameter werden durch die SSH-Variante bestimmt. Siehe die Option
ssh.variantin git-config[1] für Details.$GIT_SSH_COMMANDhat Vorrang vor$GIT_SSHund wird von der Shell interpretiert, was die Einbeziehung zusätzlicher Argumente ermöglicht.$GIT_SSHhingegen muss nur der Pfad zu einem Programm sein (der ein Wrapper-Shell-Skript sein kann, wenn zusätzliche Argumente benötigt werden).Normalerweise ist es einfacher, gewünschte Optionen über Ihre persönliche
.ssh/config-Datei zu konfigurieren. Bitte konsultieren Sie Ihre SSH-Dokumentation für weitere Details. GIT_SSH_VARIANT-
Wenn diese Umgebungsvariable gesetzt ist, überschreibt sie die automatische Erkennung von Git, ob
GIT_SSH/GIT_SSH_COMMAND/core.sshCommandauf OpenSSH, plink oder tortoiseplink verweisen. Diese Variable überschreibt die Konfigurationseinstellungssh.variant, die denselben Zweck erfüllt. GIT_SSL_NO_VERIFY-
Das Setzen und Exportieren dieser Umgebungsvariable auf einen beliebigen Wert weist Git an, das SSL-Zertifikat beim Abrufen oder Pushen über HTTPS nicht zu überprüfen.
GIT_ATTR_SOURCE-
Setzt den Treeish, von dem gitattributes gelesen werden sollen.
GIT_ASKPASS-
Wenn diese Umgebungsvariable gesetzt ist, rufen Git-Befehle, die Passwörter oder Passphrasen benötigen (z. B. für HTTP- oder IMAP-Authentifizierung), dieses Programm mit einer geeigneten Aufforderung als Kommandozeilenargument auf und lesen das Passwort von dessen STDOUT. Siehe auch die Option
core.askPassin git-config[1]. GIT_TERMINAL_PROMPT-
Wenn diese boolesche Umgebungsvariable auf false gesetzt ist, fragt Git nicht auf dem Terminal nach (z. B. bei der Aufforderung zur HTTP-Authentifizierung).
GIT_CONFIG_GLOBALGIT_CONFIG_SYSTEM-
Nimmt die Konfiguration aus den angegebenen Dateien anstelle von globalen oder systemweiten Konfigurationsdateien. Wenn
GIT_CONFIG_SYSTEMgesetzt ist, wird die zur Erstellungszeit definierte Systemkonfigurationsdatei (normalerweise/etc/gitconfig) nicht gelesen. Ebenso werden, wennGIT_CONFIG_GLOBALgesetzt ist, weder$HOME/.gitconfignoch$XDG_CONFIG_HOME/git/configgelesen. Kann auf/dev/nullgesetzt werden, um das Lesen von Konfigurationsdateien der jeweiligen Ebene zu überspringen. GIT_CONFIG_NOSYSTEM-
Ob Einstellungen aus der systemweiten Datei
$(prefix)/etc/gitconfigübersprungen werden sollen. Diese boolesche Umgebungsvariable kann zusammen mit$HOMEund$XDG_CONFIG_HOMEverwendet werden, um eine vorhersagbare Umgebung für ein wählerisches Skript zu schaffen, oder Sie können sie auf true setzen, um eine fehlerhafte/etc/gitconfig-Datei vorübergehend zu vermeiden, während Sie auf jemanden mit ausreichenden Berechtigungen warten, um sie zu beheben. GIT_FLUSH-
Wenn diese boolesche Umgebungsvariable auf true gesetzt ist, erzwingen Befehle wie git blame (im inkrementellen Modus), git rev-list, git log, git check-attr und git check-ignore einen Flush des Ausgabestroms, nachdem jeder Datensatz geleert wurde. Wenn diese Variable auf false gesetzt ist, erfolgt die Ausgabe dieser Befehle über vollständig gepufferte I/O. Wenn diese Umgebungsvariable nicht gesetzt ist, wählt Git die gepufferte oder datensatzorientierte Ausgabe basierend darauf, ob stdout an eine Datei umgeleitet zu sein scheint oder nicht.
GIT_TRACE-
Aktiviert allgemeine Trace-Nachrichten, z. B. Alias-Expansion, Ausführung von internen Befehlen und externen Befehlen.
Wenn diese Variable auf "1", "2" oder "true" gesetzt ist (Vergleich ist nicht case-sensitiv), werden Trace-Nachrichten nach stderr gedruckt.
Wenn die Variable auf einen ganzzahligen Wert größer als 2 und kleiner als 10 (strikt) gesetzt ist, interpretiert Git diesen Wert als offenes Dateideskriptor und versucht, die Trace-Nachrichten in diesen Dateideskriptor zu schreiben.
Alternativ, wenn die Variable auf einen absoluten Pfad gesetzt ist (beginnend mit einem /-Zeichen), interpretiert Git dies als Dateipfad und versucht, die Trace-Nachrichten anzuhängen.
Das Entfernen der Variablen oder das Setzen auf leer, "0" oder "false" (nicht case-sensitiv) deaktiviert Trace-Nachrichten.
GIT_TRACE_FSMONITOR-
Aktiviert Trace-Nachrichten für die Dateisystem-Monitor-Erweiterung. Siehe
GIT_TRACEfür verfügbare Trace-Ausgabeoptionen. GIT_TRACE_PACK_ACCESS-
Aktiviert Trace-Nachrichten für alle Zugriffe auf Packs. Für jeden Zugriff werden der Pack-Dateiname und ein Offset im Pack aufgezeichnet. Dies kann bei der Fehlerbehebung bei einigen Pack-bezogenen Leistungsproblemen hilfreich sein. Siehe
GIT_TRACEfür verfügbare Trace-Ausgabeoptionen. GIT_TRACE_PACKET-
Aktiviert Trace-Nachrichten für alle Pakete, die in ein bestimmtes Programm hinein- oder herausgehen. Dies kann bei der Fehlersuche von Objektverhandlungen oder anderen Protokollproblemen helfen. Das Tracing wird bei einem Paket abgeschaltet, das mit "PACK" beginnt (aber siehe
GIT_TRACE_PACKFILEunten). SieheGIT_TRACEfür verfügbare Trace-Ausgabeoptionen. GIT_TRACE_PACKFILE-
Aktiviert das Tracing von Packfiles, die von einem bestimmten Programm gesendet oder empfangen werden. Im Gegensatz zu anderen Trace-Ausgaben ist dieser Trace unverändert: keine Header und keine Anführungszeichen für Binärdaten. Sie möchten ihn fast sicher in eine Datei umleiten (z. B.
GIT_TRACE_PACKFILE=/tmp/my.pack), anstatt ihn auf dem Terminal anzuzeigen oder ihn mit anderen Trace-Ausgaben zu vermischen.Beachten Sie, dass dies derzeit nur für die Client-Seite von Klonen und Abrufen implementiert ist.
GIT_TRACE_PERFORMANCE-
Aktiviert leistungsbezogene Trace-Nachrichten, z. B. die Gesamtausführungszeit jedes Git-Befehls. Siehe
GIT_TRACEfür verfügbare Trace-Ausgabeoptionen. GIT_TRACE_REFS-
Aktiviert Trace-Nachrichten für Operationen auf der Ref-Datenbank. Siehe
GIT_TRACEfür verfügbare Trace-Ausgabeoptionen. GIT_TRACE_SETUP-
Aktiviert Trace-Nachrichten, die .git, den Arbeitsbaum und das aktuelle Arbeitsverzeichnis ausgeben, nachdem Git seine Setup-Phase abgeschlossen hat. Siehe
GIT_TRACEfür verfügbare Trace-Ausgabeoptionen. GIT_TRACE_SHALLOW-
Aktiviert Trace-Nachrichten, die beim Abrufen/Klonen von flachen Repositories zur Fehlerbehebung beitragen können. Siehe
GIT_TRACEfür verfügbare Trace-Ausgabeoptionen. GIT_TRACE_CURL-
Aktiviert einen vollständigen Curl-Trace-Dump aller eingehenden und ausgehenden Daten, einschließlich beschreibender Informationen, des Git-Transportprotokolls. Dies ähnelt der Ausführung von curl
--trace-asciiauf der Kommandozeile. SieheGIT_TRACEfür verfügbare Trace-Ausgabeoptionen. GIT_TRACE_CURL_NO_DATA-
Wenn ein Curl-Trace aktiviert ist (siehe
GIT_TRACE_CURLoben), werden keine Daten ausgegeben (d. h. nur Infozeilen und Header werden ausgegeben). GIT_TRACE2-
Aktiviert detailliertere Trace-Nachrichten aus der "trace2"-Bibliothek. Die Ausgabe von
GIT_TRACE2ist ein einfaches textbasiertes Format für die menschliche Lesbarkeit.Wenn diese Variable auf "1", "2" oder "true" gesetzt ist (Vergleich ist nicht case-sensitiv), werden Trace-Nachrichten nach stderr gedruckt.
Wenn die Variable auf einen ganzzahligen Wert größer als 2 und kleiner als 10 (strikt) gesetzt ist, interpretiert Git diesen Wert als offenes Dateideskriptor und versucht, die Trace-Nachrichten in diesen Dateideskriptor zu schreiben.
Alternativ, wenn die Variable auf einen absoluten Pfad gesetzt ist (beginnend mit einem /-Zeichen), interpretiert Git dies als Dateipfad und versucht, die Trace-Nachrichten anzuhängen. Wenn der Pfad bereits existiert und ein Verzeichnis ist, werden die Trace-Nachrichten in Dateien (eine pro Prozess) in diesem Verzeichnis geschrieben, benannt nach der letzten Komponente der SID und einem optionalen Zähler (um Namenskollisionen zu vermeiden).
Zusätzlich, wenn die Variable auf
af_unix:[<socket-type>:]<absolute-pathname> gesetzt ist, versucht Git, den Pfad als Unix Domain Socket zu öffnen. Der Socket-Typ kann entwederstreamoderdgramsein.Das Entfernen der Variablen oder das Setzen auf leer, "0" oder "false" (nicht case-sensitiv) deaktiviert Trace-Nachrichten.
Siehe Trace2 Dokumentation für vollständige Details.
GIT_TRACE2_EVENT-
Diese Einstellung schreibt ein JSON-basiertes Format, das für maschinelle Interpretation geeignet ist. Siehe
GIT_TRACE2für verfügbare Trace-Ausgabeoptionen und Trace2 Dokumentation für vollständige Details. GIT_TRACE2_PERF-
Zusätzlich zu den textbasierten Nachrichten, die in
GIT_TRACE2verfügbar sind, schreibt diese Einstellung ein spaltenbasiertes Format zum Verständnis von verschachtelten Regionen. SieheGIT_TRACE2für verfügbare Trace-Ausgabeoptionen und Trace2 Dokumentation für vollständige Details. GIT_TRACE_REDACT-
Standardmäßig, wenn das Tracing aktiviert ist, schwärzt Git die Werte von Cookies, dem "Authorization:"-Header, dem "Proxy-Authorization:"-Header und Packfile-URIs. Setzen Sie diese boolesche Umgebungsvariable auf false, um diese Schwärzung zu verhindern.
GIT_NO_REPLACE_OBJECTS-
Das Setzen und Exportieren dieser Umgebungsvariable weist Git an, Ersetzungs-Refs zu ignorieren und keine Git-Objekte zu ersetzen.
GIT_LITERAL_PATHSPECS-
Das Setzen dieser booleschen Umgebungsvariable auf true bewirkt, dass Git alle Pfadangaben buchstäblich behandelt und nicht als Glob-Muster. Zum Beispiel sucht die Ausführung von
GIT_LITERAL_PATHSPECS=1gitlog--*.c'nach Commits, die den Pfad*.cberühren, und nicht nach Pfaden, die der Glob*.cabgleicht. Sie möchten dies vielleicht, wenn Sie buchstäbliche Pfade an Git übergeben (z. B. Pfade, die Ihnen zuvor vongitls-tree,--rawDiff-Ausgabe usw. gegeben wurden). GIT_GLOB_PATHSPECS-
Das Setzen dieser booleschen Umgebungsvariable auf true bewirkt, dass Git alle Pfadangaben als Glob-Muster behandelt (auch bekannt als "glob" Magic).
GIT_NOGLOB_PATHSPECS-
Das Setzen dieser booleschen Umgebungsvariable auf true bewirkt, dass Git alle Pfadangaben als buchstäblich behandelt (auch bekannt als "literal" Magic).
GIT_ICASE_PATHSPECS-
Das Setzen dieser booleschen Umgebungsvariable auf true bewirkt, dass Git alle Pfadangaben als case-insensitiv behandelt.
GIT_NO_LAZY_FETCH-
Das Setzen dieser booleschen Umgebungsvariable auf true weist Git an, fehlende Objekte vom Promisor-Remote bei Bedarf nicht verzögert abzurufen.
GIT_REFLOG_ACTION-
Wenn ein Ref aktualisiert wird, werden Reflog-Einträge erstellt, um den Grund für die Aktualisierung des Refs (typischerweise der Name des High-Level-Befehls, der das Ref aktualisiert hat) zusätzlich zu den alten und neuen Werten des Refs zu verfolgen. Ein skriptbasierter Porcelain-Befehl kann die Hilfsfunktion set_reflog_action in
git-sh-setupverwenden, um seinen Namen dieser Variablen zuzuweisen, wenn er als Top-Level-Befehl vom Endbenutzer aufgerufen wird, um im Body des Reflogs aufgezeichnet zu werden. GIT_REF_PARANOIA-
Wenn diese boolesche Umgebungsvariable auf false gesetzt ist, werden fehlerhafte oder schlecht benannte Refs beim Iterieren über Ref-Listen ignoriert. Normalerweise versucht Git, solche Refs einzubeziehen, was dazu führen kann, dass einige Operationen fehlschlagen. Dies ist normalerweise vorzuziehen, da potenziell destruktive Operationen (z. B. git-prune[1]) besser abbrechen, als fehlerhafte Refs zu ignorieren (und somit die von ihnen referenzierten Verläufe als nicht speicherungswert zu betrachten). Der Standardwert ist
1(d. h. paranoid bei der Erkennung und beim Abbruch aller Operationen). Sie müssen dies normalerweise nicht auf0setzen, aber es kann nützlich sein, wenn Sie versuchen, Daten aus einem beschädigten Repository zu retten. GIT_COMMIT_GRAPH_PARANOIA-
Beim Laden eines Commit-Objekts aus dem Commit-Graphen führt Git eine Existenzprüfung des Objekts in der Objektdatenbank durch. Dies geschieht, um Probleme mit veralteten Commit-Graphen zu vermeiden, die Verweise auf bereits gelöschte Commits enthalten, geht aber mit einem Leistungsabzug einher.
Der Standardwert ist "false", was das oben genannte Verhalten deaktiviert. Das Setzen auf "true" aktiviert die Existenzprüfung, sodass veraltete Commits nie aus dem Commit-Graphen zurückgegeben werden, auf Kosten der Leistung.
GIT_ALLOW_PROTOCOL-
Wenn auf eine durch Doppelpunkte getrennte Liste von Protokollen gesetzt, verhält es sich so, als ob
protocol.allowaufnevergesetzt wäre, und jedes der aufgeführten Protokolle hätteprotocol.<name>.allowaufalwaysgesetzt (wobei jede bestehende Konfiguration überschrieben wird). Siehe die Beschreibung vonprotocol.allowin git-config[1] für weitere Details. GIT_PROTOCOL_FROM_USER-
Setzen Sie diese boolesche Umgebungsvariable auf false, um Protokolle zu verhindern, die von fetch/push/clone verwendet werden und auf den
user-Zustand konfiguriert sind. Dies ist nützlich, um die rekursive Initialisierung von Submodulen aus einem nicht vertrauenswürdigen Repository zu beschränken oder für Programme, die potenziell nicht vertrauenswürdige URLs an Git-Befehle übergeben. Siehe git-config[1] für weitere Details. GIT_PROTOCOL-
Nur für den internen Gebrauch. Wird beim Handshake des Wire-Protokolls verwendet. Enthält eine durch Doppelpunkte getrennte Liste von Schlüsseln mit optionalen Werten <key>[=<value>]. Das Vorhandensein unbekannter Schlüssel und Werte muss ignoriert werden.
Beachten Sie, dass Server möglicherweise konfiguriert werden müssen, um die Weitergabe dieser Variablen über einige Transporte zu erlauben. Sie wird automatisch weitergegeben, wenn auf lokale Repositories zugegriffen wird (d. h.
file://oder ein Dateisystempfad) sowie über dasgit://-Protokoll. Für Git-über-HTTP sollte dies in den meisten Konfigurationen automatisch funktionieren, aber siehe die Diskussion in git-http-backend[1]. Für Git-über-SSH muss der SSH-Server möglicherweise so konfiguriert sein, dass Clients diese Variable übergeben dürfen (z. B. durch Verwendung vonAcceptEnvGIT_PROTOCOLmit OpenSSH).Diese Konfiguration ist optional. Wenn die Variable nicht weitergegeben wird, greifen Clients auf das ursprüngliche "v0"-Protokoll zurück (können aber einige Leistungsverbesserungen oder Funktionen verpassen). Diese Variable betrifft derzeit nur Klone und Abrufe; sie wird noch nicht für Pushes verwendet (könnte aber in Zukunft verwendet werden).
GIT_OPTIONAL_LOCKS-
Wenn diese boolesche Umgebungsvariable auf false gesetzt ist, schließt Git jede angeforderte Operation ab, ohne optionale Unteroperationen durchzuführen, die eine Sperre erfordern. Dies verhindert beispielsweise, dass
gitstatusals Nebeneffekt den Index aktualisiert. Dies ist nützlich für im Hintergrund laufende Prozesse, die keine Sperrkonflikte mit anderen Operationen auf dem Repository verursachen möchten. Standardmäßig ist der Wert1. GIT_REDIRECT_STDINGIT_REDIRECT_STDOUTGIT_REDIRECT_STDERR-
Nur Windows: Ermöglicht die Umleitung der Standard-Input-/Output-/Error-Handles auf Pfade, die durch die Umgebungsvariablen angegeben werden. Dies ist besonders nützlich in Multi-Thread-Anwendungen, bei denen der kanonische Weg, Standard-Handles über
CreateProcess() zu übergeben, keine Option ist, da dies erfordert, dass die Handles als vererbbar markiert werden (und folglich würden **alle** erzeugten Prozesse sie erben, was reguläre Git-Operationen blockieren könnte). Der primäre Verwendungszweck ist die Verwendung von Named Pipes für die Kommunikation (z. B. \\.\pipe\my-git-stdin-123).Zwei spezielle Werte werden unterstützt:
offschließt einfach den entsprechenden Standard-Handle, und wennGIT_REDIRECT_STDERR2>&1 ist, wird Standard-Error auf denselben Handle wie Standard-Output umgeleitet. GIT_PRINT_SHA1_ELLIPSIS(veraltet)-
Wenn auf
yesgesetzt, wird ein Ellipsenzeichen nach einem (abgekürzten) SHA-1-Wert ausgegeben. Dies wirkt sich auf die Anzeige von getrennten HEADs (git-checkout[1]) und die rohe Diff-Ausgabe (git-diff[1]) aus. Das Ausgeben eines Ellipsenzeichens in den genannten Fällen gilt nicht mehr als ausreichend und die Unterstützung dafür wird voraussichtlich in naher Zukunft (zusammen mit der Variable) entfernt. GIT_ADVICE-
Wenn auf
0gesetzt, werden alle Ratschlagsnachrichten deaktiviert. Diese Nachrichten sollen menschlichen Benutzern Hinweise geben, die ihnen helfen können, aus problematischen Situationen herauszukommen oder neue Funktionen zu nutzen. Benutzer können einzelne Nachrichten über die Konfigurationsschlüsseladvice.*deaktivieren. Diese Nachrichten können für Tools, die Git-Prozesse ausführen, störend sein, daher ist diese Variable verfügbar, um die Nachrichten zu deaktivieren. (Die globale Option--no-adviceist ebenfalls verfügbar, aber alte Git-Versionen können fehlschlagen, wenn diese Option nicht verstanden wird. Die Umgebungsvariable wird von Git-Versionen, die sie nicht verstehen, ignoriert.)
Diskussion
Mehr Details zu den folgenden Punkten finden Sie im Kapitel "Git-Konzepte" des Benutzerhandbuchs und im gitcore-tutorial[7].
Ein Git-Projekt besteht normalerweise aus einem Arbeitsverzeichnis mit einem ".git"-Unterverzeichnis auf oberster Ebene. Das .git-Verzeichnis enthält unter anderem eine komprimierte Objektdatenbank, die die vollständige Historie des Projekts darstellt, eine "Index"-Datei, die diese Historie mit dem aktuellen Inhalt des Arbeitsbaums verknüpft, und benannte Zeiger auf diese Historie wie Tags und Branch-Heads.
Die Objektdatenbank enthält Objekte von drei Haupttypen: Blobs, die Dateidaten enthalten; Trees, die auf Blobs und andere Trees verweisen, um Verzeichnishierarchien aufzubauen; und Commits, die jeweils auf einen einzelnen Tree und eine Anzahl von Eltern-Commits verweisen.
Der Commit, äquivalent zu dem, was andere Systeme "Changeset" oder "Version" nennen, repräsentiert einen Schritt in der Projektgeschichte, und jeder Elternteil repräsentiert einen unmittelbar vorausgehenden Schritt. Commits mit mehr als einem Elternteil repräsentieren Merges von unabhängigen Entwicklungslinien.
Alle Objekte werden nach dem SHA-1-Hash ihres Inhalts benannt, normalerweise als Zeichenkette von 40 Hexadezimalziffern geschrieben. Solche Namen sind global eindeutig. Die gesamte Historie bis zu einem Commit kann durch die Signatur nur dieses Commits verbürgt werden. Ein vierter Objekttyp, der Tag, ist für diesen Zweck vorgesehen.
Bei der ersten Erstellung werden Objekte in einzelnen Dateien gespeichert, können aber später aus Effizienzgründen zu "Pack-Dateien" komprimiert werden.
Benannte Zeiger namens Refs markieren interessante Punkte in der Historie. Ein Ref kann den SHA-1-Namen eines Objekts oder den Namen eines anderen Refs enthalten (letzteres wird als "symbolischer Ref" bezeichnet). Refs mit Namen, die mit refs/head/ beginnen, enthalten den SHA-1-Namen des letzten Commits (oder "Head") eines sich entwickelnden Branches. SHA-1-Namen von Tags von Interesse werden unter refs/tags/ gespeichert. Ein symbolischer Ref namens HEAD enthält den Namen des aktuell ausgecheckten Branches.
Die Indexdatei wird mit einer Liste aller Pfade und für jeden Pfad mit einem Blob-Objekt und einer Reihe von Attributen initialisiert. Das Blob-Objekt repräsentiert den Inhalt der Datei zum Zeitpunkt des Heads des aktuellen Branches. Die Attribute (letzte Änderungszeit, Größe usw.) werden aus der entsprechenden Datei im Arbeitsbaum übernommen. Nachfolgende Änderungen am Arbeitsbaum können durch den Vergleich dieser Attribute gefunden werden. Der Index kann mit neuem Inhalt aktualisiert werden, und neue Commits können aus dem im Index gespeicherten Inhalt erstellt werden.
Der Index ist auch in der Lage, mehrere Einträge (sogenannte "Stages") für einen gegebenen Pfadnamen zu speichern. Diese Stages werden verwendet, um die verschiedenen nicht zusammengeführten Versionen einer Datei zu halten, wenn ein Merge im Gange ist.
SICHERHEIT
Einige Konfigurationsoptionen und Hook-Dateien können dazu führen, dass Git beliebige Shell-Befehle ausführt. Da Konfiguration und Hooks nicht mit git clone kopiert werden, ist es im Allgemeinen sicher, entfernte Repositories mit nicht vertrauenswürdigem Inhalt zu klonen, sie mit git log zu inspizieren und so weiter.
Es ist jedoch nicht sicher, Git-Befehle in einem .git-Verzeichnis (oder dem Arbeitsbaum, der es umgibt) auszuführen, wenn dieses .git-Verzeichnis selbst aus einer nicht vertrauenswürdigen Quelle stammt. Die Befehle in seiner Konfiguration und seinen Hooks werden wie üblich ausgeführt.
Standardmäßig weigert sich Git auszuführen, wenn das Repository jemand anderem als dem Benutzer gehört, der den Befehl ausführt. Siehe den Eintrag für safe.directory in git-config[1]. Obwohl dies Ihnen in einer Multi-User-Umgebung helfen kann, beachten Sie, dass Sie auch nicht vertrauenswürdige Repositories erwerben können, die Ihnen gehören (z. B. wenn Sie eine Zip-Datei oder ein Tarball aus einer nicht vertrauenswürdigen Quelle extrahieren). In solchen Fällen müssten Sie das nicht vertrauenswürdige Repository zuerst "sanitisieren".
Wenn Sie ein nicht vertrauenswürdiges .git-Verzeichnis haben, sollten Sie es zuerst mit git clone --no-local klonen, um eine saubere Kopie zu erhalten. Git schränkt zwar die Menge der Optionen und Hooks ein, die von upload-pack ausgeführt werden, was die Serverseite eines Klons oder Abrufs behandelt, aber bedenken Sie, dass die Angriffsfläche für upload-pack groß ist, daher birgt dies ein gewisses Risiko. Am sichersten ist es, das Repository als privilegierter Benutzer bereitzustellen (entweder über git-daemon[1], ssh oder unter Verwendung anderer Tools zum Ändern von Benutzer-IDs). Siehe die Diskussion im Abschnitt SECURITY von git-upload-pack[1].
WEITERE DOKUMENTATION
Siehe die Referenzen im Abschnitt "Beschreibung", um mit der Verwendung von Git zu beginnen. Das Folgende ist wahrscheinlich mehr Detail als für einen Anfänger notwendig.
Das Kapitel "Git-Konzepte" des Benutzerhandbuchs und gitcore-tutorial[7] bieten beide Einführungen in die zugrunde liegende Git-Architektur.
Siehe gitworkflows[7] für einen Überblick über empfohlene Workflows.
Siehe auch die howto-Dokumente für einige nützliche Beispiele.
Die Interna sind in der Git API-Dokumentation dokumentiert.
Benutzer, die von CVS migrieren, sollten auch gitcvs-migration[7] lesen.
Autoren
Git wurde von Linus Torvalds gestartet und wird derzeit von Junio C Hamano gepflegt. Zahlreiche Beiträge kamen von der Git-Mailingliste <git@vger.kernel.org>. https://openhub.net/p/git/contributors/summary bietet Ihnen eine vollständigere Liste der Mitwirkenden.
Wenn Sie einen Klon von git.git selbst haben, können die Ausgaben von git-shortlog[1] und git-blame[1] Ihnen die Autoren für bestimmte Teile des Projekts anzeigen.
Fehlerberichterstattung
Melden Sie Fehler an die Git-Mailingliste <git@vger.kernel.org>, wo die Entwicklung und Wartung hauptsächlich stattfindet. Sie müssen nicht auf der Liste abonniert sein, um eine Nachricht dorthin zu senden. Sehen Sie sich das Listenarchiv unter https://lore.kernel.org/git für frühere Fehlerberichte und andere Diskussionen an.
Sicherheitsrelevante Probleme sollten vertraulich an die Git-Sicherheits-Mailingliste <git-security@googlegroups.com> gemeldet werden.
GIT
Teil der git[1] Suite