Aller au contenu

Référence CLI

Pitmaster inclut une CLI qui reprend un sous-ensemble des commandes git. Elle opère sur le dépôt du répertoire de travail actuel.

Shell
./vendor/bin/pitmaster <command> [args...]

Dans une installation Composer, le script est ./vendor/bin/pitmaster ; depuis 0.2.11, il trouve l’autoloader du projet à cet emplacement. Dans une copie du dépôt Pitmaster lui-même, exécutez ./bin/pitmaster après composer install. Les exemples ci-dessous utilisent pitmaster pour les deux chemins. Sans argument, le script affiche la liste des commandes.

Les révisions sont résolues comme dans Repository::resolve() : HEAD, noms de branches et d’étiquettes, noms de références complets, hachages complets et expressions ~N / ^N. Les hachages abrégés ne sont pas acceptés. Le clonage, la récupération et l’envoi sont disponibles uniquement via le PHP API.

Commandes

log

Affiche l’historique des commits, du plus récent au plus ancien.

Shell
# Default: last 10 commits
pitmaster log

# Limit the number of commits
pitmaster log 25
pitmaster log -n 3
pitmaster log -n3
pitmaster log --max-count 3
pitmaster log --max-count=3
pitmaster log -3

# Commits that touch one file
pitmaster log src/Repository.php
pitmaster log -- src/Repository.php

# Commits reachable from all refs, and one line per commit
pitmaster log --all
pitmaster log --oneline

Les syntaxes de limite git (-n N, -nN, --max-count N, --max-count=N, -N) ont été ajoutées dans 0.2.11. Un nombre seul est le raccourci propre à Pitmaster pour la limite. Le premier autre argument est un filtre de chemin ; tout ce qui suit -- est traité comme le chemin. Tout autre argument commençant par - affiche fatal: unrecognized argument: <arg> et se termine avec 128.

