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.50.1 → 2.51.2 keine Änderungen
-
2.50.0
2025-06-16
- 2.37.1 → 2.49.1 keine Änderungen
-
2.37.0
2022-06-27
- 2.35.1 → 2.36.6 keine Änderungen
-
2.35.0
2022-01-24
- 2.32.1 → 2.34.8 keine Änderungen
-
2.32.0
2021-06-06
- 2.30.2 → 2.31.8 keine Änderungen
-
2.30.1
2021-02-08
-
2.30.0
2020-12-27
- 2.27.1 → 2.29.3 keine Änderungen
-
2.27.0
2020-06-01
- 2.21.1 → 2.26.3 keine Änderungen
-
2.21.0
2019-02-24
- 2.20.1 → 2.20.5 keine Änderungen
-
2.20.0
2018-12-09
- 2.19.1 → 2.19.6 keine Änderungen
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 keine Änderungen
-
2.18.0
2018-06-21
- 2.17.0 → 2.17.6 keine Änderungen
-
2.16.6
2019-12-06
- 2.13.7 → 2.15.4 keine Änderungen
-
2.12.5
2017-09-22
- 2.10.5 → 2.11.4 keine Änderungen
-
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.1.4 → 2.3.10 keine Änderungen
-
2.0.5
2014-12-17
SYNOPSIS
git p4 clone [<sync-options>] [<clone-options>] <p4-depot-path>… git p4 sync [<sync-options>] [<p4-depot-path>…] git p4 rebase git p4 submit [<submit-options>] [<master-branch-name>]
BESCHREIBUNG
Dieser Befehl bietet eine Möglichkeit, mit p4 Repositories mithilfe von Git zu interagieren.
Erstellen Sie ein neues Git-Repository aus einem bestehenden p4-Repository mit git p4 clone und geben Sie ihm einen oder mehrere p4 Depot-Pfade. Integrieren Sie neue Commits aus p4-Änderungen mit git p4 sync. Der Befehl sync wird auch verwendet, um neue Branches aus anderen p4 Depot-Pfaden einzubeziehen. Reichen Sie Git-Änderungen mit git p4 submit zurück an p4. Der Befehl git p4 rebase führt einen Sync durch und rebasen den aktuellen Branch auf den aktualisierten p4 Remote-Branch.
BEISPIELE
-
Ein Repository klonen
$ git p4 clone //depot/path/project
-
Einige Arbeiten im neu erstellten Git-Repository durchführen
$ cd project $ vi foo.h $ git commit -a -m "edited foo.h"
-
Das Git-Repository mit den neuesten Änderungen von p4 aktualisieren und die eigene Arbeit darauf aufbauen
$ git p4 rebase
-
Die eigenen Commits zurück an p4 übermitteln
$ git p4 submit
BEFEHLE
Klonen
Im Allgemeinen wird git p4 clone verwendet, um ein neues Git-Verzeichnis aus einem bestehenden p4-Repository zu erstellen
$ git p4 clone //depot/path/project
Dies
-
Erstellt ein leeres Git-Repository in einem Unterverzeichnis namens project.
-
Importiert den vollständigen Inhalt der Kopf-Revision aus dem angegebenen p4 Depot-Pfad in einen einzelnen Commit im Git-Branch refs/remotes/p4/master.
-
Erstellt einen lokalen Branch, master, aus diesem Remote und checkt ihn aus.
Um die gesamte p4-Historie in Git zu reproduzieren, verwenden Sie den Modifikator @all auf dem Depot-Pfad
$ git p4 clone //depot/path/project@all
Synchronisieren
Während die Entwicklung im p4-Repository fortschreitet, können diese Änderungen mit dem folgenden Befehl in das Git-Repository übernommen werden
$ git p4 sync
Dieser Befehl findet neue Änderungen in p4 und importiert sie als Git-Commits.
P4-Repositories können auch mit git p4 sync zu einem bestehenden Git-Repository hinzugefügt werden
$ mkdir repo-git $ cd repo-git $ git init $ git p4 sync //path/in/your/perforce/depot
Dies importiert das angegebene Depot in refs/remotes/p4/master in einem bestehenden Git-Repository. Die Option --branch kann verwendet werden, um einen anderen Branch für den p4-Inhalt anzugeben.
Wenn ein Git-Repository die Branches refs/remotes/origin/p4 enthält, werden diese während eines git p4 sync zuerst abgerufen und berücksichtigt. Da der direkte Import aus p4 erheblich langsamer ist als das Abrufen von Änderungen von einem Git-Remote, kann dies in einer Multi-Entwickler-Umgebung nützlich sein.
Wenn mehrere Branches vorhanden sind, verwendet git p4 sync automatisch den Algorithmus "BRANCH DETECTION", um neue Änderungen den richtigen Branches zuzuordnen. Dies kann mit der Option --branch überschrieben werden, um nur einen einzelnen Branch zu aktualisieren.
Rebasen
Ein gängiges Arbeitsmuster ist das Abrufen der neuesten Änderungen aus dem p4-Depot und deren Zusammenführung mit lokalen, nicht committeten Änderungen. Da das p4-Repository oft der letztendliche Speicherort für den gesamten Code ist, ist ein Rebase-Workflow sinnvoll. Dieser Befehl führt git p4 sync gefolgt von git rebase aus, um lokale Commits auf die aktualisierten p4-Änderungen zu verschieben.
$ git p4 rebase
Einreichen
Das Einreichen von Änderungen von einem Git-Repository zurück in das p4-Repository erfordert einen separaten p4-Client-Workspace. Dieser sollte entweder über die Umgebungsvariable P4CLIENT oder die Git-Konfigurationsvariable git-p4.client angegeben werden. Der p4-Client muss existieren, aber das Client-Root wird erstellt und gefüllt, falls es noch nicht existiert.
Um alle Änderungen einzureichen, die im aktuellen Git-Branch vorhanden, aber nicht im p4/master Branch sind, verwenden Sie
$ git p4 submit
Um einen anderen Branch als den aktuellen anzugeben, verwenden Sie
$ git p4 submit topicbranch
Um einen einzelnen Commit oder einen Bereich von Commits anzugeben, verwenden Sie
$ git p4 submit --commit <sha1> $ git p4 submit --commit <sha1..sha1>
Der Upstream-Referenz ist im Allgemeinen refs/remotes/p4/master, kann aber mit der Befehlszeilenoption --origin= überschrieben werden.
Die p4-Änderungen werden als der Benutzer erstellt, der git p4 submit aufruft. Die Option --preserve-user bewirkt, dass die Eigentümerschaft entsprechend dem Autor des Git-Commits geändert wird. Diese Option erfordert Administratorrechte in p4, die mit p4 protect gewährt werden können.
Um Änderungen stattdessen zu "shelven" (zwischenspeichern), verwenden Sie --shelve und --update-shelve
$ git p4 submit --shelve $ git p4 submit --update-shelve 1234 --update-shelve 2345
Ent-shelven
Das Ent-shelven nimmt eine gespeicherte P4-Changeliste und erzeugt den entsprechenden Git-Commit im Branch refs/remotes/p4-unshelved/<changelist>.
Der Git-Commit wird relativ zur aktuellen Origin-Revision (standardmäßig HEAD) erstellt. Ein Eltern-Commit wird basierend auf der Origin erstellt, und dann wird der Un-shelve-Commit basierend darauf erstellt.
Die Origin-Revision kann mit der Option "--origin" geändert werden.
Wenn der Ziel-Branch in refs/remotes/p4-unshelved bereits existiert, wird der alte umbenannt.
$ git p4 sync $ git p4 unshelve 12345 $ git show p4-unshelved/12345 <submit more changes via p4 to the same files> $ git p4 unshelve 12345 <refuses to unshelve until git is in sync with p4 again>
OPTIONEN
Allgemeine Optionen
Alle Befehle außer clone akzeptieren diese Optionen.
- --git-dir <dir>
-
Setzt die Umgebungsvariable
GIT_DIR. Siehe git[1]. - -v
- --verbose
-
Gibt mehr Fortschrittsinformationen aus.
Sync-Optionen
Diese Optionen können sowohl für den anfänglichen clone als auch für nachfolgende sync Operationen verwendet werden.
- --branch <ref>
-
Importiert Änderungen in <ref> anstelle von refs/remotes/p4/master. Wenn <ref> mit refs/ beginnt, wird es so verwendet, wie es ist. Andernfalls, wenn es nicht mit p4/ beginnt, wird dieser Präfix hinzugefügt.
Standardmäßig wird ein <ref>, das nicht mit refs/ beginnt, als Name eines Remote-Tracking-Branches (unter refs/remotes/) behandelt. Dieses Verhalten kann mit der Option --import-local geändert werden.
Der Standard-<ref> ist "master".
Dieses Beispiel importiert einen neuen Remote "p4/proj2" in ein bestehendes Git-Repository
$ git init $ git p4 sync --branch=refs/remotes/p4/proj2 //depot/proj2 - --detect-branches
-
Verwendet den Branch-Erkennungsalgorithmus, um neue Pfade in p4 zu finden. Er wird unten unter "BRANCH DETECTION" dokumentiert.
- --changesfile <file>
-
Importiert exakt die p4 Change-Nummern, die in file aufgelistet sind, eine pro Zeile. Normalerweise inspiziert git p4 den aktuellen p4 Repository-Status und erkennt die Änderungen, die es importieren sollte.
- --silent
-
Gibt keine Fortschrittsinformationen aus.
- --detect-labels
-
Fragt p4 nach Labels ab, die mit den Depot-Pfaden assoziiert sind, und fügt sie als Tags in Git hinzu. Begrenzte Nützlichkeit, da nur Labels importiert werden, die mit neuen Changelisten assoziiert sind. Veraltet.
- --import-labels
-
Importiert Labels von p4 nach Git.
- --import-local
-
Standardmäßig werden p4-Branches in refs/remotes/p4/ gespeichert, wo sie von git-branch[1] und anderen Befehlen als Remote-Tracking-Branches behandelt werden. Diese Option platziert p4-Branches stattdessen in refs/heads/p4/. Beachten Sie, dass zukünftige Sync-Operationen ebenfalls
--import-localangeben müssen, damit sie die p4-Branches in refs/heads finden können. - --max-changes <n>
-
Importiert maximal n Änderungen anstelle des gesamten Bereichs von Änderungen, der im angegebenen Revisionsspezifizierer enthalten ist. Eine typische Verwendung wäre die Verwendung von @all als Revisionsspezifizierer, aber dann die Verwendung von --max-changes 1000, um nur die letzten 1000 Revisionen anstelle der gesamten Revisionshistorie zu importieren.
- --changes-block-size <n>
-
Die interne Blockgröße, die beim Konvertieren eines Revisionsspezifizierers wie @all in eine Liste spezifischer Change-Nummern verwendet wird. Anstatt eines einzigen Aufrufs von p4 changes zu verwenden, um die vollständige Liste der Änderungen für die Konvertierung zu ermitteln, gibt es eine Sequenz von Aufrufen von p4 changes -m, die jeweils einen Block von Änderungen der angegebenen Größe anfordern. Die Standardblockgröße beträgt 500, was normalerweise ausreichend sein sollte.
- --keep-path
-
Die Zuordnung von Dateinamen vom p4 Depot-Pfad zu Git beinhaltet standardmäßig das Entfernen des gesamten Depot-Pfads. Mit dieser Option bleibt der vollständige p4 Depot-Pfad in Git erhalten. Beispielsweise wird der Pfad //depot/main/foo/bar.c, wenn er von //depot/main/ importiert wird, zu foo/bar.c. Mit
--keep-pathist der Git-Pfad stattdessen depot/main/foo/bar.c. - --use-client-spec
-
Verwendet eine Client-Spezifikation, um die Liste der interessanten Dateien in p4 zu ermitteln. Siehe den Abschnitt "CLIENT SPEC" unten.
- -/ <path>
-
Schließt ausgewählte Depot-Pfade beim Klonen oder Synchronisieren aus.
Clone-Optionen
Diese Optionen können bei einem anfänglichen clone zusammen mit den oben beschriebenen sync Optionen verwendet werden.
- --destination <directory>
-
Wo das Git-Repository erstellt werden soll. Wenn nicht angegeben, wird die letzte Komponente des p4 Depot-Pfads verwendet, um ein neues Verzeichnis zu erstellen.
- --bare
-
Führt einen Bare-Clone durch. Siehe git-clone[1].
Submit-Optionen
Diese Optionen können verwendet werden, um das Verhalten von git p4 submit zu modifizieren.
- --origin <commit>
-
Upstream-Speicherort, von dem Commits identifiziert werden, die an p4 übermittelt werden. Standardmäßig ist dies der neueste p4 Commit, der von
HEADerreichbar ist. - -M
-
Benennungen erkennen. Siehe git-diff[1]. Benennungen werden in p4 durch explizite move Operationen dargestellt. Es gibt keine entsprechende Option, um Kopien zu erkennen, aber es gibt Variablen für sowohl Moves als auch Copies.
- --preserve-user
-
P4-Änderungen neu authorn, bevor sie an p4 übermittelt werden. Diese Option erfordert P4-Admin-Privilegien.
- --export-labels
-
Exportiert Tags von Git als p4 Labels. Tags, die in Git gefunden werden, werden auf das Perforce-Arbeitsverzeichnis angewendet.
- -n
- --dry-run
-
Zeigt nur an, welche Commits an p4 übermittelt würden; ändert den Zustand in Git oder p4 nicht.
- --prepare-p4-only
-
Wendet einen Commit auf den p4-Workspace an, öffnet, fügt hinzu und löscht Dateien in p4 wie bei einer normalen Submit-Operation. Führt nicht das abschließende "p4 submit" aus, sondern gibt eine Meldung aus, wie manuell eingereicht oder rückgängig gemacht werden kann. Diese Option stoppt immer nach dem ersten (ältesten) Commit. Git-Tags werden nicht an p4 exportiert.
- --shelve
-
Anstatt einzureichen, werden eine Reihe von gespeicherten Changelists erstellt. Nach dem Erstellen jedes Shelves werden die relevanten Dateien rückgängig gemacht/gelöscht. Wenn Sie mehrere Commits ausstehend haben, werden mehrere Shelves erstellt.
- --update-shelve CHANGELIST
-
Aktualisiert eine bestehende gespeicherte Changelist mit diesem Commit. Impliziert --shelve. Wiederholen Sie dies für mehrere gespeicherte Changelists.
- --conflict=(ask|skip|quit)
-
Konflikte können beim Anwenden eines Commits auf p4 auftreten. Wenn dies geschieht, ist das Standardverhalten ("ask") die Aufforderung, ob dieser Commit übersprungen und fortgefahren werden soll, oder ob abgebrochen werden soll. Diese Option kann verwendet werden, um die Eingabeaufforderung zu umgehen, sodass konfligierende Commits automatisch übersprungen werden, oder um den Versuch, Commits anzuwenden, ohne Aufforderung abzubrechen.
- --branch <branch>
-
Nach dem Einreichen werden diese benannte Branch anstelle von p4/master synchronisiert. Siehe den Abschnitt "Sync-Optionen" oben für weitere Informationen.
- --commit (<sha1>|<sha1>..<sha1>)
-
Reichen Sie nur den angegebenen Commit oder Bereich von Commits ein, anstatt die vollständige Liste der Änderungen im aktuellen Git-Branch.
- --disable-rebase
-
Deaktiviert das automatische Rebase, nachdem alle Commits erfolgreich übermittelt wurden. Kann auch mit git-p4.disableRebase gesetzt werden.
- --disable-p4sync
-
Deaktiviert das automatische Synchronisieren von p4/master von Perforce nach der Übermittlung von Commits. Impliziert --disable-rebase. Sync mit origin/master wird weiterhin durchgeführt, wenn möglich. Kann auch mit git-p4.disableP4Sync gesetzt werden.
Hooks für Submit
p4-pre-submit
Der Hook p4-pre-submit wird ausgeführt, wenn er existiert und ausführbar ist. Der Hook nimmt keine Parameter und nichts von der Standardeingabe entgegen. Das Verlassen mit einem Nicht-Null-Status aus diesem Skript verhindert, dass git-p4 submit gestartet wird. Er kann mit der Befehlszeilenoption --no-verify umgangen werden.
Ein Anwendungsszenario ist das Ausführen von Unit-Tests im Hook.
p4-prepare-changelist
Der Hook p4-prepare-changelist wird unmittelbar nach der Vorbereitung der Standard-Changelist-Nachricht und vor dem Starten des Editors ausgeführt. Er nimmt einen Parameter entgegen, den Namen der Datei, die den Changelist-Text enthält. Das Verlassen mit einem Nicht-Null-Status aus dem Skript bricht den Prozess ab.
Der Zweck des Hooks ist das Bearbeiten der Nachrichtendatei vor Ort, und er wird nicht durch die Option --no-verify unterdrückt. Dieser Hook wird auch aufgerufen, wenn --prepare-p4-only gesetzt ist.
p4-changelist
Der Hook p4-changelist wird ausgeführt, nachdem die Changelist-Nachricht vom Benutzer bearbeitet wurde. Er kann mit der Option --no-verify umgangen werden. Er nimmt einen einzelnen Parameter entgegen, den Namen der Datei, die den vorgeschlagenen Changelist-Text enthält. Das Verlassen mit einem Nicht-Null-Status führt zum Abbruch des Befehls.
Der Hook darf die Changelist-Datei bearbeiten und kann verwendet werden, um den Text in ein Standardformat des Projekts zu normalisieren. Er kann auch verwendet werden, um den Submit nach der Inspektion der Nachrichtendatei abzulehnen.
p4-post-changelist
Der Hook p4-post-changelist wird aufgerufen, nachdem der Submit erfolgreich in P4 stattgefunden hat. Er nimmt keine Parameter entgegen und dient hauptsächlich der Benachrichtigung und kann das Ergebnis der git p4 submit Aktion nicht beeinflussen.
DEPOT PFAD SYNTAX
Das p4 Depot-Pfad-Argument für git p4 sync und git p4 clone kann ein oder mehrere durch Leerzeichen getrennte p4 Depot-Pfade sein, mit einem optionalen p4 Revisionsspezifizierer am Ende
- "//depot/my/project"
-
Importiert einen Commit mit allen Dateien im #head Change unter diesem Baum.
- "//depot/my/project@all"
-
Importiert einen Commit für jede Änderung in der Historie dieses Depot-Pfads.
- "//depot/my/project@1,6"
-
Importiert nur die Änderungen 1 bis 6.
- "//depot/proj1@all //depot/proj2@all"
-
Importiert alle Änderungen von beiden genannten Depot-Pfaden in ein einziges Repository. Nur Dateien unter diesen Verzeichnissen sind enthalten. Es gibt kein Unterverzeichnis in Git für jedes "proj1" und "proj2". Sie müssen die Option
--destinationverwenden, wenn mehr als ein Depot-Pfad angegeben wird. Der Revisionsspezifizierer muss für jeden Depot-Pfad identisch angegeben werden. Wenn Dateien in den Depot-Pfaden mit demselben Namen vorhanden sind, wird die Datei mit der aktuellsten Version in Git angezeigt.
Siehe p4 help revisions für die vollständige Syntax von p4 Revisionsspezifizierern.
CLIENT SPEZIFIKATION
Die p4 Client-Spezifikation wird mit dem Befehl p4 client verwaltet und enthält unter anderem eine View, die angibt, wie das Depot in das Client-Repository abgebildet wird. Die Befehle clone und sync können die Client-Spezifikation konsultieren, wenn die Option --use-client-spec angegeben wird oder wenn die Variable useClientSpec true ist. Nach git p4 clone wird die Variable useClientSpec automatisch in der Repository-Konfigurationsdatei gesetzt. Dies ermöglicht es zukünftigen git p4 submit Befehlen, ordnungsgemäß zu funktionieren; der Submit-Befehl sucht nur nach der Variable und hat keine Befehlszeilenoption.
Die vollständige Syntax einer p4 View ist in p4 help views dokumentiert. git p4 kennt nur eine Teilmenge der View-Syntax. Es versteht mehrzeilige Mappings, Overlays mit +, Ausschlüsse mit - und doppelte Anführungszeichen um Leerzeichen. Von den möglichen Wildcards behandelt git p4 nur … und nur, wenn es am Ende des Pfades steht. git p4 wird eine Fehlermeldung ausgeben, wenn es auf einen nicht unterstützten Wildcard stößt.
Es gibt Fehler in der Implementierung von überlappenden Mappings. Wenn mehrere Depot-Pfade über Overlays auf denselben Speicherort im Repository abgebildet werden, kann git p4 den falschen auswählen. Dies ist schwer zu lösen, ohne eine Client-Spezifikation nur für git p4 zu verwenden.
Der Name des Clients kann dem git p4 auf verschiedene Weise übergeben werden. Die Variable git-p4.client hat Vorrang, wenn sie existiert. Andernfalls werden normale p4-Mechanismen zur Bestimmung des Clients verwendet: Umgebungsvariable P4CLIENT, eine von P4CONFIG referenzierte Datei oder der lokale Hostname.
BRANCH ERKENNUNG
P4 hat nicht dasselbe Konzept eines Branches wie Git. Stattdessen organisiert p4 seinen Inhalt als Verzeichnisbaum, in dem nach Konvention unterschiedliche logische Branches an verschiedenen Stellen im Baum liegen. Der Befehl p4 branch wird verwendet, um Mappings zwischen verschiedenen Bereichen im Baum zu verwalten und verwandte Inhalte anzuzeigen. git p4 kann diese Mappings verwenden, um Branch-Beziehungen zu bestimmen.
Wenn Sie ein Repository haben, in dem alle interessanten Branches als Unterverzeichnisse eines einzigen Depot-Pfads existieren, können Sie --detect-branches beim Klonen oder Synchronisieren verwenden, damit git p4 automatisch Unterverzeichnisse in p4 findet und diese als Branches in Git generiert.
Wenn beispielsweise die P4-Repository-Struktur wie folgt aussieht
//depot/main/... //depot/branch1/...
Und "p4 branch -o branch1" eine View-Zeile anzeigt, die so aussieht
//depot/main/... //depot/branch1/...
Dann dieser git p4 clone Befehl
git p4 clone --detect-branches //depot@all
erzeugt einen separaten Branch in refs/remotes/p4/ für //depot/main, namens master, und einen für //depot/branch1, namens depot/branch1.
Es ist jedoch nicht notwendig, Branches in p4 zu erstellen, um sie wie Branches verwenden zu können. Da es schwierig ist, Branch-Beziehungen automatisch abzuleiten, kann eine Git-Konfigurationseinstellung git-p4.branchList verwendet werden, um explizit Branch-Beziehungen zu identifizieren. Es handelt sich um eine Liste von "Source:Destination"-Paaren, ähnlich einer einfachen p4 Branch-Spezifikation, bei der "Source" und "Destination" die Pfadkomponenten im p4-Repository sind. Das obige Beispiel beruhte auf der Existenz des p4 Branches. Ohne p4 Branches wird dasselbe Ergebnis erzielt mit
git init depot cd depot git config git-p4.branchList main:branch1 git p4 clone --detect-branches //depot@all .
PERFORMANCE
Der von git p4 verwendete Fast-Import-Mechanismus erstellt für jede Ausführung von git p4 sync eine Pack-Datei. Normalerweise komprimiert Git's Garbage Collection (git-gc[1]) diese automatisch zu weniger Pack-Dateien, aber eine explizite Ausführung von git repack -adf kann die Leistung verbessern.
KONFIGURATION VARIABLEN
Die folgenden Konfigurationseinstellungen können verwendet werden, um das Verhalten von git p4 zu modifizieren. Sie alle befinden sich im Abschnitt git-p4.
Allgemeine Variablen
- git-p4.user
-
Benutzer, der als Option für alle p4-Befehle mit -u <user> angegeben wird. Die Umgebungsvariable
P4USERkann stattdessen verwendet werden. - git-p4.password
-
Passwort, das als Option für alle p4-Befehle mit -P <password> angegeben wird. Die Umgebungsvariable
P4PASSkann stattdessen verwendet werden. - git-p4.port
-
Port, der als Option für alle p4-Befehle mit -p <port> angegeben wird. Die Umgebungsvariable
P4PORTkann stattdessen verwendet werden. - git-p4.host
-
Host, der als Option für alle p4-Befehle mit -h <host> angegeben wird. Die Umgebungsvariable
P4HOSTkann stattdessen verwendet werden. - git-p4.client
-
Client, der als Option für alle p4-Befehle mit -c <client> angegeben wird, einschließlich der Client-Spezifikation.
- git-p4.retries
-
Gibt an, wie oft ein p4-Befehl (insbesondere p4 sync) wiederholt werden soll, wenn das Netzwerk ausfällt. Der Standardwert ist 3. Setzen Sie den Wert auf 0, um Wiederholungen zu deaktivieren oder wenn Ihre p4-Version keine Wiederholungen unterstützt (vor 2012.2).
Clone- und Sync-Variablen
- git-p4.syncFromOrigin
-
Da das Importieren von Commits aus anderen Git-Repositories viel schneller ist als das Importieren aus p4, gibt es einen Mechanismus, um p4-Änderungen zuerst in Git-Remotes zu finden. Wenn Branches unter refs/remote/origin/p4 existieren, werden diese abgerufen und beim Synchronisieren mit p4 verwendet. Diese Variable kann auf false gesetzt werden, um dieses Verhalten zu deaktivieren.
- git-p4.branchUser
-
Eine Phase der Branch-Erkennung beinhaltet die Untersuchung von p4-Branches, um neue zu importierende zu finden. Standardmäßig werden alle Branches inspiziert. Diese Option beschränkt die Suche auf die Branches, die dem in der Variable angegebenen einzelnen Benutzer gehören.
- git-p4.branchList
-
Liste der Branches, die bei aktivierter Branch-Erkennung importiert werden sollen. Jeder Eintrag sollte ein Paar von Branch-Namen sein, die durch einen Doppelpunkt (:) getrennt sind. Dieses Beispiel deklariert, dass sowohl branchA als auch branchB von main erstellt wurden.
git config git-p4.branchList main:branchA git config --add git-p4.branchList main:branchB
- git-p4.ignoredP4Labels
-
Liste der zu ignorierenden p4 Labels. Dies wird automatisch aufgebaut, wenn nicht importierbare Labels entdeckt werden.
- git-p4.importLabels
-
Importiert p4 Labels nach git, gemäß --import-labels.
- git-p4.labelImportRegexp
-
Nur p4 Labels, die diesem regulären Ausdruck entsprechen, werden importiert. Der Standardwert ist [a-zA-Z0-9_\-.]+$.
- git-p4.useClientSpec
-
Gibt an, dass die p4 Client-Spezifikation verwendet werden soll, um die interessanten p4 Depot-Pfade zu identifizieren. Dies ist äquivalent zur Angabe der Option
--use-client-spec. Siehe den Abschnitt "CLIENT SPEC" oben. Diese Variable ist ein boolescher Wert, nicht der Name eines p4 Clients. - git-p4.pathEncoding
-
Perforce speichert die Kodierung eines Pfades, wie sie vom ursprünglichen Betriebssystem stammt. Git erwartet Pfade, die als UTF-8 kodiert sind. Verwenden Sie diese Konfiguration, um git-p4 mitzuteilen, welche Kodierung Perforce für die Pfade verwendet hat. Diese Kodierung wird verwendet, um die Pfade in UTF-8 zu transkodieren. Zum Beispiel verwendet Perforce unter Windows oft "cp1252", um Pfadnamen zu kodieren. Wenn diese Option in eine p4 clone-Anfrage übergeben wird, wird sie im resultierenden neuen git-Repository gespeichert.
- git-p4.metadataDecodingStrategy
-
Perforce behält die Kodierung von Changelist-Beschreibungen und vollständigen Benutzernamen bei, wie sie vom Client auf einem bestimmten Betriebssystem gespeichert wurden. Der p4v-Client verwendet die lokal auf dem Betriebssystem kodierte Zeichen. Daher können verschiedene Benutzer unterschiedliche Changelist-Beschreibungen oder vollständige Benutzernamen in unterschiedlichen Kodierungen im selben Depot speichern. Git toleriert inkonsistente/fehlerhafte Kodierungen in Commit-Nachrichten und Autorennamen, erwartet jedoch, dass sie in UTF-8 angegeben sind. git-p4 kann drei verschiedene Dekodierungsstrategien verwenden, um die Unsicherheit der Kodierung in Perforce zu handhaben: passthrough gibt einfach die ursprünglichen Bytes von Perforce an Git weiter, wodurch brauchbare, aber falsch kodierte Daten entstehen, wenn die Perforce-Daten anders als UTF-8 kodiert sind. strict erwartet, dass die Perforce-Daten als UTF-8 kodiert sind, und schlägt fehl, wenn dies nicht der Fall ist. fallback versucht, die Daten als UTF-8 zu interpretieren, und greift andernfalls auf eine sekundäre Kodierung zurück – standardmäßig die gängige Windows-Kodierung cp-1252 – wobei Zeichen im oberen Bereich maskiert werden, wenn die Dekodierung mit der Fallback-Kodierung ebenfalls fehlschlägt. Unter Python 2 ist die Standardstrategie aus historischen Gründen passthrough, und unter Python 3 ist die Standardstrategie fallback. Wenn strict ausgewählt ist und die Dekodierung fehlschlägt, schlägt die Fehlermeldung vor, diesen Konfigurationsparameter als Workaround zu ändern. Wenn diese Option in eine p4 clone-Anfrage übergeben wird, wird sie im resultierenden neuen git-Repository gespeichert.
- git-p4.metadataFallbackEncoding
-
Gibt die Fallback-Kodierung an, die beim Dekodieren von Perforce-Autorennamen und Changelist-Beschreibungen mit der Strategie fallback verwendet wird (siehe git-p4.metadataDecodingStrategy). Die Fallback-Kodierung wird nur verwendet, wenn die Dekodierung als UTF-8 fehlschlägt. Diese Option ist standardmäßig auf cp1252 eingestellt, eine gängige Windows-Kodierung. Wenn diese Option in eine p4 clone-Anfrage übergeben wird, wird sie im resultierenden neuen git-Repository gespeichert.
- git-p4.largeFileSystem
-
Gibt das System an, das für große (binäre) Dateien verwendet wird. Bitte beachten Sie, dass große Dateisysteme den Befehl git p4 submit nicht unterstützen. Derzeit ist nur Git LFS implementiert (siehe https://git-lfs.github.com/ für weitere Informationen). Laden Sie die Git LFS Kommandozeilen-Erweiterung herunter und installieren Sie sie, um diese Option zu verwenden, und konfigurieren Sie sie wie folgt
git config git-p4.largeFileSystem GitLFS
- git-p4.largeFileExtensions
-
Alle Dateien, die mit einer Dateiendung in der Liste übereinstimmen, werden vom großen Dateisystem verarbeitet. Fügen Sie den Erweiterungen kein "." voran.
- git-p4.largeFileThreshold
-
Alle Dateien mit einer unkomprimierten Größe, die den Schwellenwert überschreitet, werden vom großen Dateisystem verarbeitet. Standardmäßig ist der Schwellenwert in Bytes definiert. Fügen Sie die Suffixe k, m oder g hinzu, um die Einheit zu ändern.
- git-p4.largeFileCompressedThreshold
-
Alle Dateien mit einer komprimierten Größe, die den Schwellenwert überschreitet, werden vom großen Dateisystem verarbeitet. Diese Option kann Ihren Clone/Sync-Prozess verlangsamen. Standardmäßig ist der Schwellenwert in Bytes definiert. Fügen Sie die Suffixe k, m oder g hinzu, um die Einheit zu ändern.
- git-p4.largeFilePush
-
Boolesche Variable, die definiert, ob große Dateien automatisch auf einen Server gepusht werden.
- git-p4.keepEmptyCommits
-
Eine Changelist, die nur ausgeschlossene Dateien enthält, wird als leerer Commit importiert, wenn diese boolesche Option auf true gesetzt ist.
- git-p4.mapUser
-
Ordnet einen P4-Benutzer einem Namen und einer E-Mail-Adresse in Git zu. Verwenden Sie eine Zeichenkette mit dem folgenden Format, um ein Mapping zu erstellen
git config --add git-p4.mapUser "p4user = First Last <mail@address.com>"
Ein Mapping überschreibt alle Benutzerinformationen von P4. Mappings für mehrere P4-Benutzer können definiert werden.
Submit-Variablen
- git-p4.detectRenames
-
Benennungen erkennen. Siehe git-diff[1]. Dies kann true, false oder ein Score sein, wie von git diff -M erwartet.
- git-p4.detectCopies
-
Kopien erkennen. Siehe git-diff[1]. Dies kann true, false oder ein Score sein, wie von git diff -C erwartet.
- git-p4.detectCopiesHarder
-
Kopien schwieriger erkennen. Siehe git-diff[1]. Ein boolescher Wert.
- git-p4.preserveUser
-
Beim Submit die Änderungen neu authorn, um den Git-Autor widerzuspiegeln, unabhängig davon, wer git p4 submit aufruft.
- git-p4.allowMissingP4Users
-
Wenn preserveUser true ist, stirbt git p4 normalerweise, wenn es einen Autor in der p4 Benutzerzuordnung nicht finden kann. Diese Einstellung reicht die Änderung trotzdem ein.
- git-p4.skipSubmitEdit
-
Der Submit-Prozess ruft den Editor auf, bevor jede p4-Änderung übermittelt wird. Wenn diese Einstellung true ist, wird der Bearbeitungsschritt jedoch übersprungen.
- git-p4.skipSubmitEditCheck
-
Nach der Bearbeitung der p4-Änderungsnachricht stellt git p4 sicher, dass die Beschreibung tatsächlich geändert wurde, indem es die Datei-Änderungszeit prüft. Diese Option deaktiviert diesen Test.
- git-p4.allowSubmit
-
Standardmäßig kann jeder Branch als Quelle für eine git p4 submit Operation verwendet werden. Diese Konfigurationsvariable, falls gesetzt, erlaubt nur die Benennung der angegebenen Branches als Submit-Quellen. Branch-Namen müssen die Kurznamen sein (kein "refs/heads/"), und sollten durch Kommas (",") getrennt werden, ohne Leerzeichen.
- git-p4.skipUserNameCheck
-
Wenn der Benutzer, der git p4 submit ausführt, nicht in der p4 Benutzerzuordnung vorhanden ist, beendet sich git p4. Diese Option kann verwendet werden, um die Einreichung unabhängig davon zu erzwingen.
- git-p4.attemptRCSCleanup
-
Wenn aktiviert, versucht git p4 submit, RCS-Schlüsselwörter ($Header$, etc.) zu bereinigen. Diese würden andernfalls Merge-Konflikte verursachen und den Submit verhindern. Diese Option sollte derzeit als experimentell betrachtet werden.
- git-p4.exportLabels
-
Exportiert Git-Tags nach p4 Labels, wie bei --export-labels.
- git-p4.labelExportRegexp
-
Nur p4 Labels, die diesem regulären Ausdruck entsprechen, werden exportiert. Der Standardwert ist [a-zA-Z0-9_\-.]+$.
- git-p4.conflict
-
Gibt das Submit-Verhalten an, wenn ein Konflikt mit p4 gefunden wird, wie bei --conflict. Das Standardverhalten ist ask.
- git-p4.disableRebase
-
Der Baum wird nach einem Submit nicht gegen p4/master gerebased.
- git-p4.disableP4Sync
-
Nach einem Submit wird p4/master nicht mit Perforce synchronisiert. Impliziert git-p4.disableRebase.
IMPLEMENTIERUNGSDETAILS
-
Changesets von p4 werden mithilfe von Git fast-import importiert.
-
Das Klonen oder Synchronisieren erfordert keinen p4-Client. Dateiinhalte werden mithilfe von p4 print gesammelt.
-
Das Einreichen erfordert einen p4-Client, der sich nicht am selben Ort wie das Git-Repository befindet. Patches werden nacheinander auf diesen p4-Client angewendet und von dort eingereicht.
-
Jeder von git p4 importierte Commit hat am Ende der Commit-Nachricht eine Zeile, die den p4-Depotort und die Änderungsnummer angibt. Diese Zeile wird von späteren git p4 sync-Operationen verwendet, um zu wissen, welche p4-Änderungen neu sind.
GIT
Teil der git[1] Suite