Hoppa till innehåll

Referens för CLI

Pitmaster innehåller en CLI som speglar en delmängd av kommandona i git. Den arbetar med arkivet i den aktuella arbetskatalogen.

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

I en installation från Composer finns skriptet på ./vendor/bin/pitmaster; sedan 0.2.11 hittar det projektets autoloader där. I en utcheckning av själva arkivet Pitmaster kör du ./bin/pitmaster efter composer install. Exemplen nedan använder pitmaster för båda sökvägarna. Om du kör det utan argument visas kommandolistan.

Revisioner löses upp på samma sätt som Repository::resolve(): HEAD, gren- och taggnamn, fullständiga referensnamn, fullständiga hashar samt uttrycken ~N / ^N. Förkortade hashar godtas inte. Kloning, hämtning och push är bara tillgängliga via PHP API.

Kommandon

log

Visa commit-historiken, med nyaste först.

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

Stavningsvarianterna för begränsning med git (-n N, -nN, --max-count N, --max-count=N, -N) lades till i 0.2.11. Ett ensamt tal är Pitmasters egen kortform för begränsningen. Det första övriga argumentet är ett sökvägsfilter; allt efter -- behandlas som sökvägen. Alla andra argument som börjar med - skriver ut fatal: unrecognized argument: <arg> och avslutas med 128.

