Pitmaster
Git σε PHP: ανάγνωση και εγγραφή αποθετηρίων, diff, merge και επικοινωνία μέσω έξυπνου HTTP χωρίς κλήση του git μέσω shell.
composer require pitmaster/pitmasterΤελευταία έκδοση v0.2.11 MIT PHP 8.2+
# List all branches (current marked with *)
./bin/pitmaster branch
# Create a new branch from HEAD
./bin/pitmaster branch feature/new-thing
# Delete a branch
./bin/pitmaster branch -d feature/old
./bin/pitmaster branch -D feature/oldΣτην πράξη
Ανοίξτε ένα αποθετήριο και έπειτα διαβάστε και γράψτε σε αυτό με κλήσεις μεθόδων ή από το shell.
Ανάγνωση αποθετηρίου από το PHP
Το Pitmaster::open() εντοπίζει τον κατάλογο .git και επιστρέφει ένα handle αποθετηρίου. Κάθε εγγραφή κατάστασης έχει ξεχωριστή κατάσταση για το index και το working tree.
Από το shell, το ./vendor/bin/pitmaster αντιστοιχεί σε ένα υποσύνολο εντολών git και λειτουργεί από εγκατάσταση Composer, αφού το 0.2.11.
use Pitmaster\Pitmaster;
$repo = Pitmaster::open('/path/to/project');
// Read the current HEAD commit
$head = $repo->head();
echo $head->message;
// List branches
foreach ($repo->branches() as $branch) {
echo $branch . "\n";
}
// Check status
foreach ($repo->status() as $entry) {
echo "{$entry->path}: {$entry->index->value}{$entry->worktree->value}\n";
}./vendor/bin/pitmaster log
./vendor/bin/pitmaster status
./vendor/bin/pitmaster diff
./vendor/bin/pitmaster show HEAD
./vendor/bin/pitmaster add file.txt
./vendor/bin/pitmaster commit -m "message"
./vendor/bin/pitmaster branch feature
./vendor/bin/pitmaster checkout feature
./vendor/bin/pitmaster merge featureΧωρίς δυαδικό αρχείο git
Οι βασικές λειτουργίες εκτελούνται σε PHP 8.2+ χωρίς δυαδικό αρχείο git ή FFI. Τα hooks και η εναλλακτική λύση SSH εκκινούν διεργασίες, εκτός αν περάσετε ['hooks' => false] ή processFreeOptions().
Ανάγνωση & εγγραφή
Loose αντικείμενα, αρχεία pack με επίλυση delta, το index, refs και διαμόρφωση. Το git διαβάζει όσα γράφει το Pitmaster για τις εκδόσεις index 2 και 3 και τα loose refs.
Diff & merge
Diff Myers, patience και histogram με εντοπισμό μετονομασιών. Merge τριών κατευθύνσεων με δείκτες σύγκρουσης.
Πρωτόκολλο δικτύου
Κλωνοποίηση, λήψη και αποστολή μέσω έξυπνου HTTP ή SSH, με εναλλακτική λύση dumb HTTP για κλωνοποίηση και λήψη. Το πρωτόκολλο v2 είναι διαθέσιμο μέσω των πελατών χαμηλότερου επιπέδου.
Λειτουργίες Git
προσθήκη, καταχώριση, κατάσταση, διαφορές, συγχώνευση, εναλλαγή, επαναφορά, προσωρινή αποθήκευση, επιλεκτική εφαρμογή, αναίρεση, αναδιάταξη, απόδοση ευθύνης, αναζήτηση.
CLI
22 εντολές τύπου git, μεταξύ των οποίων init, log, status, diff, add, commit, branch, merge, stash, blame και grep. Η κλωνοποίηση, η λήψη και η αποστολή είναι διαθέσιμες μόνο μέσω της βιβλιοθήκης.
Δοκιμασμένο με Oracle
Τα 761 σενάρια συγκρίνουν αποτελέσματα με έξοδο που καταγράφηκε από πραγματικό git και εκτελούνται στο CI· τα 605 προέρχονται από τις σουίτες δοκιμών των git, libgit2, go-git, isomorphic-git, dulwich και JGit.
Πλήρης αναζήτηση
Blame, grep, bisect, notes και φίλτρο διαδρομής log, χωρίς κλήση του git μέσω shell.
Γιατί Pitmaster
Λειτουργεί χωρίς εγκατάσταση git
Τα commits, τα diff, η κατάσταση και το ιστορικό υπολογίζονται σε PHP, ώστε τα containers και οι hosts χωρίς δυαδικό αρχείο git να μπορούν και πάλι να εργάζονται με αποθετήρια.
Handles χωρίς διεργασίες
Το Pitmaster::processFreeOptions() απενεργοποιεί τα hooks, τα hooks fsmonitor, την κλωνοποίηση, τη λήψη, την αποστολή και τη μεταφορά διεργασιών SSH. Οι τοπικές αναγνώσεις και εγγραφές συνεχίζουν να λειτουργούν.
Ελεγμένο έναντι του git
Οι δοκιμές ενσωμάτωσης εκτελούνται με το δυαδικό αρχείο git, και ο πίνακας υποστήριξης μετρά 146 από τα 146 χαρακτηριστικά εντός πεδίου ως επαληθευμένα με oracle στο δηλωμένο εύρος ισοτιμίας.
SHA-1 και SHA-256
Δημιουργήστε ένα αποθετήριο SHA-256 με Pitmaster::init($path, 'sha256') ή εκτελέστε init --object-format=sha256. Τα αρχεία pack διαβάζονται και γράφονται· τα αρχεία commit-graph, multi-pack index και reftable μπορούν να διαβαστούν.
Σε σύγκριση με
Άλλοι τρόποι εργασίας με αποθετήρια Git από PHP και οι διαφορές του Pitmaster.
| Εργαλείο | Κατάλληλο για | Διαφορά με το Pitmaster |
|---|---|---|
| git (γραμμή εντολών) | Κατάλληλο γιαΗ υλοποίηση αναφοράς, με ένα πλούσιο σύνολο εντολών που καλύπτει τόσο λειτουργίες υψηλού επιπέδου όσο και πλήρη πρόσβαση στα εσωτερικά. | Διαφορά με το PitmasterΤο Pitmaster εκτελείται μέσα στη διεργασία PHP και οι βασικές λειτουργίες δεν καλούν το git μέσω κελύφους. Το CLI του αντικατοπτρίζει μόνο ένα υποσύνολο των εντολών git. |
| czproject/git-php | Κατάλληλο γιαΈνα συμπαγές PHP API για init, clone, commit, merge, branches, tags και remotes. Εκτελείται σε PHP 8.0 ή νεότερη έκδοση και χρησιμοποιεί το εγκατεστημένο πρόγραμμα-πελάτη git. | Διαφορά με το PitmasterΤο Pitmaster δεν χρειάζεται πρόγραμμα-πελάτη git για τις βασικές λειτουργίες, επειδή διαβάζει και γράφει τα ίδια τα αντικείμενα, τα αρχεία pack και το ευρετήριο. Απαιτεί PHP 8.2 ή νεότερη έκδοση. |
| gitonomy/gitlib | Κατάλληλο γιαΠρόσβαση σε αποθετήρια από PHP 8.4 ή νεότερη έκδοση χωρίς να χρειάζεται μεταγλώττιση. Λειτουργεί κάνοντας κλήσεις κελύφους στο git. | Διαφορά με το PitmasterΤο Pitmaster δεν κάνει κλήσεις κελύφους για τις βασικές λειτουργίες, ενώ ένας χειριστής χωρίς διεργασίες απενεργοποιεί τα μέρη που θα εκκινούσαν μια διεργασία. |
| libgit2 | Κατάλληλο γιαΜια φορητή υλοποίηση σε C των βασικών μεθόδων του Git ως συνδέσιμη βιβλιοθήκη, με συνδέσεις για Ruby, .NET, Python, Node.js, Rust και άλλα. | Διαφορά με το PitmasterΤο Pitmaster είναι απλό PHP εγκατεστημένο με Composer, χωρίς μεταγλωττισμένη βιβλιοθήκη ή FFI. Εισάγει 63 από τα σενάρια oracle του από τους πόρους δοκιμών του libgit2. |
Πηγές, επιλεγμένο
Ερωτήσεις και απαντήσεις
Σύντομες απαντήσεις από την τεκμηρίωση του Pitmaster.
Όχι. Οι βασικές λειτουργίες αποθετηρίων δεν χρησιμοποιούν το δυαδικό αρχείο git ή FFI. Τα αντικείμενα, οι αναφορές, τα αρχεία pack, το ευρετήριο και το έξυπνο HTTP διαχειρίζονται στο PHP.
Ναι. Περάστε Pitmaster::processFreeOptions() ή ['processes' => false] κατά το άνοιγμα του αποθετηρίου. Έτσι απενεργοποιούνται τα hooks, το clone, το fetch, το push και η μεταφορά διεργασιών SSH, ενώ οι τοπικές αναγνώσεις και εγγραφές παραμένουν διαθέσιμες.
Ναι, τα hooks είναι ενεργοποιημένα από προεπιλογή και εκτελούνται μέσω του proc_open(). Περάστε ['hooks' => false] στο Pitmaster::open(), Pitmaster::init() ή Pitmaster::clone() για να παραλείψετε τα σενάρια στο .git/hooks για αυτόν τον χειριστή.
Τα Pitmaster::clone(), fetch() και push() χρησιμοποιούν το SSH για διευθύνσεις URL SSH και το έξυπνο HTTP στις άλλες περιπτώσεις, ενώ τα clone και fetch καταφεύγουν στο απλό HTTP αν αποτύχει η έξυπνη ανταλλαγή. Το SSH χρησιμοποιεί την επέκταση ssh2 όταν είναι φορτωμένη και, διαφορετικά, το δυαδικό αρχείο ssh του συστήματος.
Ναι. Περάστε 'sha256' ως δεύτερο όρισμα στο Pitmaster::init() ή εκτελέστε init με --object-format=sha256. Τα αντικείμενα θα χρησιμοποιούν κατακερματισμούς 64 χαρακτήρων.
Όχι. Αντικατοπτρίζει ένα υποσύνολο των εντολών git, όπως log, status, diff, commit, merge, blame και grep. Τα clone, fetch και push είναι διαθέσιμα μόνο μέσω του PHP API.
Ξεκινήστε με τον οδηγό γρήγορης εκκίνησης για να ανοίξετε το πρώτο σας αποθετήριο από PHP και, στη συνέχεια, χρησιμοποιήστε τις αναφορές API και CLI για τα υπόλοιπα.