Ga naar de inhoud

Referentie voor CLI

Pitmaster bevat een CLI die een subset van git-opdrachten nabootst. Deze werkt op de repository in de huidige werkmap.

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

Bij een installatie via Composer is het script ./vendor/bin/pitmaster; sinds 0.2.11 vindt het daar de autoloader van het project. Voer in een checkout van de repository Pitmaster zelf ./bin/pitmaster uit na composer install. In de onderstaande voorbeelden wordt pitmaster gebruikt voor beide paden. Als u het zonder argumenten uitvoert, wordt de opdrachtenlijst weergegeven.

Revisies worden opgelost zoals Repository::resolve(): HEAD, branchnamen en tagnamen, volledige ref-namen, volledige hashes en expressies ~N / ^N. Afgekorte hashes worden niet geaccepteerd. Clone, fetch en push zijn alleen beschikbaar via de PHP API.

Opdrachten

log

Toon de commitgeschiedenis, nieuwste eerst.

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

De git-limietnotaties (-n N, -nN, --max-count N, --max-count=N, -N) zijn toegevoegd in 0.2.11. Een los getal is de eigen verkorte notatie van Pitmaster voor de limiet. Het eerste andere argument is een padfilter; alles na -- wordt als pad behandeld. Elk ander argument dat begint met - geeft fatal: unrecognized argument: <arg> weer en sluit af met 128.

