PHP API
Pitmaster\Pitmaster
Klase Pitmaster\Pitmaster ir statisks sākumpunkts. Tā nodrošina rūpnīcas metodes repozitoriju atvēršanai, izveidei un klonēšanai, kā arī noteikšanas palīgmetodes.
use Pitmaster\Pitmaster;
open
public static function open(string $path, array $options = []): Repository
Atveriet esošu repozitoriju šeit: $path. Ceļam jābūt darba koka saknei (kurā atrodas .git/). Tiek atbalstīti arī saistīti darba koki (kuros .git ir fails ar gitdir: <path>) un tukši repozitoriji (kuros $path ir pati .git direktorija).
$options pieņem divas Būla vērtības, kuru noklusējums ir true:
hooks: palaist.git/hooksskriptus. Lai tos izlaistu šim apstrādes objektam, norādietfalse.processes: atļaut darbības, kas palaiž procesu vai atver tīkla transportu. Lai atspējotu āķus, fsmonitor āķi, klonēšanu, izgūšanu, nosūtīšanu un SSH procesa transportu, norādietfalse. Lokālā lasīšana un rakstīšana joprojām darbojas.
Ja ceļš nav git repozitorijs, tiek izraisīts InvalidArgumentException.
$repo = Pitmaster::open('/home/user/project');
$repo = Pitmaster::open('/home/user/project', ['hooks' => false]);
$repo = Pitmaster::open('/home/user/project', Pitmaster::processFreeOptions());
init
public static function init(string $path, string $objectFormat = 'sha1', array $options = []): Repository
Inicializē jaunu repozitoriju vietā $path. Izveido .git direktoriju struktūru ar objects/, refs/heads/, refs/tags/, hooks/, info/, HEAD (kas norāda uz refs/heads/main) un noklusējuma config.
$objectFormat ir 'sha1' vai 'sha256'. SHA-256 repozitorijam konfigurācijā tiek iestatīti repositoryformatversion = 1 un extensions.objectformat = sha256. Jebkura cita vērtība izraisa InvalidArgumentException. $options pieņem tos pašus atslēgas parametrus kā open().
Izraisa RuntimeException, ja norādītajā ceļā jau pastāv repozitorijs.
$repo = Pitmaster::init('/home/user/new-project');
$repo = Pitmaster::init('/home/user/sha256-project', 'sha256');
clone
public static function clone(string $url, string $path, ?int $depth = null, array $options = []): Repository
Klonē attālo repozitoriju. Inicializē jaunu repozitoriju, atrod attālās atsauces, lejupielādē pakotnes failu, iestata attālās izsekošanas zarus un izveido darba koka saturu. SSH URL (ssh://... vai user@host:path) izmanto SSH transportu; pārējie URL izmanto viedo HTTP un, ja viedā apmaiņa neizdodas, pāriet uz vienkāršo HTTP. Seklai klonēšanai nododiet $depth.
Izraisa RuntimeException, ja $options['processes'] ir false. Ja klonēšana neizdodas un $path iepriekš nepastāvēja, daļēji izveidotā direktorija tiek dzēsta.
$repo = Pitmaster::clone('https://github.com/user/repo.git', '/tmp/repo');
$repo = Pitmaster::clone('https://github.com/user/repo.git', '/tmp/shallow', 1);
$repo = Pitmaster::clone('https://github.com/user/repo.git', '/tmp/repo', null, ['hooks' => false]);
processFreeOptions
public static function processFreeOptions(): array
Atgriež ['processes' => false, 'hooks' => false] izpildvidēm, kurās nedrīkst palaist resursdatora procesus. Nododiet to funkcijai open() vai init().
isRepository
public static function isRepository(string $path): bool
Pārbauda, vai ceļš ir git repozitorijs. Atgriež true parastiem repozitorijiem (direktorija .git/), saistītām darba koka kopijām (fails .git) un tukšiem repozitorijiem (ja ir fails HEAD).
if (Pitmaster::isRepository('/path/to/check')) {
// It's a git repo
}
isWorktree
public static function isWorktree(string $path): bool
Pārbauda, vai ceļš ir saistīta darba koka kopija (nevis galvenais repozitorijs). Atgriež true tikai tad, ja .git ir fails, kurā ir atsauce gitdir:.
if (Pitmaster::isWorktree('/path/to/worktree')) {
// It's a linked worktree
}
commonGitDir
public static function commonGitDir(string $path): ?string
Atrod kopīgo git direktoriju no jebkura izrakstījuma ceļa. Parastiem repozitorijiem tas ir direktorija .git. Saistītām darba koka kopijām tas ir koplietotais git direktorijs, kurā atrodas objekti, konfigurācija un packed-refs. Atgriež null, ja ceļš nav repozitorijs.
$common = Pitmaster::commonGitDir('/path/to/worktree');
// '/path/to/main-repo/.git'
Pitmaster\Repository
Klase Pitmaster\Repository ir galvenais interfeiss visām git darbībām. Iegūstiet tās instanci, izmantojot Pitmaster::open(), Pitmaster::init() vai Pitmaster::clone().
use Pitmaster\Repository;
Ceļu piekļuves metodes
gitDir
public function gitDir(): string
Atgriež konkrētās darba koka kopijas git direktoriju. Parastiem repozitorijiem tas ir .git/. Saistītām darba koka kopijām tas ir .git/worktrees/<name>/.
commonGitDir
public function commonGitDir(): string
Atgriež kopīgo git direktoriju. Parastiem repozitorijiem tas ir tas pats, kas gitDir(). Saistītām darba koka kopijām tas ir galvenā repozitorija direktorija .git/ (kur atrodas objekti, konfigurācija un packed-refs).
workDir
public function workDir(): string
Atgriež darba koka saknes ceļu.
isLinkedWorktree
public function isLinkedWorktree(): bool
Atgriež true, ja šis repozitorija interfeiss ir saistīta darba koka kopija.
isBare, hooksEnabled, processesEnabled
public function isBare(): bool
public function hooksEnabled(): bool
public function processesEnabled(): bool
Norāda, vai repozitorijam nav darba koka un kuras no opcijām hooks / processes ir aktīvas šim interfeisam. hooksEnabled() ir false ikreiz, kad procesi ir atspējoti.
Objekti
readObject
public function readObject(string $hash): GitObject
Nolasa jebkuru objektu pēc tā pilnā heksadecimālā jaucējkoda (40 rakstzīmes vai 64 rakstzīmes SHA-256 repozitorijā). Saīsināti jaucējkodi netiek pieņemti. Atgriež Blob, Tree, Commit vai Tag instanci. Vispirms meklē atsevišķos objektus, pēc tam pakotņu failos.
Izraisa ObjectNotFoundException, ja jaucējkods nav atrasts.
$object = $repo->readObject('a1b2c3d4e5f6...');
writeObject
public function writeObject(GitObject $object): ObjectId
Ieraksta objektu atsevišķo objektu krātuvē. Atgriež aprēķināto ObjectId.
use Pitmaster\Object\Blob;
$blob = Blob::fromContent('Hello, world!');
$id = $repo->writeObject($blob);
catFile
public function catFile(string $hash): string
Atgriež objekta neapstrādāto saturu; tas atbilst git cat-file -p.
echo $repo->catFile('a1b2c3d4...');
objectExists
public function objectExists(string $hash): bool
Pārbauda, vai repozitorijā pastāv objekts (atsevišķi vai pakotnē).
listObjects
public function listObjects(): array
Uzskaita visus repozitorija objektu jaucējkodus. Atgriež heksadecimālu virkņu masīvu.
Atsauces
head
public function head(): Commit
Atgriež pašreizējo HEAD commit. Izseko simboliskās atsauces (HEAD -> refs/heads/main -> commit jaucējkods).
Izraisa RuntimeException, ja HEAD nenorāda uz derīgu commit (e.g., tukšs repozitorijs).
branch
public function branch(?string $name = null): ?string
Bez argumentiem atgriež pašreizējā zara nosaukumu (e.g., 'main') vai null, ja HEAD ir atvienots.
Ar zara nosaukumu to atrisina līdz tā commit jaucējkoda heksadecimālajai virknei vai atgriež null, ja zars neeksistē.
$current = $repo->branch(); // 'main'
$hash = $repo->branch('feature'); // 'abc123...' or null
branches
public function branches(): array
Atgriež sakārtotu visu zaru nosaukumu masīvu (bez prefiksa refs/heads/).
$branches = $repo->branches();
// ['bugfix/typo', 'feature/login', 'main']
tags
public function tags(): array
Atgriež sakārtotu visu tagu nosaukumu masīvu (bez prefiksa refs/tags/).
resolve
public function resolve(string $revision): ObjectId
Atrisina redakcijas izteiksmi līdz ObjectId. Atbalstītie formāti:
- Pilni heksadecimālie jaucējkodi (40 rakstzīmes vai 64 rakstzīmes priekš SHA-256). Saīsināti jaucējkodi, piemēram,
abc1234, netiek atrisināti. HEAD- Zaru nosaukumi (
main,feature/login) - Tagu nosaukumi (
v1.0.0) - Pilni atsauču ceļi (
refs/heads/main) - Redakciju izteiksmes (
HEAD~3,main^2)
Izraisa RuntimeException, ja redakciju neizdodas atrisināt.
$id = $repo->resolve('HEAD~3');
$id = $repo->resolve('v1.0.0');
$id = $repo->resolve('feature/login');
allRefs
public function allRefs(): array
Atgriež visas atsauces kā asociatīvu masīvu, kurā atsauces nosaukumi atbilst heksadecimāliem jaucējkodiem.
$refs = $repo->allRefs();
// ['refs/heads/main' => 'abc123...', 'refs/tags/v1.0.0' => 'def456...']
updateRef
public function updateRef(string $name, ObjectId $target): void
Atjaunina atsauci, lai tā norādītu uz jaunu mērķi.
$repo->updateRef('refs/heads/main', $commitId);
createBranch
public function createBranch(string $name, ?ObjectId $from = null): void
Izveido jaunu zaru. Ja $from ir null, atzarojas no pašreizējā HEAD.
$repo->createBranch('feature/new-thing');
$repo->createBranch('hotfix', $repo->resolve('v1.0.0'));
deleteBranch
public function deleteBranch(string $name): void
Dzēš zaru pēc nosaukuma. Izraisa RuntimeException, ja zars ir izrakstīts vai neeksistē. Atšķirībā no git branch -d šī metode nepārbauda, vai zars ir sapludināts.
$repo->deleteBranch('feature/old');
createLightweightTag
public function createLightweightTag(string $name, ?ObjectId $target = null): void
Izveido vieglu tagu. Ja $target ir null, tagu pievieno tieši pašreizējam HEAD.
$repo->createLightweightTag('v2.0.0');
$repo->createLightweightTag('hotfix-start', $repo->resolve('main~2'));
createTag
public function createTag(string $name, string $message, ?ObjectId $target = null, ?string $tagger = null): ObjectId
Izveido anotētu tagu. Ja $target ir null, tagu pievieno pašreizējam HEAD. Atgriež taga objekta ObjectId.
$tagId = $repo->createTag('v2.0.0', 'Release version 2.0.0');
deleteTag
public function deleteTag(string $name): void
Dzēš tagu pēc nosaukuma.
$repo->deleteTag('v1.0.0');
packRefs
public function packRefs(): void
Pārraksta koplietoto failu packed-refs no pašreizējās atsevišķo atsauču kopas un dzēš atbilstošās koplietotās atsevišķās atsauces. Saistītām darba koka kopijām raksta kopīgajā git direktorijā.
$repo->packRefs();
defaultBranch
public function defaultBranch(): string
Nosaka repozitorija noklusējuma zaru. Vispirms pārbauda attālo HEAD simbolisko atsauci, pēc tam lokālo HEAD un, ja vajadzīgs, izmanto main vai master.
isBranchMerged
public function isBranchMerged(string $branch, ?string $target = null): bool
Pārbauda, vai zars ir pilnībā sapludināts citā zarā (pēc noklusējuma — noklusējuma zarā).
if ($repo->isBranchMerged('feature/done')) {
$repo->deleteBranch('feature/done');
}
checkout
public function checkout(string $target): void
Pārslēdz zarus vai atvieno HEAD. Atjaunina HEAD, indeksu un darba koku. $target var būt zara nosaukums, tags, pilns jaucējkods vai redakcijas izteiksme; ja tā nav zars, HEAD tiek atvienots.
Izraisa RuntimeException, ja ceļā, kas atšķiras starp pašreizējo un mērķa koku, atrodas lokālas izmaiņas (indeksētas vai neindeksētas) vai nesekots fails.
Neapstiprinātās izmaiņas citos izsekotos failos netiek pārnestas: indekss un darba koks tiek izveidots no jauna no mērķa koka, tāpēc izmaiņas failos, kas abās pusēs ir identiski, tiek zaudētas, lai gan git tās saglabātu (pārslēgšana#2). Vispirms apstipriniet vai noglabājiet izmaiņas. merge(), cherryPick(), revert(), rebase() un bisekcijas metodes tādā pašā veidā izveido darba koku no jauna.
$repo->checkout('feature/login');
$repo->checkout($repo->resolve('v1.0.0')->hex); // Detached HEAD
Indekss
index
public function index(): Index
Nolasa un atgriež pašreizējo indeksu (sagatavošanas apgabalu) no .git/index.
add
public function add(string ...$paths): void
Pievieno failus sagatavošanai. Nolasa katru failu no darba koka, izveido blob objektu un atjaunina indeksu. Katram argumentam jābūt faila (vai simboliskās saites) ceļam attiecībā pret darba koka sakni; direktorijas un glob izteiksmes netiek izvērstas, bet neesošs fails izraisa RuntimeException.
$repo->add('src/Feature.php', 'tests/FeatureTest.php');
remove
public function remove(string ...$paths): void
public function removeCached(string ...$paths): void
Noņem izsekotos ceļus gan no indeksa, gan darba koka. Argumentu sarakstā atbalsta --cached un -r / --recursive, lai nodrošinātu Git tipa darbību.
$repo->remove('old-file.txt');
$repo->remove('-r', 'src');
$repo->remove('--cached', 'old-file.txt');
$repo->removeCached('old-file.txt');
mv
public function mv(string $source, string $destination): void
Pārvieto vai pārdēvē failu gan darba kokā, gan indeksā.
$repo->mv('old-name.php', 'new-name.php');
Commit
commit
public function commit(?string $message = null, ?string $author = null): ObjectId
Izveido commit no pašreizējā indeksa. Izveido koka hierarhiju no indeksa ierakstiem, izveido commit objektu ar HEAD kā vecāku (ja tāds ir) un atjaunina HEAD. Atgriež jaunā commit ObjectId.
$message var būt null tikai tad, ja sapludināšana, cherry-pick, atgriešana vai pārveidošana ir apturēta konfliktu dēļ; tad tiek izmantots sagatavotais ziņojums. Pretējā gadījumā null ziņojums izraisa RuntimeException('Commit message required'). Commit arī izraisa kļūdu, ja indeksā ir nesapludināti ceļi, ja indeksā nav ierakstu repozitorijā bez commit vai ja koks nav mainījies kopš HEAD.
Parametrs $author ir pilna git autora virkne (Name <email> timestamp timezone). Ja tas ir null, vērtība tiek iegūta no vides mainīgajiem, konstantēm un .git/config tādā secībā, kā aprakstīts sadaļā Darba sākšana.
$id = $repo->commit('Fix null pointer bug');
show
public function show(string $revision): array
Parāda commit un tā atšķirības salīdzinājumā ar pirmo vecāku. Ja redakcija atrisinās līdz anotētam tagam, atgrieztajā vērtībā ir arī ['tag' => Tag], un commit ir atzīmētais mērķa commit.
$result = $repo->show('HEAD');
echo $result['commit']->message;
foreach ($result['diff'] as $diff) {
echo $diff->format();
}
reset
public function reset(string $revision, string $mode = 'mixed'): void
Atiestata HEAD uz commit. Režīmi:
'soft': pārvieto tikai HEAD'mixed': pārvieto HEAD un atiestata indeksu (noklusējums)'hard': pārvieto HEAD, atiestata indeksu un darba koku
$repo->reset('HEAD~1', 'soft');
$repo->reset('main', 'hard');
restore
public function restore(string $path, ?string $source = null, bool $staged = false, bool $worktree = false): void
Atjauno ceļu no indeksa vai norādītas avota redakcijas. Ja nav iestatīts neviens karodziņš, Pitmaster atjauno darba koku no indeksa (vai no $source, ja tas norādīts). staged: true atjauno indeksu no HEAD (vai $source), darba koku atstājot nemainītu; lai atjaunotu abus, nododiet staged: true, worktree: true.
$repo->restore('src/File.php'); // Worktree from index
$repo->restore('src/File.php', staged: true); // Index from HEAD
$repo->restore('src/File.php', 'HEAD~1'); // Worktree from another commit
$repo->restore('src/File.php', 'HEAD~1', staged: true, worktree: true); // Index + worktree from another commit
cherryPick
public function cherryPick(string $revision): ObjectId
public function cherryPickContinue(): ObjectId
public function cherryPickAbort(): void
Piemēro commit kā jaunu commit pašreizējā zarā, saglabājot sākotnējo autoru. Ja konfliktu dēļ darbība tiek apturēta, atrisiniet konfliktus, pievienojiet ceļus sagatavošanai un pēc tam izsauciet cherryPickContinue() vai cherryPickAbort().
$newId = $repo->cherryPick('feature~2');
// After resolving conflicts:
$repo->add('src/File.php');
$repo->cherryPickContinue();
revert
public function revert(string $revision): ObjectId
public function revertContinue(): ObjectId
public function revertAbort(): void
Izveido commit, kas atceļ citu commit. Ja konfliktu dēļ atcelšana tiek apturēta, atrisiniet konfliktus, pievienojiet ceļus sagatavošanai un pēc tam izsauciet revertContinue() vai revertAbort().
$revertId = $repo->revert('HEAD~1');
// After resolving conflicts:
$repo->add('src/File.php');
$repo->revertContinue();
rebase
public function rebase(string $onto): array
public function rebaseContinue(): array
public function rebaseAbort(): void
public function rebaseSkip(): array
Pārveido pašreizējo zaru, novietojot to virs citas redakcijas. Pitmaster pašlaik atbalsta lineāru pārveidošanu ar Git formas apturēšanas stāvokli konfliktu gadījumā, kā arī turpināšanu, pārtraukšanu un izlaišanu. HEAD ir jānorāda uz zaru.
rebase(), rebaseContinue() un rebaseSkip() atgriež ['success' => bool, 'commits' => int, 'conflicts' => list<string>]: vai pārveidošana ir pabeigta, cik commit ir piemēroti un kuri ceļi izraisīja konfliktu, ja darbība tika apturēta.
$result = $repo->rebase('main');
if (!$result['success']) {
// Resolve conflicts, then continue or skip/abort.
$repo->add('src/File.php');
$repo->rebaseContinue();
}
Statuss
status
public function status(): array
Aprēķina darba koka statusu. Atgriež objektu StatusEntry masīvu, kur katrā objektā ir:
path: faila ceļšindex: enumFileStatusizmaiņām no HEAD līdz indeksamworktree: enumFileStatusizmaiņām no indeksa līdz darba kokamorigPath,renameScore: iestatīti pārdēvētiem ierakstiem, citādinull
Nesekotiem failiem abās kolonnās ir FileStatus::Untracked. Ignorētie faili netiek uzrādīti.
foreach ($repo->status() as $entry) {
echo $entry->shortFormat() . "\n"; // "M src/File.php", "?? notes.txt"
}
statusPorcelainV2
public function statusPorcelainV2(): string
Statusa izvade mašīnlasāmā git porcelain v2 formātā.
echo $repo->statusPorcelainV2();
// 1 M. N... 000000 000000 000000 0000...0000 0000...0000 modified-file.txt
// ? untracked-file.txt
Atšķirības
diff
public function diff(?string $pathspec = null, string $algorithm = 'myers'): array
Salīdzina darba koku ar indeksu (nesagatavotās izmaiņas). Atgriež objektu DiffResult masīvu. $pathspec filtrē pēc viena precīza faila ceļa. $algorithm ir 'myers' (noklusējums), 'patience', 'histogram' vai 'minimal'; jebkura cita vērtība izraisa InvalidArgumentException.
$diffs = $repo->diff();
foreach ($diffs as $diff) {
echo $diff->format(); // Unified diff output
}
diffStaged
public function diffStaged(?string $pathspec = null, string $algorithm = 'myers'): array
Salīdzina indeksu ar HEAD (sagatavotās izmaiņas). Atgriež DiffResult[] un nosaka pārdēvēšanu starp dzēstajiem un pievienotajiem failiem.
Arguments $pathspec pašlaik tiek ignorēts, tāpēc tiek atgriezti visi sagatavotie faili. Pirms pirmā commit metode atgriež tukšu masīvu (darbība#5).
$staged = $repo->diffStaged();
diffTree
public function diffTree(ObjectId $a, ObjectId $b, string $algorithm = 'myers'): array
Salīdzina divus kokus pēc to ObjectId. Atgriež DiffResult[]. Nododiet koku ID, nevis commit ID: commit ID netiek nolasīts kā koks, tāpēc rezultāts ir tukšs.
$old = $repo->readObject($repo->resolve('HEAD~1')->hex);
$new = $repo->head();
$diffs = $repo->diffTree($old->tree, $new->tree);
Vēsture
log
public function log(int $limit = 50, ?ObjectId $from = null): array
Pārskata commit vēsturi, sākot ar jaunāko pēc iesniedzēja laika zīmoga. Atgriež Commit[]. Ja $from ir null, sāk no HEAD. Ja HEAD vēl nav commit, atgriež tukšu masīvu.
$commits = $repo->log(10);
logAll
public function logAll(int $limit = 50): array
Pārskata commit, kas sasniedzami no katras atsauces un HEAD, sākot ar jaunāko. Atgriež Commit[].
logOneline
public function logOneline(int $limit = 50, bool $all = false, ?string $path = null): array
Atgriež žurnāla rindas git log --oneline formātā (abc1234 Subject), sākot no HEAD, no visām atsaucēm ($all) vai filtrējot pēc ceļa.
logPath
public function logPath(string $path, int $limit = 50): array
Žurnāls, filtrēts pēc faila ceļa. Atgriež tikai tos commit, kuru atšķirības salīdzinājumā ar pirmo vecāku pievieno, maina, dzēš vai pārdēvē tieši šo failu. Direktoriju ceļi netiek ņemti vērā.
Tiek pārbaudīti tikai jaunākie 5 * $limit commit, tāpēc rezultātā var nebūt iekļauti vecāki commit, kas skar šo failu (darbība#7).
$commits = $repo->logPath('src/Repository.php', 20);
Sapludināšana
merge
public function merge(string $branch, string $strategy = 'recursive'): MergeResult
public function mergeOctopus(array $branches): MergeResult
public function mergeContinue(): ObjectId
public function mergeAbort(): void
Sapludina zaru (vai jebkuru redakciju) ar HEAD. Automātiski nosaka ātro pārtīšanu. Ja ātra pārtīšana nav iespējama, nosaka konfliktus koka līmenī un, ja konfliktu nav, izveido sapludināšanas commit. Konflikta gadījumā ieraksta indeksā un darba kokā sapludināšanas stāvokli Git formātā; atrisiniet konfliktus, pievienojiet ceļus sagatavošanai un pēc tam izsauciet mergeContinue() vai mergeAbort().
$strategy 'ours' reģistrē sapludināšanas commit, kas saglabā HEAD koku; jebkura cita vērtība izmanto noklusējuma rekursīvo sapludināšanu. mergeOctopus() sapludina divus vai vairākus zarus vienā commit. Ja kādā zarā ir konflikti, metode atgriež neveiksmīgu rezultātu, neierakstot sapludināšanas stāvokli un neveidojot commit.
Sapludinot zaru, kas jau ir ietverts HEAD, tiek izveidots vēl viens sapludināšanas commit, nevis paziņots “Already up to date” (darbība#6). Neapstiprinātās izmaiņas izsekotos failos tiek pārrakstītas, kā aprakstīts sadaļā checkout().
Atgriež MergeResult ar šādiem laukiem:
clean: vai sapludināšana izdevās bez konfliktiemcommitId: sapludināšanas commit ID (ja konfliktu nav)conflictPaths: konfliktējošo failu ceļu masīvs (ja ir konflikti)mergedContents: konfliktējošā ceļa un faila satura atbilstība, tostarp konfliktu marķieri (ja ir konflikti)
$result = $repo->merge('feature/login');
if ($result->clean) {
echo "Merged: {$result->commitId->hex}\n";
} else {
echo "Conflicts in: " . implode(', ', $result->conflictPaths) . "\n";
$repo->add('src/File.php');
$repo->mergeContinue();
}
mergeBase
public function mergeBase(ObjectId $a, ObjectId $b): ?ObjectId
Atrod divu commit sapludināšanas bāzi (zemāko kopīgo priekšteci). Atgriež null, ja kopīga priekšteča nav.
$base = $repo->mergeBase(
$repo->resolve('main'),
$repo->resolve('feature/login'),
);
Bisekcija
public function bisectStart(string $bad, string $good): ObjectId
public function bisectGood(?string $revision = null): ?ObjectId
public function bisectBad(?string $revision = null): ?ObjectId
public function bisectReset(): void
Ar bināro meklēšanu atrod commit, kurā ieviestas izmaiņas. bisectStart() reģistrē sliktās un labās redakcijas, izraksta pirmo kandidātu un atgriež to. bisectGood() un bisectBad() atzīmē pašreizējo HEAD (vai $revision), izraksta nākamo kandidātu un atgriež to. Kad palicis viens aizdomās turamais, attiecīgais commit tiek atgriezts un paliek kandidāts: tas ir pirmais sliktais commit. bisectReset() beidz sesiju un atgriežas pie zara vai commit, no kura tā sākās.
$candidate = $repo->bisectStart('HEAD', 'v1.0.0');
// test $candidate ...
$candidate = $repo->bisectBad();
$candidate = $repo->bisectGood();
$repo->bisectReset();
Tīkls
fetch
public function fetch(string $remote = 'origin', ?int $depth = null): void
Iegūst datus no attālā repozitorija. Lejupielādē jaunus objektus un atjaunina attālās izsekošanas atsauces. Nododiet $depth, lai padziļinātu vai ierobežotu seklu vēsturi.
fetch() un metodes push*() izraisa RuntimeException, ja interfeiss ir atvērts ar ['processes' => false].
$repo->fetch();
$repo->fetch('upstream');
push
public function push(string $remote = 'origin', ?string $branch = null): void
public function pushForceWithLease(string $remote = 'origin', ?string $branch = null, ?ObjectId $expected = null): void
public function pushAtomic(string $remote = 'origin', array $branches = []): void
public function pushMirror(string $remote = 'origin'): void
Nosūta pašreizējo zaru (vai norādītu zaru) uz attālo repozitoriju. Pieejamas piespiedu atjaunināšanas ar izsekošanas pārbaudi, atomiskas un spoguļošanas variācijas stingrākai vai plašākai atsauču atjaunināšanai.
$repo->push();
$repo->push('origin', 'feature/login');
$repo->pushForceWithLease('origin', 'main', $repo->resolve('refs/remotes/origin/main'));
$repo->pushAtomic('origin', ['main', 'release']);
$repo->pushMirror();
Darba koka kopijas
addWorktree
public function addWorktree(string $path, string $branch, ?ObjectId $from = null, ?string $name = null): Worktree
Pievieno saistītu darba koka kopiju. Izveido zaru, ja tāda nav, iestata darba koka metadatus un izveido darba koka failus. Nododiet $name, ja nepieciešama noteikta metadatu identifikatora daļa, kas atšķiras no izrakstījuma direktorijas pamatnosaukuma.
$wt = $repo->addWorktree('/tmp/review', 'feature/review');
$wt = $repo->addWorktree('/tmp/checkouts/review', 'feature/review', name: 'review-wt');
removeWorktree
public function removeWorktree(string $pathOrName, bool $force = false): void
Noņem saistītu darba koka kopiju. Izmantojiet $force = true, lai to noņemtu arī tad, ja tā ir bloķēta.
worktrees
public function worktrees(): array
Uzskaita visas darba koka kopijas (galveno un saistītās). Atgriež Worktree[].
foreach ($repo->worktrees() as $wt) {
echo "{$wt->path} [{$wt->branch}]\n";
}
Konfigurācija
config
public function config(): GitConfig
Piekļūst repozitorija git konfigurācijai. Nolasa un raksta konfigurācijas vērtības.
$config = $repo->config();
$name = $config->get('user.name');
$config->set('user.email', 'new@example.com');
Iekšējā piekļuve
Šīs metodes nodrošina piekļuvi iekšējiem komponentiem īpašiem lietošanas gadījumiem.
objectDatabase
public function objectDatabase(): ObjectDatabase
Piekļūst neapstrādāto objektu datubāzei (atsevišķo objektu un pakotņu krātuvēm).
refDatabase
public function refDatabase(): RefDatabase
Piekļūst neapstrādāto atsauču datubāzei (atsevišķām un pakotnē glabātām atsaucēm).
Zemāka līmeņa klases
Šīs klases neietver iesaiņojums Repository; tās tiek veidotas no tā iekšējiem komponentiem.
Pitmaster\Graph\Blame
public function blame(ObjectId $headId, string $path): array
Atgriež vienu ierakstu katrai $path rindai pozīcijā $headId: ['line' => int, 'hash' => string, 'author' => string, 'content' => string]. author ir pilna identitātes virkne (Name <email> timestamp timezone).
use Pitmaster\Graph\Blame;
$blame = new Blame($repo->objectDatabase());
foreach ($blame->blame($repo->resolve('HEAD'), 'src/File.php') as $line) {
echo substr($line['hash'], 0, 8) . " {$line['content']}\n";
}
Pitmaster\Graph\Grep
public function grep(ObjectId $treeId, string $pattern, string $prefix = '', array $options = []): array
Meklē koka blob objektos. Atgriež ['path' => string, 'line' => int, 'content' => string] katrai atrastajai rindai. Opcijas: regex (uztver rakstu kā PCRE rakstu) un ignore_case. Nederīga regulārā izteiksme izraisa InvalidArgumentException.
use Pitmaster\Graph\Grep;
$grep = new Grep($repo->objectDatabase());
$matches = $grep->grep($repo->head()->tree, 'TODO', '', ['ignore_case' => true]);
Pitmaster\Ref\Notes
public function get(ObjectId $commitId, string $notesRef = 'refs/notes/commits'): ?string
public function set(ObjectId $commitId, string $noteContent, string $notesRef = 'refs/notes/commits'): void
public function remove(ObjectId $commitId, string $notesRef = 'refs/notes/commits'): void
public function listAll(string $notesRef = 'refs/notes/commits'): array
public function merge(string $sourceRef, string $targetRef = 'refs/notes/commits'): void
Nolasa un raksta git piezīmes, kas glabātas zem piezīmju atsauces. listAll() atgriež commit jaucējkoda un piezīmes satura atbilstību.
use Pitmaster\Ref\Notes;
$notes = new Notes($repo->objectDatabase(), $repo->refDatabase());
$notes->set($repo->resolve('HEAD'), "Reviewed\n");
echo $notes->get($repo->resolve('HEAD'));