Pāriet uz saturu

Darba sākšana

Instalēšana

Instalējiet Pitmaster, izmantojot Composer:

Apvalks
composer require pitmaster/pitmaster

Prasības

  • PHP 8.2+ ar tikai lasāmām klasēm, uzskaitījumiem un konstruktora parametru veicināšanu
  • ext-zlib objektu saspiešanai/atspiešanai (iebūvēts lielākajā daļā instalāciju)
  • ext-json darbību stāvokļa failiem un Git LFS API datu kopām
  • ext-mbstring, deklarēts composer.json, tāpēc Composer tas ir nepieciešams instalēšanas laikā
  • ext-ctype jaucējvērtību validēšanai (iespējots lielākajā daļā PHP būvējumu, bet nav deklarēts composer.json)

Repozitorija pamatdarbībām nav nepieciešams git binārais fails, FFI vai ārējie palīgrīki. Izvēles funkcijām ir papildu izpildlaika prasības: āķu izpilde izmanto proc_open(), un SSH transports izmanto ext-ssh2, ja tas ir ielādēts, bet citādi palaiž sistēmas ssh bināro failu ar proc_open() palīdzību.

Atvērt esošu repozitoriju

PHP
use Pitmaster\Pitmaster;

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

Tas atver repozitoriju norādītajā ceļā. Pitmaster atrod direktoriju .git (vai atrisina failu .git saistītām darba kokām) un inicializē objektu datubāzi, atsauču datubāzi un konfigurāciju.

open(), init() un clone() kā pēdējo argumentu pieņem opciju masīvu:

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

Āķi tiek palaisti pēc noklusējuma. Pitmaster::processFreeOptions() atgriež ['processes' => false, 'hooks' => false]; lokālā lasīšana un rakstīšana ar šādu objektu turpina darboties.

Pārbaudīt, vai ceļš ir repozitorijs

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

Inicializēt jaunu repozitoriju

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

Tiek izveidota .git direktoriju struktūra ar objektiem, atsaucēm, HEAD (kas norāda uz refs/heads/main) un noklusējuma konfigurāciju.

Lai izveidotu SHA-256 repozitoriju, kā otro argumentu norādiet objektu formātu:

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

Objektu ID šajā repozitorijā ir 64 heksadecimālās rakstzīmes, un konfigurācijā ir norādīts extensions.objectformat = sha256. Vēlāk atvērtie repozitoriji formātu nolasa no šī konfigurācijas ieraksta.

Nolasīt HEAD commit

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

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

Metode head() atrisina HEAD (sekojot simboliskajām atsaucēm) un atgriež objektu Commit.

Uzskaitīt atzarus un tagus

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

Pārlūkot commit vēsturi

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

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

Varat arī sākt no konkrēta commit:

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

Pārbaudīt darba koka statusu

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

Pievienot failus indeksēšanai un izveidot 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";

Autora vārds un e-pasts tiek noteikts šādā secībā: vides mainīgie PITMASTER_AUTHOR_NAME / PITMASTER_AUTHOR_EMAIL, vides mainīgie GIT_AUTHOR_NAME / GIT_AUTHOR_EMAIL, konstantes PITMASTER_AUTHOR_NAME / PITMASTER_AUTHOR_EMAIL, paša repozitorija .git/config (user.name un user.email) un visbeidzot Pitmaster <pitmaster@localhost>. Tiek lasīts tikai repozitorija konfigurācijas fails (un tajā iekļautie faili), nevis ~/.gitconfig. Commit veicējs tiek noteikts tādā pašā veidā, izmantojot *_COMMITTER_* nosaukumus, un, ja tie nav norādīti, tiek izmantotas autora konstantes.

Aprēķināt atšķirības

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

Klonēt attālinātu repozitoriju

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

Tiek atklātas atsauces, izgūts pakotnes fails, iestatīti attālināto atzaru izsekošanas atzari un pārbaudīts noklusējuma atzars. HTTP(S) URL izmanto viedo HTTP un, ja tas neizdodas, pārslēdzas uz vienkāršo HTTP; SSH URL izmanto SSH transportu. Seklai klonēšanai kā trešo argumentu norādiet dziļumu: Pitmaster::clone($url, $path, 1).

Nolasīt jebkuru objektu pēc jaucējvērtības

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

Konfigurācija

Pitmaster ievēro repozitorija .git/config autora informācijai un attālināto repozitoriju URL. Varat arī iestatīt globālās noklusējuma vērtības ar konstantēm PHP, kas definētas pirms Pitmaster izpildes:

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');
Konstante Noklusējuma vērtība Ietekme
PITMASTER_AUTHOR_NAME, PITMASTER_AUTHOR_EMAIL none Autora identitāte (skatiet secību iepriekš)
PITMASTER_COMMITTER_NAME, PITMASTER_COMMITTER_EMAIL autora vērtības Commit veicēja identitāte
PITMASTER_HTTP_TIMEOUT 30 Viedā HTTP taimauts sekundēs (vesels skaitlis)
PITMASTER_MAX_DELTA_CHAIN 50 Maksimālais delta ķēdes dziļums, nolasot pakotnes (vesels skaitlis)
PITMASTER_OBJECT_CACHE_ENTRIES 1024 Objektu skaits atmiņā esošajā objektu kešatmiņā
PITMASTER_OBJECT_CACHE_BYTES 16M Objektu kešatmiņas baitu ierobežojums
PITMASTER_PACK_RESOLVED_CACHE_ENTRIES 4096 Katrā pakotnē kešoto atrisināto delta objektu skaits
PITMASTER_PACK_RESOLVED_CACHE_BYTES 32M Šīs pakotnes kešatmiņas baitu ierobežojums
PITMASTER_MAX_PACK_MEMORY none Vecāks nosaukums pakotnes kešatmiņas baitu ierobežojumam; izmantots tikai tad, ja PITMASTER_PACK_RESOLVED_CACHE_BYTES nav definēts

Baitu vērtībām pieņem veselu skaitli vai virkni ar sufiksu k, m vai g ('256M'). Nederīgas vērtības aizstāj noklusējuma vērtība.

Vides mainīgie aizstāj identitātes konstantes: PITMASTER_AUTHOR_NAME, PITMASTER_AUTHOR_EMAIL, PITMASTER_AUTHOR_DATE, to PITMASTER_COMMITTER_* ekvivalenti un paša git mainīgie GIT_AUTHOR_* un GIT_COMMITTER_*. SSH transports nolasa PITMASTER_SSH_* mainīgos, kas aprakstīti sadaļā Protokoli.

Jaucējalgoritmam nav konstantes. Objektu formātu izvēlas, izveidojot repozitoriju (Pitmaster::init($path, 'sha256') vai init --object-format=sha256 sistēmā CLI), un pēc tam nolasa no repozitorija konfigurācijas.