Siirry sisältöön

Aloitus

Asennus

Asenna Pitmaster komennolla Composer:

Shell
composer require pitmaster/pitmaster

Vaatimukset

  • PHP 8.2+ sekä readonly-luokat, enum-tyypit ja konstruktorin parametrien ylennys
  • ext-zlib objektien pakkaamiseen ja purkamiseen (sisältyy useimpiin asennuksiin)
  • ext-json toimintatilatiedostoihin ja Git LFS API -hyötykuormiin
  • ext-mbstring, ilmoitettu tiedostossa composer.json, joten Composer tarvitsee sen asennuksen yhteydessä
  • ext-ctype tiivisteiden vahvistamiseen (käytössä useimmissa PHP-koosteissa, mutta sitä ei ole ilmoitettu tiedostossa composer.json)

Tietovaraston ydintoiminnot eivät tarvitse git-binääritiedostoa, FFI:tä eivätkä ulkoisia apuohjelmia. Valinnaisilla ominaisuuksilla on lisävaatimuksia suoritusaikana: hookien suoritus käyttää proc_open():tä, ja SSH-siirto käyttää ext-ssh2:a, jos se on ladattuna; muussa tapauksessa se käynnistää järjestelmän ssh-binääritiedoston proc_open()n kautta.

Avaa olemassa oleva tietovarasto

PHP
use Pitmaster\Pitmaster;

$repo = Pitmaster::open('/path/to/project');

Tämä avaa tietovaraston annetussa polussa. Pitmaster paikantaa .git-hakemiston (tai ratkaisee linkitettyjen työpuiden .git-tiedoston) ja alustaa objektitietokannan, viitetietokannan ja asetukset.

open(), init() ja clone() hyväksyvät valinnaisten argumenttien taulukon viimeisenä argumenttinaan:

PHP
// Do not run .git/hooks scripts for this handle
$repo = Pitmaster::open('/path/to/project', ['hooks' => false]);

// Do not start any process: no hooks, no fsmonitor hook, no clone/fetch/push, no SSH
$repo = Pitmaster::open('/path/to/project', Pitmaster::processFreeOptions());

Hookit suoritetaan oletusarvoisesti. Pitmaster::processFreeOptions() palauttaa arvon ['processes' => false, 'hooks' => false]; paikallinen luku ja kirjoitus toimivat edelleen tällaisella kahvalla.

Tarkista, onko polku tietovarasto

PHP
if (Pitmaster::isRepository('/path/to/project')) {
    $repo = Pitmaster::open('/path/to/project');
}

Alusta uusi tietovarasto

PHP
$repo = Pitmaster::init('/path/to/new-project');

Tämä luo .git-hakemistorakenteen, jossa ovat objektit, viitteet, HEAD (osoittaa kohteeseen refs/heads/main) ja oletusasetukset.

Luo SHA-256-tietovarasto antamalla objektimuoto toisena argumenttina:

PHP
$repo = Pitmaster::init('/path/to/new-project', 'sha256');

Tietovaraston objektitunnukset ovat 64 heksadesimaalimerkkiä, ja asetuksiin kirjataan extensions.objectformat = sha256. Myöhemmin avatut tietovarastot saavat muodon tästä asetusmerkinnästä.

Lue HEAD-commit

PHP
$head = $repo->head();

echo "Commit: {$head->id->hex}\n";
echo "Author: {$head->author}\n";
echo "Message: {$head->message}\n";

Metodi head() ratkaisee HEADin (seuraten symbolisia viitteitä) ja palauttaa Commit-objektin.

Luettele haarat ja tagit

PHP
// All branch names
$branches = $repo->branches();
// ['main', 'feature/login', 'bugfix/typo']

// Current branch name (null if detached)
$current = $repo->branch();
// 'main'

// All tag names
$tags = $repo->tags();
// ['v1.0.0', 'v1.1.0']

Käy commit-historia läpi

PHP
// Last 20 commits from HEAD
$commits = $repo->log(20);

foreach ($commits as $commit) {
    echo substr($commit->id->hex, 0, 7) . " {$commit->message}\n";
}

Voit myös aloittaa tietystä commitista:

PHP
$from = $repo->resolve('feature/login');
$commits = $repo->log(10, $from);

Tarkista työpuun tila

PHP
use Pitmaster\Status\FileStatus;

$entries = $repo->status();

foreach ($entries as $entry) {
    if ($entry->index === FileStatus::Untracked) {
        echo "?? {$entry->path}\n";
    } elseif ($entry->index === FileStatus::Modified) {
        echo "M  {$entry->path}\n";
    } elseif ($entry->worktree === FileStatus::Modified) {
        echo " M {$entry->path}\n";
    }
}

Lisää tiedostoja indeksiin ja tee commit

PHP
// Stage specific files
$repo->add('src/Feature.php', 'tests/FeatureTest.php');

// Create a commit
$commitId = $repo->commit('Add new feature with tests');

echo "Created commit: {$commitId->hex}\n";

