Referencia CLI
Pitmaster obsahuje CLI, ktorý odzrkadľuje podmnožinu príkazov git. Pracuje s úložiskom v aktuálnom pracovnom adresári.
./vendor/bin/pitmaster <command> [args...]
Pri inštalácii z Composer je skript na ceste ./vendor/bin/pitmaster; od 0.2.11 tam vyhľadáva autoloader projektu. Pri checkoutnutí samotného úložiska Pitmaster spustite ./bin/pitmaster po composer install. V príkladoch nižšie sa pre obe cesty používa pitmaster. Spustenie bez argumentov vypíše zoznam príkazov.
Revízie sa vyhľadávajú rovnako ako v Repository::resolve(): HEAD, názvy vetiev a značiek, úplné názvy refov, úplné hashe a výrazy ~N / ^N. Skrátené hashe sa neprijímajú. Klonovanie, načítanie zmien a odosielanie sú dostupné iba cez PHP API.
Príkazy
log
Zobrazí históriu commitov od najnovšieho.
# 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
Zápisy limitu git (-n N, -nN, --max-count N, --max-count=N, -N) boli pridané v 0.2.11. Samotné číslo je vlastná skrátená forma limitu v Pitmaster. Prvý ďalší argument je filter cesty; všetko po -- sa považuje za cestu. Každý iný argument začínajúci na - vypíše fatal: unrecognized argument: <arg> a skončí s kódom 128.
Výstup obsahuje commit <hash> (žlté), riadok Merge: pre zlučovacie commity, Author: so surovou identitou (meno, e-mail, časová pečiatka a časové pásmo) a odsadenú správu commitu. --oneline vypíše abc1234 Subject. Filter cesty sa zhoduje s jednou presnou cestou k súboru a kontroluje iba päťnásobok limitu najnovších commitov (#7).
show
Zobrazí podrobnosti commitu a rozdiel oproti prvému rodičovi.
# Show HEAD
pitmaster show
# Show a specific commit
pitmaster show HEAD~3
pitmaster show v1.0.0
pitmaster show 3f2c1e0b9d6a4f8e7c5b2a1d0e9f8c7b6a5d4e3f
Zobrazí metadáta commitu (s riadkom Date:) a za nimi zjednotený rozdiel. Pri anotovanej značke sa najskôr zobrazí hlavička značky a jej správa. Farby sa používajú iba vtedy, keď je stdout terminál. Zlučovacie commity sa zobrazia bez rozdielu.
cat-file
Vypíše surový obsah objektu git.
pitmaster cat-file a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2
Vyžaduje úplný hash. Vypíše uložený obsah objektu: bloby, commity a značky ako text, stromy v binárnej podobe. Na rozdiel od git cat-file -p sa stromy nevypisujú v čitateľnej forme.
status
Zobrazí stav pracovného stromu.
pitmaster status
pitmaster status --porcelain=v2
Výstup:
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
Súbory v indexe sa zobrazujú zelenou farbou, nezaznamenané, nezlúčené a nesledované červenou. Počas konfliktu zlúčenia sa zobrazí sekcia Unmerged paths:. Pri odpojenom HEAD sa vypíše HEAD detached, pri čistom pracovnom strome nothing to commit, working tree clean. --porcelain=v2 vypíše výstup Repository::statusPorcelainV2().
diff
Zobrazí zmeny medzi indexom a pracovným stromom (nezaznamenané zmeny).
# 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
Výstup je farebný zjednotený rozdiel, a to aj vtedy, keď stdout nie je terminál. Pri upravených textových súboroch zodpovedá výstupu príkazu git diff; formát nových, odstránených, binárnych a premenovaných súborov, ako aj súborov so zmeneným režimom, je odlišný (pozrite si časť Rozdiel). diff --cached pred prvým commitom nevypíše nič (#5).
add
Pridá súbory do indexu pre nasledujúci commit.
pitmaster add src/Feature.php
pitmaster add src/Feature.php tests/FeatureTest.php README.md
Každý súbor sa načíta z pracovného stromu, zapíše ako objekt blobu a aktualizuje sa index. Argumenty sú cesty k súborom; adresáre a . sa nerozbaľujú.
commit
Vytvorí commit zo súborov v indexe.
pitmaster commit -m "Add new feature"
Výstup:
[main abc1234] Add new feature
Vyžaduje sa -m, okrem dokončenia zastaveného zlúčenia, cherry-picku, vrátenia zmien alebo rebasingu, keď sa použije pripravená správa. Autor a tvorca commitu sa určujú z premenných prostredia, konštánt a .git/config, ako je opísané v časti Začíname.
branch
Vypíše vetvy alebo vytvorí novú.
# 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
Výstup pri vypisovaní:
bugfix/typo
feature/login
* main
Pri vytváraní sa vypíše Created branch <name>, pri odstraňovaní Deleted branch <name>. -d a -D fungujú rovnako: nekontrolujú, či je vetva zlúčená, a oba odmietnu odstrániť aktuálne checkoutnutú vetvu.
tag
Vypíše značky alebo vytvorí novú.
# 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"
Pri vytváraní sa vypíše Created tag <name>.
checkout
Prepne vetvy alebo odpojí HEAD.
# Switch to a branch
pitmaster checkout feature/login
# Detach HEAD at a tag or commit
pitmaster checkout v1.0.0
pitmaster checkout HEAD~2
Aktualizuje HEAD, index a pracovný strom tak, aby zodpovedali cieľu, a vypíše Switched to '<target>'. Odmietne operáciu, ak sú miestne zmeny alebo nesledované súbory v cestách, ktoré sa medzi stromami líšia. Nepotvrdené zmeny v ostatných sledovaných súboroch sa prepíšu obsahom cieľa; príkaz git by ich zachoval (#2). Najskôr ich potvrďte alebo odložte.
merge
Zlúči jednu alebo viac vetiev do aktuálneho HEAD alebo pokračuje v prebiehajúcom konflikte zlúčenia či ho preruší.
# 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
Výstup pri úspechu:
Merge successful.
Výstup pri konflikte (na stderr, kód ukončenia 1):
CONFLICT in: src/File.php, src/Other.php
-s prijíma ours, ort a recursive; ort a recursive používajú predvolené zlučovanie. Pri použití -s príkaz CLI vypíše Merge successful. a skončí s kódom 0, aj keď sa zlúčenie zastavilo pre konflikty (#21), preto potom skontrolujte status. Príkaz merge --continue bez prebiehajúceho zlúčenia skončí s kódom 128. Zlúčením vetvy, ktorá už je zlúčená, vznikne ďalší zlučovací commit (#6) a nepotvrdené zmeny v sledovaných súboroch sa prepíšu rovnako ako pri checkout.
cherry-pick
Aplikuje commit na aktuálny HEAD alebo pokračuje v prebiehajúcom konflikte či ho preruší.
# 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
Pri úspechu nevypíše nič. Príkazy --continue a --abort bez prebiehajúceho cherry-picku skončia s kódom 128.
revert
Vytvorí commit, ktorý vráti zmeny, alebo pokračuje v prebiehajúcom konflikte či ho preruší.
# 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
Pri úspechu nevypíše nič. Príkazy --continue a --abort bez prebiehajúceho vrátenia zmien skončia s kódom 128.
rebase
Zmení základ aktuálnej vetvy na inú referenciu.
# 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
Pri úspechu nevypíše nič. Príkazy --continue, --skip a --abort bez prebiehajúceho rebasingu vypíšu fatal: no rebase in progress a skončia s kódom 128.
bisect
Binárnym vyhľadávaním nájde commit, ktorý zaviedol zmenu.
# 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
Príkazy start, good a bad vypíšu úplný hash ďalšieho kandidáta a vykonajú jeho checkout. Keď zostane jediný podozrivý commit, vypíše sa znova ten istý hash: daný commit je prvý chybný commit. Na rozdiel od git sa nevypíše súhrn „is the first bad commit“.
stash
Uloží a obnoví zmeny pracovného adresára.
# 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
Správa je argument za push alebo save; možnosť -m nie je podporovaná a uložila by sa ako správa. Príkazy pop, apply a drop vždy používajú stash@{0}. Vypisujú Saved working directory to stash abc1234, Applied and dropped stash, Applied stash a Dropped stash.
Výstup zoznamu odložených zmien:
stash@{0}: On main: Work in progress on login
stash@{1}: WIP on main: abc1234 Add new feature
Ak je položiek viac, príkazy drop a pop momentálne ponechajú danú položku v zozname (#10), zatiaľ čo príkaz apply prepíše nepotvrdené zmeny v súboroch, ktorých sa odložené zmeny netýkajú (#11).
blame
Zobrazí autorstvo jednotlivých riadkov súboru v HEAD.
pitmaster blame src/Repository.php
Výstup:
a1b2c3d4 (Jane Smith <jane@example.com> ) <?php
a1b2c3d4 (Jane Smith <jane@example.com> )
f5e6d7c8 (Ann Lee <ann@example.com> 1700) declare(strict_types=1);
Každý riadok zobrazuje prvých 8 znakov hashu commitu a prvých 30 znakov identity autora (Name <email> timestamp timezone), bez doplnenia medzerami.
grep
Vyhľadá obsah súborov v aktuálnom strome HEAD.
pitmaster grep "function merge"
pitmaster grep -i -E "h.llo"
Výstup:
src/Repository.php:2257: public function merge(string $branch, string $strategy = 'recursive'): MergeResult
src/Merge/ThreeWayMerge.php:23: public static function merge(
Možnosti musia byť pred vzorom:
-i,--ignore-case: vyhľadávanie bez rozlišovania malých a veľkých písmen-E,--extended-regexp,--regex: považovanie vzoru za regulárny výraz PCRE
Výstup je obyčajný path:line:content bez farieb.
reflog
Zobrazí položky reflogu od najnovšej.
# 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"
Predvolený formát je %gd: %gs (HEAD@{0}: commit: Add feature). Podporované zástupné značky: %gd a %gD (výber), %gs (správa), %H a %h (úplný a krátky nový hash). Limity prijímajú -n N, -nN a --max-count N; -n 0 vypíše všetky položky.
Úložiská vytvorené pomocou pitmaster init nezaznamenávajú reflogy, pokiaľ v .git/config nie je core.logallrefupdates nastavené na true (#8), takže reflog tam dovtedy nič nevypíše.
refs
Vypíše všetky refy spolu s ich hashmi.
pitmaster refs
Výstup:
abc123def456... refs/heads/main
789012abc345... refs/heads/feature/login
def456789012... refs/tags/v1.0.0
Hashy sa vypisujú celé.
reset
Presunie HEAD na konkrétny 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
Vyžaduje sa revízia. Výstup:
HEAD is now at abc1234
init
Inicializuje nové úložisko. Je to jediný príkaz, ktorý nevyžaduje existujúce úložisko.
# 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
Výstup:
Initialized empty Pitmaster repository in /path/to/new-project/.git/
--object-format prijíma sha1 (predvolené) a sha256.
Návratové kódy
| Kód | Význam |
|---|---|
| 0 | Úspech |
| 1 | Chyba príkazu: chyba pri použití, neznámy príkaz, neúspešná operácia (error: <message>) alebo zlúčenie zastavené pre konflikty |
| 128 | Nejde o úložisko git (fatal: <message>), nerozpoznaný argument log alebo --continue / --abort / --skip bez prebiehajúcej operácie |