La sortie inclut commit <hash> (jaune), une ligne Merge: pour les commits de fusion, Author: avec l’identité brute (nom, e-mail, horodatage et fuseau horaire), ainsi que le message du commit avec indentation. --oneline affiche abc1234 Subject. Le filtre de chemin correspond à un chemin de fichier exact et examine uniquement les cinq fois la limite de commits les plus récents (#7).

show

Affiche les détails du commit et le diff par rapport au premier parent.

Shell
# Show HEAD
pitmaster show

# Show a specific commit
pitmaster show HEAD~3
pitmaster show v1.0.0
pitmaster show 3f2c1e0b9d6a4f8e7c5b2a1d0e9f8c7b6a5d4e3f

Affiche les métadonnées du commit (avec une ligne Date:), suivies d’un diff unifié. Pour une étiquette annotée, l’en-tête et le message de l’étiquette apparaissent en premier. Les couleurs sont utilisées uniquement lorsque stdout est un terminal. Les commits de fusion sont affichés sans diff.

cat-file

Affiche le contenu brut d’un objet git.

Shell
pitmaster cat-file a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2

Prend un hachage complet. Affiche le contenu stocké de l’objet : les blobs, commits et étiquettes sous forme de texte, les arbres sous leur forme binaire. Contrairement à git cat-file -p, les arbres ne sont pas mis en forme.

status

Affiche l’état de l’arbre de travail.

Shell
pitmaster status
pitmaster status --porcelain=v2

Sortie :

Code
On branch main

Changes to be committed:
	new file:   src/Feature.php

Changes not staged for commit:
	modified:   src/Existing.php

Untracked files:
	notes.txt

Les fichiers indexés sont affichés en vert ; les fichiers modifiés, non fusionnés et non suivis, en rouge. Une section Unmerged paths: apparaît lors d’une fusion en conflit. Un HEAD détaché affiche HEAD detached, et un arbre propre affiche nothing to commit, working tree clean. --porcelain=v2 affiche la sortie de Repository::statusPorcelainV2().

diff

Affiche les modifications entre l’index et l’arbre de travail (modifications non indexées).

Shell
# Unstaged changes
pitmaster diff

# Staged changes (index vs HEAD)
pitmaster diff --cached
pitmaster diff --staged

# Choose the algorithm
pitmaster diff --patience
pitmaster diff --histogram
pitmaster diff --minimal

La sortie est un diff unifié en couleur, même lorsque stdout n’est pas un terminal. Pour les fichiers texte modifiés, elle correspond à git diff ; les fichiers nouveaux, supprimés, binaires, renommés ou dont le mode a changé sont formatés différemment (voir Diff). diff --cached n’affiche rien avant le premier commit (#5).

add

Indexe les fichiers pour le prochain commit.

Shell
pitmaster add src/Feature.php
pitmaster add src/Feature.php tests/FeatureTest.php README.md

Chaque fichier est lu depuis l’arbre de travail, écrit en tant qu’objet blob, puis l’index est mis à jour. Les arguments sont des chemins de fichiers ; les répertoires et . ne sont pas développés.

commit

Crée un commit à partir des fichiers indexés.

Shell
pitmaster commit -m "Add new feature"

Sortie :

Code
[main abc1234] Add new feature

-m est obligatoire, sauf lors de la finalisation d’une fusion, d’un cherry-pick, d’une annulation ou d’un rebase interrompu, auquel cas le message préparé est utilisé. L’auteur et le committer sont déterminés à partir des variables d’environnement, des constantes et de .git/config, comme décrit dans Bien démarrer.

branch

Liste les branches ou en crée une nouvelle.

Shell
# List all branches (current marked with *)
pitmaster branch

# Create a new branch from HEAD
pitmaster branch feature/new-thing

# Delete a branch
pitmaster branch -d feature/old
pitmaster branch -D feature/old

Sortie de la liste :

Code
  bugfix/typo
  feature/login
* main

La création affiche Created branch <name>, la suppression affiche Deleted branch <name>. -d et -D ont le même comportement : aucune des deux ne vérifie si la branche est fusionnée, et toutes deux refusent de supprimer la branche actuellement extraite.

tag

Liste les étiquettes ou en crée une nouvelle.

Shell
# List all tags
pitmaster tag

# Create a lightweight tag at HEAD
pitmaster tag v1.0.0

# Create an annotated tag at HEAD
pitmaster tag v2.0.0 -m "Release version 2.0.0"

La création affiche Created tag <name>.

checkout

Change de branche ou détache HEAD.

Shell
# Switch to a branch
pitmaster checkout feature/login

# Detach HEAD at a tag or commit
pitmaster checkout v1.0.0
pitmaster checkout HEAD~2

Met à jour HEAD, l’index et l’arbre de travail pour correspondre à la cible, puis affiche Switched to '<target>'. L’opération est refusée si des modifications locales ou des fichiers non suivis se trouvent dans des chemins qui diffèrent entre les deux arbres. Les modifications non validées apportées à d’autres fichiers suivis sont écrasées par le contenu de la cible, contrairement au comportement de Git (#2) ; validez-les ou mettez-les de côté au préalable.

merge

Fusionne une ou plusieurs branches dans le HEAD actuel, ou poursuit/annule une fusion en conflit en cours.

Shell
# Start a merge
pitmaster merge feature/login

# Merge with a strategy
pitmaster merge -s ours feature/login

# Octopus merge of several branches
pitmaster merge feature/a feature/b

# Continue after resolving conflicts
pitmaster add a.txt
pitmaster merge --continue

# Abort and restore the pre-merge state
pitmaster merge --abort

Sortie en cas de réussite :

Code
Merge successful.

Sortie en cas de conflit (sur stderr, code de sortie 1) :

Code
CONFLICT in: src/File.php, src/Other.php

-s accepte ours, ort et recursive ; ort et recursive utilisent tous deux la fusion par défaut. Avec -s, le CLI affiche Merge successful. et se termine avec le code 0 même si la fusion s’est interrompue en raison de conflits (#21) : vérifiez donc status ensuite. merge --continue sans fusion en cours se termine avec le code 128. La fusion d’une branche déjà fusionnée crée un autre commit de fusion (#6), et les modifications non validées des fichiers suivis sont écrasées, comme avec checkout.

cherry-pick

Applique un commit par-dessus le HEAD actuel, ou poursuit/annule un conflit en cours.

Shell
# Start a cherry-pick
pitmaster cherry-pick feature~1

# Continue after resolving conflicts
pitmaster add a.txt
pitmaster cherry-pick --continue

# Abort and restore HEAD
pitmaster cherry-pick --abort

N’affiche rien en cas de réussite. --continue et --abort sans cherry-pick en cours se terminent avec le code 128.

revert

Crée un commit d’annulation, ou poursuit/annule un conflit en cours.

Shell
# Start a revert
pitmaster revert HEAD~1

# Continue after resolving conflicts
pitmaster add a.txt
pitmaster revert --continue

# Abort and restore HEAD
pitmaster revert --abort

N’affiche rien en cas de réussite. --continue et --abort sans annulation en cours se terminent avec le code 128.

rebase

Rebase la branche actuelle sur une autre référence.

Shell
# Start a rebase
pitmaster rebase main

# Continue after resolving conflicts
pitmaster rebase --continue

# Skip the current commit
pitmaster rebase --skip

# Abort and restore the original branch tip
pitmaster rebase --abort

N’affiche rien en cas de réussite. Sans rebase en cours, --continue, --skip et --abort affichent fatal: no rebase in progress et se terminent avec le code 128.

bisect

Trouve par dichotomie le commit qui a introduit une modification.

Shell
# Start with a bad and a good revision; checks out and prints the first candidate
pitmaster bisect start HEAD v1.0.0

# Mark the checked-out candidate (or a given revision)
pitmaster bisect good
pitmaster bisect bad
pitmaster bisect bad HEAD~3

# End the session and return to the starting branch
pitmaster bisect reset

start, good et bad affichent le hachage complet du prochain candidat, qui est extrait. Lorsqu’il ne reste qu’un seul élément suspect, le même hachage s’affiche de nouveau : ce commit est le premier commit défectueux. Contrairement à git, aucun récapitulatif « premier commit défectueux » n’est affiché.

stash

Enregistre et restaure les modifications du répertoire de travail.

Shell
# Save current changes (push)
pitmaster stash
pitmaster stash push
pitmaster stash push "Work in progress on login"
pitmaster stash save "Work in progress on login"

# Apply and remove the top stash entry
pitmaster stash pop

# Apply without removing
pitmaster stash apply

# List stash entries
pitmaster stash list

# Drop the top stash entry
pitmaster stash drop

Le message est l’argument après push ou save ; -m n’est pas pris en charge et serait enregistré comme message. pop, apply et drop utilisent toujours stash@{0}. Ils affichent Saved working directory to stash abc1234, Applied and dropped stash, Applied stash et Dropped stash.

Sortie de la liste des réserves :

Code
stash@{0}: On main: Work in progress on login
stash@{1}: WIP on main: abc1234 Add new feature

S’il y a plusieurs entrées, drop et pop laissent actuellement l’entrée dans la liste (#10), et apply écrase les modifications non validées des fichiers que la réserve ne touche pas (#11).

blame

Affiche l’attribution de chaque ligne d’un fichier dans HEAD.

Shell
pitmaster blame src/Repository.php

Sortie :

Code
a1b2c3d4 (Jane Smith <jane@example.com> ) <?php
a1b2c3d4 (Jane Smith <jane@example.com> )
f5e6d7c8 (Ann Lee <ann@example.com> 1700) declare(strict_types=1);

Chaque ligne affiche les 8 premiers caractères du hachage du commit et les 30 premiers caractères de l’identité de l’auteur (Name <email> timestamp timezone), sans remplissage.

grep

Recherche le contenu des fichiers dans l’arbre de HEAD actuel.

Shell
pitmaster grep "function merge"
pitmaster grep -i -E "h.llo"

Sortie :

Code
src/Repository.php:2257:    public function merge(string $branch, string $strategy = 'recursive'): MergeResult
src/Merge/ThreeWayMerge.php:23:    public static function merge(

Les options doivent précéder le motif :

  • -i, --ignore-case : recherche sans tenir compte de la casse
  • -E, --extended-regexp, --regex : traite le motif comme une expression régulière PCRE

La sortie est en texte brut path:line:content, sans couleurs.

reflog

Affiche les entrées du reflog, de la plus récente à la plus ancienne.

Shell
# HEAD reflog (default: 10 entries)
pitmaster reflog

# Another ref, a custom limit, and a format
pitmaster reflog show refs/heads/main
pitmaster reflog -n 5
pitmaster reflog --format="%h %gs"

Le format par défaut est %gd: %gs (HEAD@{0}: commit: Add feature). Variables prises en charge : %gd et %gD (sélecteur), %gs (message), %H et %h (nouveau hachage complet et abrégé). Les limites acceptent -n N, -nN et --max-count N ; -n 0 affiche toutes les entrées.

Les dépôts créés par pitmaster init n’enregistrent pas de reflogs, sauf si core.logallrefupdates est défini sur true dans .git/config (#8) ; reflog n’affiche donc rien dans ces dépôts tant que ce n’est pas le cas.

refs

Liste toutes les références avec leurs hachages.

Shell
pitmaster refs

Sortie :

Code
abc123def456... refs/heads/main
789012abc345... refs/heads/feature/login
def456789012... refs/tags/v1.0.0

Les hachages sont affichés en entier.

reset

Réinitialise HEAD à un commit spécifique.

Shell
# Mixed reset (HEAD + index, default)
pitmaster reset HEAD~1
pitmaster reset --mixed HEAD~1

# Soft reset (HEAD only)
pitmaster reset --soft HEAD~1

# Hard reset (HEAD + index + worktree)
pitmaster reset --hard HEAD~3

Une révision est obligatoire. Sortie :

Code
HEAD is now at abc1234

init

Initialise un nouveau dépôt. C’est la seule commande qui ne nécessite pas de dépôt existant.

Shell
# Initialize in the current directory
pitmaster init

# Initialize at a specific path
pitmaster init /path/to/new-project

# Create a SHA-256 repository
pitmaster init --object-format=sha256
pitmaster init /path/to/new-project --object-format=sha256

Sortie :

Code
Initialized empty Pitmaster repository in /path/to/new-project/.git/

--object-format accepte sha1 (par défaut) et sha256.

Codes de sortie

Code Signification
0 Réussite
1 Erreur de commande : erreur d’utilisation, commande inconnue, opération échouée (error: <message>) ou fusion interrompue à cause de conflits
128 Le dépôt n’est pas git (fatal: <message>), argument log non reconnu, ou --continue / --abort / --skip sans opération en cours