Tekijän nimi ja sähköposti ratkaistaan tässä järjestyksessä: ympäristömuuttujat PITMASTER_AUTHOR_NAME / PITMASTER_AUTHOR_EMAIL, ympäristömuuttujat GIT_AUTHOR_NAME / GIT_AUTHOR_EMAIL, vakiot PITMASTER_AUTHOR_NAME / PITMASTER_AUTHOR_EMAIL, tietovaraston oma .git/config (user.name ja user.email) ja lopuksi Pitmaster <pitmaster@localhost>. Luetaan vain tietovaraston asetustiedosto ja sen sisällyttämät tiedostot, ei tiedostoa ~/.gitconfig. Commitin tekijä ratkaistaan samalla tavalla *_COMMITTER_*-nimistä ja oletuksena käytetään tekijän vakioita.

Laske erot

PHP
// Unstaged changes (worktree vs index)
$diffs = $repo->diff();

foreach ($diffs as $diff) {
    echo $diff->format(); // Unified diff output
}

// Staged changes (index vs HEAD)
$staged = $repo->diffStaged();

Kloonaa etätietovarasto

PHP
$repo = Pitmaster::clone('https://github.com/user/repo.git', '/path/to/destination');

Tämä etsii viitteet, noutaa pakettitiedoston, määrittää etähakuhaarojen seurannan ja ottaa oletushaaran käyttöön. HTTP(S)-URL-osoitteet käyttävät älykästä HTTP-protokollaa ja vaihtavat tarvittaessa rajoitettuun HTTP-protokollaan; SSH-URL-osoitteet käyttävät SSH-siirtotapaa. Anna syvyys kolmantena argumenttina tehdäksesi matalan kloonin: Pitmaster::clone($url, $path, 1).

Lue objekti tiivisteen perusteella

PHP
$object = $repo->readObject($fullHash); // full 40-character (or 64 for SHA-256) hex hash

if ($object instanceof \Pitmaster\Object\Blob) {
    echo $object->content;
} elseif ($object instanceof \Pitmaster\Object\Commit) {
    echo $object->message;
}

Määritykset

Pitmaster noudattaa tekijätiedoissa ja etä-URL-osoitteissa tietovaraston .git/config-asetuksia. Voit myös määrittää globaalit oletukset PHP-vakioilla ennen kuin Pitmaster suoritetaan:

PHP
define('PITMASTER_AUTHOR_NAME', 'Your Name');
define('PITMASTER_AUTHOR_EMAIL', 'you@example.com');
define('PITMASTER_HTTP_TIMEOUT', 60);        // Seconds
define('PITMASTER_MAX_DELTA_CHAIN', 50);     // Max delta chain depth
define('PITMASTER_OBJECT_CACHE_BYTES', '64M');
Vakio Oletus Vaikutus
PITMASTER_AUTHOR_NAME, PITMASTER_AUTHOR_EMAIL ei mitään Tekijän tiedot (katso yllä oleva järjestys)
PITMASTER_COMMITTER_NAME, PITMASTER_COMMITTER_EMAIL tekijän arvot Commitin tekijän tiedot
PITMASTER_HTTP_TIMEOUT 30 Älykkään HTTP-protokollan aikakatkaisu sekunteina (kokonaisluku)
PITMASTER_MAX_DELTA_CHAIN 50 Paketteja luettaessa sallittu deltaketjun enimmäissyvyys (kokonaisluku)
PITMASTER_OBJECT_CACHE_ENTRIES 1024 Muistissa objektivälimuistissa säilytettävien objektien määrä
PITMASTER_OBJECT_CACHE_BYTES 16M Objektivälimuistin tavumääräraja
PITMASTER_PACK_RESOLVED_CACHE_ENTRIES 4096 Pakettikohtaiseen välimuistiin tallennettujen ratkaistujen deltaobjektien määrä
PITMASTER_PACK_RESOLVED_CACHE_BYTES 32M Pakettikohtaisen välimuistin tavumääräraja
PITMASTER_MAX_PACK_MEMORY ei mitään Vanhempi nimi pakettikohtaisen välimuistin tavumäärärajalle; käytetään vain, jos PITMASTER_PACK_RESOLVED_CACHE_BYTES ei ole määritetty

Tavuarvoksi käy kokonaisluku tai merkkijono, jonka lopussa on k, m tai g ('256M'). Virheellisten arvojen sijaan käytetään oletusarvoa.

Ympäristömuuttujat ohittavat identiteettivakiot: PITMASTER_AUTHOR_NAME, PITMASTER_AUTHOR_EMAIL, PITMASTER_AUTHOR_DATE, niitä vastaavat PITMASTER_COMMITTER_*-muuttujat sekä gitin omat muuttujat GIT_AUTHOR_* ja GIT_COMMITTER_*. SSH-siirto lukee muuttujat PITMASTER_SSH_*, jotka kuvataan kohdassa Protokollat.

Tiivistealgoritmille ei ole vakiota. Objektimuoto valitaan tietovarastoa luotaessa (Pitmaster::init($path, 'sha256') tai init --object-format=sha256 palvelussa CLI), ja sen jälkeen se luetaan tietovaraston asetuksista.