De uitvoer bevat commit <hash> (geel), een Merge:-regel voor merge-commits, Author: met de onbewerkte identiteit (naam, e-mailadres, tijdstempel en tijdzone) en het ingesprongen commitbericht. --oneline geeft abc1234 Subject weer. Het padfilter komt overeen met één exact bestandspad en onderzoekt alleen de nieuwste vijf keer de limiet aan commits (#7).

show

Toon commitdetails en het verschil met de eerste ouder.

Shell
# Show HEAD
pitmaster show

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

Toont de commitmetadata (met een Date:-regel), gevolgd door een unified diff. Bij een geannoteerde tag verschijnen eerst de tagkop en het bericht. Kleuren worden alleen gebruikt wanneer stdout een terminal is. Merge-commits worden zonder diff getoond.

cat-file

Druk de onbewerkte inhoud van een git-object af.

Shell
pitmaster cat-file a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2

Accepteert een volledige hash. Drukt de opgeslagen inhoud van het object af: blobs, commits en tags als tekst, bomen in hun binaire vorm. In tegenstelling tot git cat-file -p worden bomen niet fraai opgemaakt.

status

Toon de status van de werkboom.

Shell
pitmaster status
pitmaster status --porcelain=v2

Uitvoer:

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

Gestagede bestanden worden groen weergegeven; niet-gestagede, niet-samengevoegde en niet-getraceerde bestanden rood. Tijdens een merge met conflicten verschijnt een sectie Unmerged paths:. Een losgekoppelde HEAD geeft HEAD detached weer en een schone boom nothing to commit, working tree clean. --porcelain=v2 geeft de uitvoer van Repository::statusPorcelainV2() weer.

diff

Toon wijzigingen tussen de index en de werkboom (niet-gestagede wijzigingen).

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

De uitvoer is een gekleurde unified diff, ook wanneer stdout geen terminal is. Voor gewijzigde tekstbestanden komt deze overeen met git diff; nieuwe, verwijderde, binaire, hernoemde en bestanden met een gewijzigde modus worden anders opgemaakt (zie Diff). diff --cached geeft niets weer vóór de eerste commit (#5).

add

Stage bestanden voor de volgende commit.

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

Elk bestand wordt uit de werkboom gelezen, als blobobject weggeschreven en aan de index toegevoegd. Argumenten zijn bestandspaden; mappen en . worden niet uitgebreid.

commit

Maak een commit van de gestagede bestanden.

Shell
pitmaster commit -m "Add new feature"

Uitvoer:

Code
[main abc1234] Add new feature

-m is vereist, behalve bij het voltooien van een gestopte merge, cherry-pick, revert of rebase; dan wordt het voorbereide bericht gebruikt. De auteur en committer worden bepaald aan de hand van omgevingsvariabelen, constanten en .git/config, zoals beschreven in Aan de slag.

branch

Toon branches of maak een nieuwe branch.

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

Uitvoer bij het weergeven:

Code
  bugfix/typo
  feature/login
* main

Bij het aanmaken wordt Created branch <name> weergegeven, bij het verwijderen Deleted branch <name>. -d en -D werken hetzelfde: geen van beide controleert of de branch is samengevoegd, en beide weigeren de uitgecheckte branch te verwijderen.

tag

Toon tags of maak een nieuwe tag.

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"

Bij het aanmaken wordt Created tag <name> weergegeven.

checkout

Wissel van branch of koppel HEAD los.

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

Werkt HEAD, de index en de werkboom bij zodat deze overeenkomen met het doel, en geeft Switched to '<target>' weer. Weigert wanneer lokale wijzigingen of niet-getraceerde bestanden voorkomen op paden die tussen de twee bomen verschillen. Niet-vastgelegde wijzigingen in andere getraceerde bestanden worden overschreven door de inhoud van het doel, waar git ze zou behouden (#2); leg ze eerst vast of stash ze.

merge

Voeg een of meer branches samen met de huidige HEAD, of ga door met een lopende merge met conflicten of breek deze af.

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

Uitvoer bij succes:

Code
Merge successful.

Uitvoer bij conflict (op stderr, afsluitcode 1):

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

-s accepteert ours, ort en recursive; ort en recursive gebruiken beide de standaardmerge. Met -s geeft de CLI Merge successful. weer en wordt afgesloten met 0, zelfs wanneer de merge door conflicten is gestopt (#21), dus controleer daarna status. merge --continue zonder lopende merge wordt afgesloten met 128. Een branch samenvoegen die al is samengevoegd, maakt nog een merge-commit aan (#6), en niet-vastgelegde wijzigingen in getraceerde bestanden worden overschreven zoals bij checkout.

cherry-pick

Pas een commit toe boven op de huidige HEAD, of ga door met een lopend conflict of breek dit af.

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

Geeft niets weer bij succes. --continue en --abort zonder lopende cherry-pick worden afgesloten met 128.

revert

Maak een revert-commit of ga door met een lopend conflict of breek dit af.

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

Geeft niets weer bij succes. --continue en --abort zonder lopende revert worden afgesloten met 128.

rebase

Rebase de huidige branch op een andere ref.

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

Geeft niets weer bij succes. --continue, --skip en --abort geven zonder lopende rebase fatal: no rebase in progress weer en worden afgesloten met 128.

bisect

Zoek met een binaire zoekactie naar de commit die een wijziging heeft geïntroduceerd.

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 en bad geven de volledige hash van de volgende kandidaat weer, die wordt uitgecheckt. Als er nog maar één verdachte over is, wordt dezelfde hash opnieuw weergegeven: die commit is de eerste slechte commit. In tegenstelling tot git wordt er geen samenvatting met "is de eerste slechte commit" weergegeven.

stash

Bewaar en herstel wijzigingen in de werkmap.

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

Het bericht is het argument na push of save; -m wordt niet ondersteund en zou als bericht worden opgeslagen. pop, apply en drop gebruiken altijd stash@{0}. Ze geven Saved working directory to stash abc1234, Applied and dropped stash, Applied stash en Dropped stash weer.

Uitvoer van de stash-lijst:

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

Bij meer dan één item laten drop en pop het item momenteel in de lijst staan (#10), en apply overschrijft niet-vastgelegde wijzigingen in bestanden die de stash niet raakt (#11).

blame

Toon per regel wie een bestand op HEAD heeft geschreven.

Shell
pitmaster blame src/Repository.php

Uitvoer:

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);

Elke regel toont de eerste 8 tekens van de commit-hash en de eerste 30 tekens van de auteursidentiteit (Name <email> timestamp timezone), zonder opvulling.

grep

Zoek naar bestandsinhoud in de huidige HEAD-boom.

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

Uitvoer:

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

Opties moeten vóór het patroon staan:

  • -i, --ignore-case: hoofdletterongevoelig zoeken
  • -E, --extended-regexp, --regex: behandel het patroon als een reguliere PCRE-expressie

De uitvoer is platte path:line:content zonder kleuren.

reflog

Toon reflog-vermeldingen, nieuwste eerst.

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"

De standaardindeling is %gd: %gs (HEAD@{0}: commit: Add feature). Ondersteunde plaatsaanduidingen: %gd en %gD (selector), %gs (bericht), %H en %h (volledige en korte nieuwe hash). Limieten accepteren -n N, -nN en --max-count N; -n 0 toont alle vermeldingen.

Repositories die zijn aangemaakt door pitmaster init registreren geen reflogs, tenzij core.logallrefupdates is ingesteld op true in .git/config (#8). Daarom toont reflog daar niets totdat dat wel het geval is.

refs

Toon alle refs met hun hashes.

Shell
pitmaster refs

Uitvoer:

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

Hashes worden volledig weergegeven.

reset

Zet HEAD terug naar een specifieke commit.

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

Een revisie is vereist. Uitvoer:

Code
HEAD is now at abc1234

init

Initialiseer een nieuwe repository. Dit is de enige opdracht waarvoor geen bestaande repository nodig is.

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

Uitvoer:

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

--object-format accepteert sha1 (standaard) en sha256.

Afsluitcodes

Code Betekenis
0 Succes
1 Opdrachtfout: onjuist gebruik, onbekende opdracht, mislukte bewerking (error: <message>) of samenvoeging die vanwege conflicten is gestopt
128 Geen git-repository (fatal: <message>), een niet-herkend argument voor log of --continue / --abort / --skip terwijl er geen bewerking wordt uitgevoerd