Referentie voor CLI
Pitmaster bevat een CLI die een subset van git-opdrachten nabootst. Deze werkt op de repository in de huidige werkmap.
./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.
# 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.
# 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.
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.
pitmaster status
pitmaster status --porcelain=v2
Uitvoer:
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).
# 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.
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.
pitmaster commit -m "Add new feature"
Uitvoer:
[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.
# 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:
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.
# 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.
# 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.
# 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:
Merge successful.
Uitvoer bij conflict (op stderr, afsluitcode 1):
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.
# 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.
# 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.
# 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.
# 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.
# 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:
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.
pitmaster blame src/Repository.php
Uitvoer:
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.
pitmaster grep "function merge"
pitmaster grep -i -E "h.llo"
Uitvoer:
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.
# 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.
pitmaster refs
Uitvoer:
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.
# 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:
HEAD is now at abc1234
init
Initialiseer een nieuwe repository. Dit is de enige opdracht waarvoor geen bestaande repository nodig is.
# 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:
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 |