Reference CLI
Pitmaster obsahuje CLI, která napodobuje část příkazů git. Pracuje s repozitářem v aktuálním pracovním adresáři.
./vendor/bin/pitmaster <command> [args...]
Při instalaci Composer je skript umístěn v ./vendor/bin/pitmaster; od 0.2.11 tam najde autoloader projektu. V checkoutu samotného repozitáře Pitmaster spusťte po composer install příkaz ./bin/pitmaster. Níže uvedené příklady používají pitmaster pro obě cesty. Spuštění bez argumentů vypíše seznam příkazů.
Revize se určují stejně jako v Repository::resolve(): pomocí HEAD, názvů větví a tagů, úplných názvů referencí, úplných hashů a výrazů ~N / ^N. Zkrácené hashe nejsou podporovány. Clone, fetch a push jsou dostupné pouze prostřednictvím PHP API.
Příkazy
log
Zobrazí historii commitů od nejnovějšího.
# 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) byly přidány v 0.2.11. Samotné číslo je vlastní zkratka Pitmaster pro limit. První další argument slouží jako filtr cesty; vše za -- se považuje za cestu. Každý jiný argument začínající na - vypíše fatal: unrecognized argument: <arg> a skončí s kódem 128.
Výstup obsahuje commit <hash> (žlutě), řádek Merge: pro merge commity, Author: se surovou identitou (jméno, e-mail, časové razítko a časové pásmo) a odsazenou zprávu commitu. --oneline vypíše abc1234 Subject. Filtr cesty odpovídá jedné přesné cestě k souboru a kontroluje pouze nejnovějších pětkrát tolik commitů, kolik určuje limit (#7).
show
Zobrazí podrobnosti commitu a rozdíl oproti prvnímu rodiči.
# Show HEAD
pitmaster show
# Show a specific commit
pitmaster show HEAD~3
pitmaster show v1.0.0
pitmaster show 3f2c1e0b9d6a4f8e7c5b2a1d0e9f8c7b6a5d4e3f
Zobrazí metadata commitu (s řádkem Date:) a za nimi jednotný diff. U anotovaného tagu se nejprve zobrazí hlavička a zpráva tagu. Barvy se používají pouze tehdy, když je stdout terminál. Merge commity se zobrazí bez diffu.
cat-file
Vypíše nezpracovaný obsah objektu git.
pitmaster cat-file a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2
Přijímá úplný hash. Vypíše uložený obsah objektu: bloby, commity a tagy jako text, stromy v binární podobě. Na rozdíl od git cat-file -p se stromy nevypisují v čitelném formátu.
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
Připravené soubory se zobrazují zeleně, nepřipravené, nesloučené a nesledované červeně. Během konfliktu při sloučení se zobrazí sekce Unmerged paths:. Odpojený HEAD vypíše HEAD detached a čistý strom vypíše nothing to commit, working tree clean. --porcelain=v2 vypíše výstup Repository::statusPorcelainV2().
diff
Zobrazí změny mezi indexem a pracovním stromem (nepřipravené změny).
# 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ýstupem je barevný jednotný diff, a to i v případě, že stdout není terminál. Pro upravené textové soubory odpovídá git diff; nové, smazané, binární, přejmenované soubory a soubory se změněným režimem mají jiné formátování (viz Rozdíly). diff --cached před prvním commitem nic nevypíše (#5).
add
Připraví soubory pro další commit.
pitmaster add src/Feature.php
pitmaster add src/Feature.php tests/FeatureTest.php README.md
Každý soubor se načte z pracovního stromu, zapíše jako objekt blob a aktualizuje se index. Argumenty představují cesty k souborům; adresáře a . se nerozbalují.
commit
Vytvoří commit z připravených souborů.
pitmaster commit -m "Add new feature"
Výstup:
[main abc1234] Add new feature
-m je povinný, s výjimkou dokončení zastaveného merge, cherry-picku, revertu nebo rebase, kdy se použije připravená zpráva. Autor a committer se určí z proměnných prostředí, konstant a .git/config, jak je popsáno v Začínáme.
branch
Vypíše větve nebo vytvoří novou.
# 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 při výpisu:
bugfix/typo
feature/login
* main
Vytvoření vypíše Created branch <name>, smazání vypíše Deleted branch <name>. -d a -D se chovají stejně: ani jeden příkaz nekontroluje, zda byla větev sloučena, a oba odmítnou smazat právě používanou větev.
tag
Vypíše tagy nebo vytvoří 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"
Vytvoření vypíše Created tag <name>.
checkout
Přepne větve nebo 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 podle cíle a vypíše Switched to '<target>'. Odmítne operaci, pokud se v cestách, které se mezi oběma stromy liší, nacházejí lokální změny nebo nesledované soubory. Nepotvrzené změny v ostatních sledovaných souborech přepíše obsahem cílového stromu, přestože by je git zachoval (#2); nejprve je potvrďte nebo uložte do stash.
merge
Sloučí jednu nebo více větví do aktuálního HEAD nebo pokračuje či zruší probíhající sloučení s konfliktem.
# 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 při úspěchu:
Merge successful.
Výstup při konfliktu (na stderr, návratový kód 1):
CONFLICT in: src/File.php, src/Other.php
-s přijímá ours, ort a recursive; ort a recursive používají výchozí sloučení. S -s CLI vypíše Merge successful. a skončí s kódem 0, i když se sloučení zastavilo kvůli konfliktům (#21), takže potom zkontrolujte status. merge --continue bez probíhajícího sloučení skončí s kódem 128. Sloučení větve, která je již sloučena, vytvoří další merge commit (#6) a nepotvrzené změny ve sledovaných souborech se přepíší stejně jako u checkout.
cherry-pick
Použije commit nad aktuálním HEAD nebo pokračuje či zruší probíhající operaci s konfliktem.
# 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
Při úspěchu nic nevypíše. Příkazy --continue a --abort bez probíhajícího cherry-picku skončí s kódem 128.
revert
Vytvoří revert commit nebo pokračuje či zruší probíhající operaci s konfliktem.
# 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
Při úspěchu nic nevypíše. Příkazy --continue a --abort bez probíhajícího revertu skončí s kódem 128.
rebase
Rebase aktuální větve na jinou referenci.
# 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
Při úspěchu nic nevypíše. Příkazy --continue, --skip a --abort bez probíhajícího rebase vypíší fatal: no rebase in progress a skončí s kódem 128.
bisect
Binárním vyhledáváním najde commit, který zavedl změnu.
# 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 a bad vypíší úplný hash dalšího kandidáta a přepnou na něj. Pokud zbývá jediný podezřelý commit, stejný hash se vypíše znovu: tento commit je první chybný. Na rozdíl od gitu se nevypíše souhrn „je to první chybný commit“.
stash
Uloží a obnoví změny pracovního adresáře.
# 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
Zpráva je argument za push nebo save; -m není podporováno a uložilo by se jako zpráva. pop, apply a drop vždy používají stash@{0}. Vypíší Saved working directory to stash abc1234, Applied and dropped stash, Applied stash a Dropped stash.
Výstup seznamu stash:
stash@{0}: On main: Work in progress on login
stash@{1}: WIP on main: abc1234 Add new feature
Pokud je položek více, drop a pop aktuálně ponechají položku v seznamu (#10) a apply přepíše nepotvrzené změny v souborech, kterých se stash nedotýká (#11).
blame
Zobrazit autorství jednotlivých řádků souboru ve verzi 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ý řádek zobrazuje prvních 8 znaků hashe commitu a prvních 30 znaků identity autora (Name <email> timestamp timezone), bez doplnění mezerami.
grep
Vyhledat obsah souborů v aktuálním stromu 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(
Volby musí být uvedeny před vzorem:
-i,--ignore-case: porovnávání bez rozlišení velikosti písmen-E,--extended-regexp,--regex: považovat vzor za regulární výraz PCRE
Výstup je prostý path:line:content bez barev.
reflog
Zobrazit záznamy reflogu od nejnovějšího.
# 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"
Výchozí formát je %gd: %gs (HEAD@{0}: commit: Add feature). Podporované zástupné symboly: %gd a %gD (výběr), %gs (zpráva), %H a %h (plný a krátký nový hash). Limity přijímají -n N, -nN a --max-count N; -n 0 vypíše všechny záznamy.
Úložiště vytvořená pomocí pitmaster init nezaznamenávají reflogy, pokud v .git/config není core.logallrefupdates nastaveno na true (#8), takže reflog v nich do té doby nic nevypíše.
refs
Vypsat všechny odkazy včetně jejich hashů.
pitmaster refs
Výstup:
abc123def456... refs/heads/main
789012abc345... refs/heads/feature/login
def456789012... refs/tags/v1.0.0
Hash se vypisuje celý.
reset
Nastavit HEAD na konkrétní 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
Je vyžadována revize. Výstup:
HEAD is now at abc1234
init
Inicializovat nové úložiště. Toto je jediný příkaz, který nevyžaduje existující úložiště.
# 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 přijímá sha1 (výchozí) a sha256.
Návratové kódy
| Kód | Význam |
|---|---|
| 0 | Úspěch |
| 1 | Chyba příkazu: chyba použití, neznámý příkaz, neúspěšná operace (error: <message>) nebo sloučení zastavené kvůli konfliktům |
| 128 | Nejde o úložiště git (fatal: <message>), nerozpoznaný argument log nebo --continue / --abort / --skip bez probíhající operace |