Liigu sisu juurde

Alustamine

Paigaldamine

Installige Pitmaster käsuga Composer:

Shell
composer require pitmaster/pitmaster

Nõuded

  • PHP 8.2+ koos kirjutuskaitstud klasside, enumite ja konstruktoris tehtava atribuutide määramisega
  • ext-zlib objektide tihendamiseks ja lahtipakkimiseks (enamikus paigaldustes sisseehitatud)
  • ext-json toiminguoleku failide ja Git LFS API koormiste jaoks
  • ext-mbstring, deklareeritud failis composer.json, seega vajab Composer seda installimise ajal
  • ext-ctype räsi valideerimiseks (enamikus PHP järgudes lubatud, kuid failis composer.json deklareerimata)

Põhihoidla toimingud ei vaja binaarfaili git, FFI-d ega väliseid abivahendeid. Valikulistel funktsioonidel on täiendavad käitusaja nõuded: hook’ide käivitamine kasutab proc_open(), transport SSH kasutab laadimise korral ext-ssh2-t ja muul juhul käivitab süsteemi binaarfaili ssh käsu proc_open() kaudu.

Olemasoleva hoidla avamine

PHP
use Pitmaster\Pitmaster;

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

See avab hoidla antud asukohas. Pitmaster leiab kataloogi .git (või lahendab seotud tööpuude korral faili .git) ning lähtestab objektide andmebaasi, viiteandmebaasi ja konfiguratsiooni.

open(), init() ja clone() aktsepteerivad viimase argumendina valikute massiivi:

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());

Hook’id käivitatakse vaikimisi. Pitmaster::processFreeOptions() tagastab ['processes' => false, 'hooks' => false]; kohalik lugemine ja kirjutamine toimivad sellise käitleja korral edasi.

Kontrollimine, kas asukoht on hoidla

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

Uue hoidla lähtestamine

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

See loob kataloogistruktuuri .git, mis sisaldab objekte, viiteid, HEAD-i (osutab väärtusele refs/heads/main) ja vaikekonfiguratsiooni.

SHA-256 hoidla loomiseks andke teise argumendina objektivorming:

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

Selle hoidla objektitunnused koosnevad 64 kuueteistkümnendmärgist ja konfiguratsioonis on kirjas extensions.objectformat = sha256. Hiljem avatud hoidlad loevad vormingu konfiguratsioonikirjest.

HEAD-commit’i lugemine

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

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

Meetod head() lahendab HEAD-i (järgides sümboolseid viiteid) ja tagastab objekti Commit.

Harude ja siltide loetlemine

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']

Commit-ajaloo läbimine

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

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

Võite alustada ka kindlast commit’ist:

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

Tööpuidu oleku kontrollimine

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";
    }
}

Failide valikusse lisamine ja commit’i tegemine

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";

Autori nimi ja e-posti aadress lahendatakse järgmises järjekorras: keskkonnamuutujad PITMASTER_AUTHOR_NAME / PITMASTER_AUTHOR_EMAIL, keskkonnamuutujad GIT_AUTHOR_NAME / GIT_AUTHOR_EMAIL, konstandid PITMASTER_AUTHOR_NAME / PITMASTER_AUTHOR_EMAIL, hoidla enda .git/config (user.name ja user.email) ning viimaks Pitmaster <pitmaster@localhost>. Loetakse ainult hoidla konfiguratsioonifaili (ja faile, mida see kaasab), mitte ~/.gitconfig. Commit’i tegija lahendatakse samamoodi nimede *_COMMITTER_* alusel ja vaikeväärtusena kasutatakse autori konstante.

Erinevuste arvutamine

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();

Kaughoidla kloonimine

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

See tuvastab viited, hangib pakifaili, seadistab kaugjälgitavad harud ja lülitab välja vaikimisi haru. HTTP(S) URL-id kasutavad nutikat HTTP-i ja lähevad vajaduse korral üle lihtsustatud HTTP-ile; SSH URL-id kasutavad SSH-transporti. Madala sügavusega kloonimiseks edastage sügavus kolmanda argumendina: Pitmaster::clone($url, $path, 1).

Loe suvalist objekti räsi järgi

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;
}

Konfiguratsioon

Pitmaster järgib autoriandmete ja kaug-URL-ide puhul hoidla .git/config-i. Saate määrata ka globaalsed vaikeväärtused konstantidega PHP, mis tuleb määratleda enne Pitmaster käivitamist:

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');
Konstant Vaikeväärtus Mõju
PITMASTER_AUTHOR_NAME, PITMASTER_AUTHOR_EMAIL puudub Autori identiteet (vt ülaltoodud järjekorda)
PITMASTER_COMMITTER_NAME, PITMASTER_COMMITTER_EMAIL autori väärtused Muutja identiteet
PITMASTER_HTTP_TIMEOUT 30 Nutika HTTP-i ajalõpp sekundites (täisarv)
PITMASTER_MAX_DELTA_CHAIN 50 Pakifailide lugemisel lubatud delta-ahela maksimaalne sügavus (täisarv)
PITMASTER_OBJECT_CACHE_ENTRIES 1024 Mälus hoitavate objektide arv objektivahemälus
PITMASTER_OBJECT_CACHE_BYTES 16M Objektivahemälu baitide eelarve
PITMASTER_PACK_RESOLVED_CACHE_ENTRIES 4096 Lahendatud deltaobjektide arv, mida iga pakifaili kohta vahemällu salvestatakse
PITMASTER_PACK_RESOLVED_CACHE_BYTES 32M Pakivahemälu baitide eelarve
PITMASTER_MAX_PACK_MEMORY puudub Pakivahemälu baitide eelarve varasem nimi, mida kasutatakse ainult siis, kui PITMASTER_PACK_RESOLVED_CACHE_BYTES pole määratletud

Baidiväärtus võib olla täisarv või string, mille lõpus on k, m või g ('256M'). Vigased väärtused asendatakse vaikeväärtusega.

Keskkonnamuutujad kirjutavad identiteedikonstandid üle: PITMASTER_AUTHOR_NAME, PITMASTER_AUTHOR_EMAIL, PITMASTER_AUTHOR_DATE, nende PITMASTER_COMMITTER_*-vasted ning giti enda muutujad GIT_AUTHOR_* ja GIT_COMMITTER_*. Transport SSH loeb muutujaid PITMASTER_SSH_*, mida kirjeldatakse jaotises Protokollid.

Räsialgoritmi jaoks konstanti pole. Objektivorming valitakse hoidla loomisel (Pitmaster::init($path, 'sha256') või init --object-format=sha256 väärtusega CLI) ja loetakse seejärel hoidla konfiguratsioonist.