Αναφορά CLI
Το Pitmaster περιλαμβάνει ένα CLI που αντικατοπτρίζει ένα υποσύνολο εντολών git. Λειτουργεί στο αποθετήριο του τρέχοντος καταλόγου εργασίας.
./vendor/bin/pitmaster <command> [args...]
Σε εγκατάσταση από Composer, το script είναι ./vendor/bin/pitmaster· από το 0.2.11 εντοπίζει εκεί τον autoloader του έργου. Σε checkout του ίδιου του αποθετηρίου Pitmaster, εκτελέστε ./bin/pitmaster μετά το composer install. Τα παρακάτω παραδείγματα χρησιμοποιούν το pitmaster και για τις δύο διαδρομές. Αν εκτελεστεί χωρίς ορίσματα, εμφανίζει τη λίστα εντολών.
Οι αναθεωρήσεις επιλύονται όπως στο Repository::resolve(): HEAD, ονόματα κλάδων και ετικετών, πλήρη ονόματα ref, πλήρεις κατακερματισμοί και εκφράσεις ~N / ^N. Δεν γίνονται δεκτοί συντομευμένοι κατακερματισμοί. Οι εντολές clone, fetch και push είναι διαθέσιμες μόνο μέσω του PHP API.
Εντολές
log
Εμφανίζει το ιστορικό των commit, με πρώτο το νεότερο.
# 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
Οι γραφές ορίων του git (-n N, -nN, --max-count N, --max-count=N, -N) προστέθηκαν στο 0.2.11. Ένας σκέτος αριθμός είναι η συντομογραφία του Pitmaster για το όριο. Το πρώτο άλλο όρισμα είναι φίλτρο διαδρομής· οτιδήποτε ακολουθεί το -- αντιμετωπίζεται ως διαδρομή. Κάθε άλλο όρισμα που ξεκινά με - εμφανίζει το fatal: unrecognized argument: <arg> και τερματίζει με 128.
Η έξοδος περιλαμβάνει το commit <hash> (κίτρινο), μια γραμμή Merge: για commit συγχώνευσης, το Author: με την ακατέργαστη ταυτότητα (όνομα, email, χρονική σήμανση και ζώνη ώρας) και το μήνυμα του commit με εσοχή. Το --oneline εμφανίζει το abc1234 Subject. Το φίλτρο διαδρομής αντιστοιχίζει μία ακριβή διαδρομή αρχείου και εξετάζει μόνο τα πιο πρόσφατα πέντε commit του ορίου (#7).
show
Εμφανίζει τις λεπτομέρειες του commit και τις διαφορές σε σχέση με τον πρώτο γονέα.
# Show HEAD
pitmaster show
# Show a specific commit
pitmaster show HEAD~3
pitmaster show v1.0.0
pitmaster show 3f2c1e0b9d6a4f8e7c5b2a1d0e9f8c7b6a5d4e3f
Εμφανίζει τα μεταδεδομένα του commit (με γραμμή Date:) και στη συνέχεια μια ενοποιημένη διαφορά. Για σχολιασμένη ετικέτα, προηγούνται η κεφαλίδα και το μήνυμα της ετικέτας. Χρησιμοποιούνται χρώματα μόνο όταν το stdout είναι τερματικό. Τα commit συγχώνευσης εμφανίζονται χωρίς διαφορά.
cat-file
Εκτυπώνει το ακατέργαστο περιεχόμενο ενός αντικειμένου git.
pitmaster cat-file a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2
Δέχεται πλήρη κατακερματισμό. Εκτυπώνει το αποθηκευμένο περιεχόμενο του αντικειμένου: blobs, commit και ετικέτες ως κείμενο, δέντρα σε δυαδική μορφή. Σε αντίθεση με το git cat-file -p, τα δέντρα δεν εκτυπώνονται σε ευανάγνωστη μορφή.
status
Εμφανίζει την κατάσταση του δέντρου εργασίας.
pitmaster status
pitmaster status --porcelain=v2
Έξοδος:
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
Τα αρχεία που έχουν προστεθεί στο staging εμφανίζονται με πράσινο, ενώ όσα δεν έχουν προστεθεί, δεν έχουν συγχωνευτεί ή δεν παρακολουθούνται εμφανίζονται με κόκκινο. Κατά τη διάρκεια συγχώνευσης με διενέξεις εμφανίζεται ενότητα Unmerged paths:. Σε αποσυνδεδεμένο HEAD εμφανίζεται HEAD detached, ενώ ένα καθαρό δέντρο εμφανίζει nothing to commit, working tree clean. Το --porcelain=v2 εμφανίζει την έξοδο του Repository::statusPorcelainV2().
diff
Εμφανίζει τις αλλαγές μεταξύ του index και του δέντρου εργασίας (αλλαγές που δεν έχουν προστεθεί στο staging).
# 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
Η έξοδος είναι έγχρωμη ενοποιημένη διαφορά, ακόμη κι όταν το stdout δεν είναι τερματικό. Για τροποποιημένα αρχεία κειμένου αντιστοιχεί στο git diff· τα νέα, διαγραμμένα, δυαδικά, μετονομασμένα και αρχεία με αλλαγμένη λειτουργία μορφοποιούνται διαφορετικά (βλ. Diff). Το diff --cached δεν εμφανίζει τίποτα πριν από το πρώτο commit (#5).
add
Προσθέτει αρχεία στο staging για το επόμενο commit.
pitmaster add src/Feature.php
pitmaster add src/Feature.php tests/FeatureTest.php README.md
Κάθε αρχείο διαβάζεται από το δέντρο εργασίας, γράφεται ως αντικείμενο blob και ενημερώνεται το index. Τα ορίσματα είναι διαδρομές αρχείων· οι κατάλογοι και το . δεν επεκτείνονται.
commit
Δημιουργεί commit από τα αρχεία που έχουν προστεθεί στο staging.
pitmaster commit -m "Add new feature"
Έξοδος:
[main abc1234] Add new feature
Απαιτείται το -m, εκτός αν ολοκληρώνεται μια διακοπείσα συγχώνευση, επιλογή commit, αναίρεση ή επανατοποθέτηση, οπότε χρησιμοποιείται το προετοιμασμένο μήνυμα. Ο συντάκτης και ο δημιουργός του commit καθορίζονται από μεταβλητές περιβάλλοντος, σταθερές και το .git/config, όπως περιγράφεται στην ενότητα Getting Started.
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
Έξοδος κατά την εμφάνιση λίστας:
bugfix/typo
feature/login
* main
Η δημιουργία εμφανίζει Created branch <name>, η διαγραφή εμφανίζει Deleted branch <name>. Τα -d και -D λειτουργούν το ίδιο: δεν ελέγχουν αν ο κλάδος έχει συγχωνευτεί και αρνούνται και τα δύο να διαγράψουν τον κλάδο που έχει γίνει checkout.
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"
Η δημιουργία εμφανίζει Created tag <name>.
checkout
Αλλάζει κλάδο ή αποσυνδέει το 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
Ενημερώνει το HEAD, το index και το δέντρο εργασίας ώστε να αντιστοιχούν στον στόχο και εμφανίζει Switched to '<target>'. Αρνείται να προχωρήσει όταν υπάρχουν τοπικές αλλαγές ή αρχεία που δεν παρακολουθούνται σε διαδρομές που διαφέρουν μεταξύ των δύο δέντρων. Οι μη δεσμευμένες αλλαγές σε άλλα παρακολουθούμενα αρχεία αντικαθίστανται από το περιεχόμενο του στόχου, όπου το git θα τις διατηρούσε (#2)· κάντε πρώτα commit ή stash.
merge
Συγχωνεύει έναν ή περισσότερους κλάδους στο τρέχον HEAD ή συνεχίζει/εγκαταλείπει μια συγχώνευση που βρίσκεται σε εξέλιξη.
# 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
Έξοδος σε περίπτωση επιτυχίας:
Merge successful.
Έξοδος σε περίπτωση διένεξης (στο stderr, κωδικός εξόδου 1):
CONFLICT in: src/File.php, src/Other.php
Το -s δέχεται τα ours, ort και recursive· τα ort και recursive χρησιμοποιούν και τα δύο την προεπιλεγμένη συγχώνευση. Με το -s, το CLI εμφανίζει το Merge successful. και τερματίζει με 0 ακόμη κι όταν η συγχώνευση διακόπηκε λόγω διενέξεων (#21), επομένως ελέγξτε το status μετά. Το merge --continue χωρίς συγχώνευση σε εξέλιξη τερματίζει με 128. Η συγχώνευση κλάδου που έχει ήδη συγχωνευτεί δημιουργεί άλλο ένα commit συγχώνευσης (#6) και οι μη δεσμευμένες αλλαγές σε παρακολουθούμενα αρχεία αντικαθίστανται, όπως και με το checkout.
cherry-pick
Εφαρμόζει ένα commit πάνω στο τρέχον HEAD ή συνεχίζει/εγκαταλείπει μια διένεξη που βρίσκεται σε εξέλιξη.
# 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
Δεν εμφανίζει τίποτα σε περίπτωση επιτυχίας. Τα --continue και --abort χωρίς επιλογή commit σε εξέλιξη τερματίζουν με 128.
revert
Δημιουργεί commit αναίρεσης ή συνεχίζει/εγκαταλείπει μια διένεξη που βρίσκεται σε εξέλιξη.
# 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
Δεν εμφανίζει τίποτα σε περίπτωση επιτυχίας. Τα --continue και --abort χωρίς αναίρεση σε εξέλιξη τερματίζουν με 128.
rebase
Επανατοποθετεί τον τρέχοντα κλάδο πάνω σε άλλη αναφορά.
# 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
Δεν εμφανίζει τίποτα σε περίπτωση επιτυχίας. Τα --continue, --skip και --abort χωρίς επανατοποθέτηση σε εξέλιξη εμφανίζουν το fatal: no rebase in progress και τερματίζουν με 128.
bisect
Εντοπίζει με δυαδική αναζήτηση το commit που εισήγαγε μια αλλαγή.
# 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 και bad εμφανίζουν τον πλήρη κατακερματισμό του επόμενου υποψηφίου, στον οποίο γίνεται checkout. Όταν απομείνει ένας μόνο ύποπτος, εμφανίζεται ξανά ο ίδιος κατακερματισμός: αυτό το commit είναι το πρώτο κακό commit. Σε αντίθεση με το git, δεν εμφανίζεται σύνοψη «is the first bad commit».
stash
Αποθηκεύει και επαναφέρει αλλαγές στον κατάλογο εργασίας.
# 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
Το μήνυμα είναι το όρισμα μετά το push ή το save· το -m δεν υποστηρίζεται και θα αποθηκευόταν ως μήνυμα. Τα pop, apply και drop χρησιμοποιούν πάντα το stash@{0}. Εμφανίζουν τα Saved working directory to stash abc1234, Applied and dropped stash, Applied stash και Dropped stash.
Έξοδος λίστας stash:
stash@{0}: On main: Work in progress on login
stash@{1}: WIP on main: abc1234 Add new feature
Όταν υπάρχουν περισσότερες από μία εγγραφές, τα drop και pop προς το παρόν αφήνουν την εγγραφή στη λίστα (#10), ενώ το apply αντικαθιστά μη δεσμευμένες αλλαγές σε αρχεία που δεν επηρεάζονται από το stash (#11).
blame
Εμφανίζει τη συνεισφορά ανά γραμμή ενός αρχείου στο HEAD.
pitmaster blame src/Repository.php
Έξοδος:
a1b2c3d4 (Jane Smith <jane@example.com> ) <?php
a1b2c3d4 (Jane Smith <jane@example.com> )
f5e6d7c8 (Ann Lee <ann@example.com> 1700) declare(strict_types=1);
Κάθε γραμμή εμφανίζει τους πρώτους 8 χαρακτήρες του κατακερματισμού commit και τους πρώτους 30 χαρακτήρες της ταυτότητας του συντάκτη (Name <email> timestamp timezone), χωρίς συμπλήρωση.
grep
Αναζητά περιεχόμενο αρχείων στο τρέχον δέντρο HEAD.
pitmaster grep "function merge"
pitmaster grep -i -E "h.llo"
Έξοδος:
src/Repository.php:2257: public function merge(string $branch, string $strategy = 'recursive'): MergeResult
src/Merge/ThreeWayMerge.php:23: public static function merge(
Οι επιλογές πρέπει να προηγούνται του μοτίβου:
-i,--ignore-case: αντιστοίχιση χωρίς διάκριση πεζών-κεφαλαίων-E,--extended-regexp,--regex: αντιμετωπίζει το μοτίβο ως κανονική έκφραση PCRE
Η έξοδος είναι απλό path:line:content χωρίς χρώματα.
reflog
Εμφανίζει τις εγγραφές reflog, με πρώτη τη νεότερη.
# 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"
Η προεπιλεγμένη μορφή είναι %gd: %gs (HEAD@{0}: commit: Add feature). Υποστηριζόμενα placeholders: %gd και %gD (επιλογέας), %gs (μήνυμα), %H και %h (πλήρης και σύντομος νέος κατακερματισμός). Τα όρια δέχονται -n N, -nN και --max-count N· το -n 0 εμφανίζει όλες τις εγγραφές.
Τα αποθετήρια που δημιουργούνται από το pitmaster init δεν καταγράφουν reflog, εκτός αν το core.logallrefupdates οριστεί σε true στο .git/config (#8), επομένως το reflog δεν εμφανίζει τίποτα εκεί μέχρι να γίνει αυτό.
refs
Εμφανίζει όλες τις αναφορές μαζί με τους κατακερματισμούς τους.
pitmaster refs
Έξοδος:
abc123def456... refs/heads/main
789012abc345... refs/heads/feature/login
def456789012... refs/tags/v1.0.0
Οι κατακερματισμοί εμφανίζονται ολόκληροι.
reset
Επαναφέρει το HEAD σε συγκεκριμένο 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
Απαιτείται αναθεώρηση. Έξοδος:
HEAD is now at abc1234
init
Αρχικοποιεί ένα νέο αποθετήριο. Είναι η μόνη εντολή που δεν απαιτεί υπάρχον αποθετήριο.
# 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
Έξοδος:
Initialized empty Pitmaster repository in /path/to/new-project/.git/
Το --object-format δέχεται το sha1 (προεπιλογή) και το sha256.
Κωδικοί εξόδου
| Κωδικός | Σημασία |
|---|---|
| 0 | Επιτυχία |
| 1 | Σφάλμα εντολής: σφάλμα χρήσης, άγνωστη εντολή, αποτυχημένη λειτουργία (error: <message>) ή συγχώνευση που διακόπηκε λόγω διενέξεων |
| 128 | Δεν είναι αποθετήριο git (fatal: <message>), μη αναγνωρισμένο όρισμα log ή --continue / --abort / --skip χωρίς λειτουργία σε εξέλιξη |