Git
Rudel verwendet PHP-native Git-Operationen über Pitmaster. Die Host-git-Binärdatei ist nicht erforderlich. Remotes werden über HTTP(S) oder SSH erreicht.
Jede Sandbox hat einen Branch-Namen, rudel/{sandbox-id}, der für alle nachfolgend beschriebenen Git-Abläufe verwendet wird.
Ein Remote-Repository in eine neue Sandbox klonen
wp rudel create --name=feature-x --git=https://example.test/my-theme.git
Rudel erstellt die Sandbox, klont das Remote-Repository nach themes/my-theme im Sandbox-Verzeichnis (das Verzeichnis heißt wie das Repository), erstellt den Branch rudel/{id} ausgehend vom Standard-Branch und checkt ihn aus. Mit --type=plugin kommt der Checkout stattdessen nach plugins/my-theme. Remote, Verzeichnis und Basis-Branch werden für spätere Pushes in der Sandbox gespeichert. Schlägt der Klon fehl, bleibt die Sandbox bestehen und der Befehl gibt eine Warnung aus.
Der Checkout ist eine Arbeitskopie für wp rudel push. In der aktuellen Version stellt die Sandbox sie nicht bereit (Issue #11):
- Die Sandbox verwendet das mit
--themeausgewählte Theme oder das aktive Theme des Hosts, das beim Erstellen der Sandbox vom Host kopiert wird.--thememuss ein auf dem Host installiertes Theme angeben. Ein Checkout wird daher nur verwendet, wenn der Repository-Name mit diesem Slug übereinstimmt und der Klon anschließend in das kopierte Theme-Verzeichnis schreibt. - Plugins werden immer aus dem Plugin-Verzeichnis des Hosts geladen. Ein Checkout von
--type=pluginwird daher nie ausgeführt.
Verknüpfte Worktrees
Wenn du eine Sandbox klonst, deren Theme-Verzeichnis ein Git-Repository ist, erstellt Rudel für die neue Sandbox einen verknüpften Worktree, anstatt Dateien zu kopieren:
wp rudel create --name=feature-y --clone-from=feature-x-3be7
Der Worktree befindet sich auf dem Branch rudel/{new-id}. Rudel speichert ihn in den Metadaten der neuen Sandbox unter einem expliziten Worktree-Namen, der auf Sandbox-ID, Inhaltstyp und Theme-Slug basiert. So kommen sich zwei Sandboxes mit demselben Theme-Slug nicht in die Quere. Beim Löschen der Sandbox wird der Worktree entfernt und sein Branch gelöscht.
wp rudel cleanup --merged berücksichtigt nur diese verknüpften Worktrees. Siehe Bereinigung.
Änderungen pushen
wp rudel push feature-x-3be7 --message="Update checkout template"
push committet jede Änderung im Checkout und pusht den Branch rudel/{id} zu origin. Wenn es keine Änderungen gibt, gibt der Befehl No changes to push. zurück.
--git=<remote>legt das Remote fest, wenn keines gespeichert ist; nach dem ersten erfolgreichen Push wird es gespeichert.--dir=<dir>wählt das Verzeichnis relativ zum Sandbox-Verzeichnis aus, zum Beispielthemes/my-theme. Standardmäßig wird das von--gitgespeicherte Verzeichnis verwendet, andernfalls das gesamte Sandbox-Verzeichnis.--messageist standardmäßigUpdate from Rudel sandbox.
Von PHP aus führt Rudel::push( $id, $remote_url, $message, $subdir ) dasselbe aus und löst die Hooks rudel_*_environment_push aus.
Commit-Identität
Wenn im Git-Config des Checkouts weder user.name noch user.email festgelegt ist, schreibt Rudel Rudel und rudel@localhost. Lege RUDEL_GIT_AUTHOR_NAME und RUDEL_GIT_AUTHOR_EMAIL in wp-config.php fest, um andere Werte zu verwenden.