Utdata innehåller commit <hash> (gul), en Merge:-rad för merge-commits, Author: med den råa identiteten (namn, e-postadress, tidsstämpel och tidszon) samt commit-meddelandet med indrag. --oneline skriver ut abc1234 Subject. Sökvägsfiltret matchar en exakt filsökväg och granskar de fem senaste gångerna begränsningen gånger antalet commits (#7).

show

Visa commit-detaljer och skillnader mot den första föräldern.

Shell
# Show HEAD
pitmaster show

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

Visar commit-metadata (med en Date:-rad) följt av en enhetlig diff. För en kommenterad tagg visas taggens rubrik och meddelande först. Färger används bara när stdout är en terminal. Merge-commits visas utan diff.

cat-file

Skriv ut det råa innehållet i ett git-objekt.

Shell
pitmaster cat-file a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2

Tar en fullständig hash. Skriver ut objektets lagrade innehåll: blobbar, commits och taggar som text, träd i binärt format. Till skillnad från git cat-file -p skrivs träd inte ut i läsbart formaterad form.

status

Visa arbetskatalogens status.

Shell
pitmaster status
pitmaster status --porcelain=v2

Utdata:

Kod
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

Fasade filer visas i grönt; ofasade, olösta och ospårade filer visas i rött. Ett avsnitt för Unmerged paths: visas vid en merge-konflikt. En frikopplad HEAD skriver ut HEAD detached och ett rent träd skriver ut nothing to commit, working tree clean. --porcelain=v2 skriver utdata från Repository::statusPorcelainV2().

diff

Visa ändringar mellan indexet och arbetskatalogen (ofasade ändringar).

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

Utdata är en färglagd enhetlig diff, även när stdout inte är en terminal. För ändrade textfiler motsvarar den git diff; nya, borttagna, binära, omdöpta filer och filer med ändrat läge formateras annorlunda (se Diff). diff --cached skriver inget före den första commiten (#5).

add

Fasa filer inför nästa commit.

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

Varje fil läses från arbetskatalogen, skrivs som ett blob-objekt och läggs till i indexet. Argumenten är filsökvägar; kataloger och . expanderas inte.

commit

Skapa en commit av de fasade filerna.

Shell
pitmaster commit -m "Add new feature"

Utdata:

Kod
[main abc1234] Add new feature

-m krävs, utom när du slutför en avbruten merge, cherry-pick, återställning eller ombasering; då används det förberedda meddelandet. Författare och committare hämtas från miljövariabler, konstanter och .git/config enligt beskrivningen i Kom igång.

branch

Visa grenar eller skapa en ny gren.

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

Utdata vid listning:

Kod
  bugfix/typo
  feature/login
* main

När du skapar en gren skrivs Created branch <name> ut, och när du tar bort en gren skrivs Deleted branch <name> ut. -d och -D fungerar likadant: ingetdera kontrollerar om grenen har sammanfogats, och båda vägrar ta bort den utcheckade grenen.

tag

Visa taggar eller skapa en ny tagg.

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"

När du skapar en tagg skrivs Created tag <name> ut.

checkout

Byt gren eller frikoppla 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

Uppdaterar HEAD, indexet och arbetskatalogen så att de motsvarar målet, och skriver ut Switched to '<target>'. Åtgärden vägras om lokala ändringar eller ospårade filer finns i sökvägar som skiljer sig mellan de två träden. Ocommittade ändringar i andra spårade filer skrivs över med målets innehåll. git skulle bevara dem (#2); committa eller lägg dem i stash först.

merge

Sammanfoga en eller flera grenar med aktuell HEAD, eller fortsätt/avbryt en pågående merge-konflikt.

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

Utdata vid lyckat resultat:

Kod
Merge successful.

Utdata vid konflikt (på stderr, avslutningskod 1):

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

-s godtar ours, ort och recursive; ort och recursive använder båda standardmerge. Med -s skriver CLI ut Merge successful. och avslutas med 0 även när merge stannat på grund av konflikter (#21), så kontrollera status efteråt. merge --continue utan en pågående merge avslutas med 128. Om du sammanfogar en gren som redan har sammanfogats skapas ytterligare en merge-commit (#6), och ocommittade ändringar i spårade filer skrivs över på samma sätt som med checkout.

cherry-pick

Lägg en commit ovanpå aktuell HEAD, eller fortsätt/avbryt en pågående konflikt.

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

Skriver inget vid lyckat resultat. --continue och --abort avslutas med 128 om det inte pågår någon cherry-pick.

revert

Skapa en återställningscommit, eller fortsätt/avbryt en pågående konflikt.

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

Skriver inget vid lyckat resultat. --continue och --abort avslutas med 128 om det inte pågår någon återställning.

rebase

Basera om den aktuella grenen ovanpå en annan referens.

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

Skriver inget vid lyckat resultat. --continue, --skip och --abort skriver ut fatal: no rebase in progress och avslutas med 128 om det inte pågår någon ombasering.

bisect

Hitta committen som introducerade en ändring med binärsökning.

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 och bad skriver ut nästa kandidats fullständiga hash och checkar ut den. När bara en misstänkt återstår skrivs samma hash ut igen: den commiten är den första dåliga commiten. Till skillnad från git skrivs ingen sammanfattning med ”är den första dåliga commiten” ut.

stash

Spara och återställ ändringar i arbetskatalogen.

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

Meddelandet är argumentet efter push eller save; -m stöds inte och skulle lagras som meddelandet. pop, apply och drop använder alltid stash@{0}. De skriver ut Saved working directory to stash abc1234, Applied and dropped stash, Applied stash och Dropped stash.

Utdata från stashlistan:

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

Om listan innehåller fler än en post lämnar drop och pop för närvarande posten kvar i listan (#10), och apply skriver över ocommittade ändringar i filer som stashen inte berör (#11).

blame

Visa vem som har skrivit varje rad i en fil vid HEAD.

Shell
pitmaster blame src/Repository.php

Utdata:

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

Varje rad visar de första 8 tecknen i commit-hashen och de första 30 tecknen i författarens identitet (Name <email> timestamp timezone), utan utfyllnad.

grep

Sök i filinnehållet i trädet för aktuell HEAD.

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

Utdata:

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

Alternativen måste stå före mönstret:

  • -i, --ignore-case: matchning utan hänsyn till skiftläge
  • -E, --extended-regexp, --regex: tolka mönstret som ett reguljärt PCRE-uttryck

Utdata är vanlig path:line:content utan färger.

reflog

Visa reflog-poster, med nyaste först.

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"

Standardformatet är %gd: %gs (HEAD@{0}: commit: Add feature). Platshållare som stöds: %gd och %gD (väljare), %gs (meddelande), %H och %h (fullständig respektive kort ny hash). Begränsningar godtar -n N, -nN och --max-count N; -n 0 skriver ut alla poster.

Arkiv som skapas av pitmaster init registrerar inte reflog-poster om inte core.logallrefupdates är satt till true i .git/config (#8), så reflog skriver inget där förrän inställningen är satt.

refs

Visa alla referenser med deras hashar.

Shell
pitmaster refs

Utdata:

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

Hashar skrivs ut i sin helhet.

reset

Återställ HEAD till en specifik 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

En revision krävs. Utdata:

Kod
HEAD is now at abc1234

init

Initiera ett nytt arkiv. Det här är det enda kommandot som inte kräver ett befintligt arkiv.

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

Utdata:

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

--object-format godtar sha1 (standard) och sha256.

Avslutningskoder

Kod Betydelse
0 Lyckades
1 Kommandofel: användningsfel, okänt kommando, misslyckad åtgärd (error: <message>) eller en merge som stannade på grund av konflikter
128 Inte ett git-arkiv (fatal: <message>), ett okänt log-argument eller --continue / --abort / --skip utan någon pågående åtgärd