PHP API
Pitmaster\Pitmaster
A Pitmaster\Pitmaster osztály a statikus belépési pont. Gyári metódusokat biztosít tárolók megnyitásához, létrehozásához és klónozásához, továbbá felismerő segédfüggvényeket is kínál.
use Pitmaster\Pitmaster;
open
public static function open(string $path, array $options = []): Repository
Meglévő tároló megnyitása itt: $path. Az elérési útnak a munkafa gyökérkönyvtárára kell mutatnia (amely tartalmazza a .git/ elemet). Az összekapcsolt munkafák is támogatottak (ahol a .git egy gitdir: <path> értéket tartalmazó fájl), ahogy a bare tárolók is (ahol a $path maga a .git könyvtár).
A $options két logikai értéket fogad el, mindkettő alapértelmezése true:
hooks:.git/hooksszkriptek futtatása. Adja át afalseértéket a kihagyásukhoz ennél a fogantyúnál.processes: minden olyan művelet engedélyezése, amely folyamatot indít vagy hálózati átvitelt nyit. Adja át afalseértéket a hookok, az fsmonitor hook, a klónozás, a letöltés, a push és a SSH folyamatátvitel letiltásához. A helyi olvasás és írás továbbra is működik.
InvalidArgumentException kivételt dob, ha az elérési út nem git tároló.
$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
Új tároló inicializálása itt: $path. Létrehozza a .git könyvtárstruktúrát a következőkkel: objects/, refs/heads/, refs/tags/, hooks/, info/, HEAD (amely erre mutat: refs/heads/main), valamint egy alapértelmezett config.
A $objectFormat értéke 'sha1' vagy 'sha256' lehet. A SHA-256 tároló repositoryformatversion = 1 és extensions.objectformat = sha256 beállítást kap a konfigurációban. Minden más érték esetén InvalidArgumentException kivételt dob. A $options ugyanazokat a kulcsokat fogadja el, mint a open().
RuntimeException kivételt dob, ha az elérési úton már létezik tároló.
$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
Távoli tároló klónozása. Inicializál egy új tárolót, felderíti a távoli refeket, letölti a pack fájlt, beállítja a távoli követő ágakat, majd előállítja a munkafát. A SSH URL-ek (ssh://... vagy user@host:path) a SSH átvitelt használják; más URL-ek smart HTTP átvitelt használnak, és visszaváltanak dumb HTTP módra, ha a smart adatcsere sikertelen. Sekély klónozáshoz adja át a $depth értéket.
RuntimeException kivételt dob, ha a $options['processes'] értéke false. Ha a klónozás sikertelen, és a $path korábban nem létezett, a részben létrehozott könyvtárat eltávolítja.
$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
Olyan futtatókörnyezetekhez ['processes' => false, 'hooks' => false] értéket ad vissza, amelyek nem indíthatnak gazdagép-folyamatokat. Adja át a open() vagy a init() számára.
isRepository
public static function isRepository(string $path): bool
Ellenőrzi, hogy egy elérési út git tároló-e. true értéket ad vissza hagyományos tárolók esetén (.git/ könyvtár), összekapcsolt munkafák esetén (.git fájl), valamint bare tárolók esetén (a HEAD fájl jelen van).
if (Pitmaster::isRepository('/path/to/check')) {
// It's a git repo
}
isWorktree
public static function isWorktree(string $path): bool
Ellenőrzi, hogy egy elérési út összekapcsolt munkafára (nem a fő tárolóra) mutat-e. Csak akkor ad vissza true értéket, ha a .git egy gitdir: hivatkozást tartalmazó fájl.
if (Pitmaster::isWorktree('/path/to/worktree')) {
// It's a linked worktree
}
commonGitDir
public static function commonGitDir(string $path): ?string
Feloldja a közös git könyvtárat bármely checkout elérési útból. Hagyományos tárolóknál ez a .git könyvtár. Összekapcsolt munkafáknál ez a megosztott git könyvtár, amely az objektumokat, a konfigurációt és a packed-refs állományt tartalmazza. null értéket ad vissza, ha az elérési út nem tároló.
$common = Pitmaster::commonGitDir('/path/to/worktree');
// '/path/to/main-repo/.git'
Pitmaster\Repository
A Pitmaster\Repository osztály a fő kezelőfelület minden git művelethez. Példányt a Pitmaster::open(), a Pitmaster::init() vagy a Pitmaster::clone() segítségével szerezhet.
use Pitmaster\Repository;
Elérésiút-lekérdezők
gitDir
public function gitDir(): string
Visszaadja a munkafánkénti git könyvtárat. Hagyományos tárolóknál ez a .git/. Összekapcsolt munkafáknál ez a .git/worktrees/<name>/.
commonGitDir
public function commonGitDir(): string
Visszaadja a megosztott git könyvtárat. Hagyományos tárolóknál megegyezik ezzel: gitDir(). Összekapcsolt munkafáknál ez a fő tároló .git/ könyvtára, ahol az objektumok, a konfiguráció és a packed-refs található.
workDir
public function workDir(): string
Visszaadja a munkafa gyökérkönyvtárának elérési útját.
isLinkedWorktree
public function isLinkedWorktree(): bool
true értéket ad vissza, ha ez a tárolókezelő egy összekapcsolt munkafához tartozik.
isBare, hooksEnabled, processesEnabled
public function isBare(): bool
public function hooksEnabled(): bool
public function processesEnabled(): bool
Jelzi, hogy a tárolónak nincs-e munkafája, és hogy ehhez a kezelőhöz a hooks / processes beállítások közül melyik van érvényben. A hooksEnabled() értéke false, ha a folyamatok le vannak tiltva.
Objektumok
readObject
public function readObject(string $hash): GitObject
Bármely objektumot beolvashat a teljes hexadecimális hash alapján (40 karakter, SHA-256 tárolóban pedig 64). Rövidített hash nem fogadható el. Blob, Tree, Commit vagy Tag példányt ad vissza. Először a laza objektumokban, majd a pack fájlokban keres.
ObjectNotFoundException kivételt dob, ha a hash nem található.
$object = $repo->readObject('a1b2c3d4e5f6...');
writeObject
public function writeObject(GitObject $object): ObjectId
Objektumot ír a laza objektumtárolóba. Visszaadja a kiszámított ObjectId értéket.
use Pitmaster\Object\Blob;
$blob = Blob::fromContent('Hello, world!');
$id = $repo->writeObject($blob);
catFile
public function catFile(string $hash): string
Visszaadja egy objektum nyers tartalmát; ez a git cat-file -p művelettel egyenértékű.
echo $repo->catFile('a1b2c3d4...');
objectExists
public function objectExists(string $hash): bool
Ellenőrzi, hogy létezik-e az objektum a tárolóban (lazán vagy csomagolva).
listObjects
public function listObjects(): array
Listázza a tároló összes objektumhash-ét. Hexadecimális karakterláncok tömbjét adja vissza.
Refek
head
public function head(): Commit
Visszaadja az aktuális HEAD commitot. Követi a szimbolikus refeket (HEAD -> refs/heads/main -> commit hash).
RuntimeException kivételt dob, ha a HEAD nem érvényes commitra mutat (e.g, üres tároló).
branch
public function branch(?string $name = null): ?string
Argumentumok nélkül az aktuális ág nevét (e.g, 'main'), leválasztott HEAD esetén pedig null értéket ad vissza.
Ágnévvel megadva feloldja annak commit hash-ét (hexadecimális karakterlánc), vagy null értéket ad vissza, ha az ág nem létezik.
$current = $repo->branch(); // 'main'
$hash = $repo->branch('feature'); // 'abc123...' or null
branches
public function branches(): array
Az összes ág nevét tartalmazó, rendezett tömböt ad vissza (a refs/heads/ előtag nélkül).
$branches = $repo->branches();
// ['bugfix/typo', 'feature/login', 'main']
tags
public function tags(): array
Az összes címke nevét tartalmazó, rendezett tömböt ad vissza (a refs/tags/ előtag nélkül).
resolve
public function resolve(string $revision): ObjectId
Egy revíziós kifejezést ObjectId értékké old fel. A következőket támogatja:
- Teljes hexadecimális hash-ek (40 karakter, SHA-256 esetén 64). A rövidített hash-eket, például a
abc1234értéket, nem oldja fel. HEAD- Ágnevek (
main,feature/login) - Címkenevek (
v1.0.0) - Teljes ref-elérési utak (
refs/heads/main) - Revíziós kifejezések (
HEAD~3,main^2)
RuntimeException kivételt dob, ha a revízió nem oldható fel.
$id = $repo->resolve('HEAD~3');
$id = $repo->resolve('v1.0.0');
$id = $repo->resolve('feature/login');
allRefs
public function allRefs(): array
Az összes refet refnév és hexadecimális hash szerinti asszociatív tömbként adja vissza.
$refs = $repo->allRefs();
// ['refs/heads/main' => 'abc123...', 'refs/tags/v1.0.0' => 'def456...']
updateRef
public function updateRef(string $name, ObjectId $target): void
Frissít egy refet, hogy egy új célra mutasson.
$repo->updateRef('refs/heads/main', $commitId);
createBranch
public function createBranch(string $name, ?ObjectId $from = null): void
Új ágat hoz létre. Ha a $from értéke null, az aktuális HEAD-ből ágazik le.
$repo->createBranch('feature/new-thing');
$repo->createBranch('hotfix', $repo->resolve('v1.0.0'));
deleteBranch
public function deleteBranch(string $name): void
Név alapján töröl egy ágat. RuntimeException kivételt dob, ha az ág checkoutolva van, vagy nem létezik. A git branch -d művelettel ellentétben nem ellenőrzi, hogy az ág egyesült-e.
$repo->deleteBranch('feature/old');
createLightweightTag
public function createLightweightTag(string $name, ?ObjectId $target = null): void
Könnyű címkét hoz létre. Ha a $target értéke null, közvetlenül az aktuális HEAD-et címkézi meg.
$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
Annotált címke létrehozása. Ha $target null, az aktuális HEAD-et címkézi meg. Visszaadja a címkeobjektum ObjectId értékét.
$tagId = $repo->createTag('v2.0.0', 'Release version 2.0.0');
deleteTag
public function deleteTag(string $name): void
Címke törlése név alapján.
$repo->deleteTag('v1.0.0');
packRefs
public function packRefs(): void
A megosztott packed-refs fájl újraírása az aktuális laza hivatkozáskészletből, és a hozzá tartozó megosztott laza hivatkozások ritkítása. Kapcsolt munkafák esetén ez a közös git könyvtárba ír.
$repo->packRefs();
defaultBranch
public function defaultBranch(): string
A tároló alapértelmezett ágának feloldása. Először a távoli HEAD szimbolikus hivatkozását ellenőrzi, majd a helyi HEAD-et, végül a main vagy master értéket használja.
isBranchMerged
public function isBranchMerged(string $branch, ?string $target = null): bool
Ellenőrzi, hogy egy ág teljesen beolvadt-e egy másik ágba (alapértelmezés szerint az alapértelmezett ágba).
if ($repo->isBranchMerged('feature/done')) {
$repo->deleteBranch('feature/done');
}
checkout
public function checkout(string $target): void
Ágak közötti váltás vagy a HEAD leválasztása. Frissíti a HEAD-et, az indexet és a munkafát. A $target lehet ág neve, címke, teljes hash vagy revíziókifejezés; ami nem ág, leválasztja a HEAD-et.
RuntimeException hibát dob, ha a jelenlegi és a célfában eltérő útvonalon helyi módosítás (staged vagy nem staged) vagy nem követett fájl található.
A többi követett fájl nem véglegesített módosításai nem maradnak meg: az index és a munkafa a célfából épül újra, ezért elvesznek azoknak a fájloknak a módosításai, amelyek mindkét oldalon azonosak, miközben a git megtartaná őket (#2). Előbb véglegesítse vagy tegye félre ezeket. A merge(), cherryPick(), revert(), rebase() és a bisect metódusok ugyanígy építik újra a munkafát.
$repo->checkout('feature/login');
$repo->checkout($repo->resolve('v1.0.0')->hex); // Detached HEAD
Index
index
public function index(): Index
Az aktuális index (staging terület) beolvasása és visszaadása innen: .git/index.
add
public function add(string ...$paths): void
Fájlok stage-elése. Minden fájlt beolvas a munkafából, blob objektumot hoz létre, majd frissíti az indexet. Minden argumentumnak a munkafa gyökeréhez viszonyított fájl- (vagy szimbolikus hivatkozás-) útvonalnak kell lennie; a könyvtárak és glob minták nem kerülnek kibontásra, a hiányzó fájl pedig RuntimeException hibát okoz.
$repo->add('src/Feature.php', 'tests/FeatureTest.php');
remove
public function remove(string ...$paths): void
public function removeCached(string ...$paths): void
Követett útvonalak eltávolítása az indexből és a munkafából. Az argumentumlistában támogatja a --cached és a -r / --recursive értékeket, a Git-hoz hasonló működéshez.
$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
Fájl áthelyezése/átnevezése a munkafában és az indexben.
$repo->mv('old-name.php', 'new-name.php');
Véglegesítések
commit
public function commit(?string $message = null, ?string $author = null): ObjectId
Véglegesítés létrehozása az aktuális indexből. Az indexbejegyzésekből fa-hierarchiát épít, létrehozza a véglegesítési objektumot a HEAD-del szülőként (ha van), majd frissíti a HEAD-et. Visszaadja az új véglegesítés ObjectId értékét.
A $message csak akkor lehet null, ha egy merge, cherry-pick, revert vagy rebase konfliktus miatt megállt; ilyenkor az előkészített üzenetet használja. Egyébként az null üzenet RuntimeException('Commit message required') hibát okoz. A véglegesítés akkor is hibát dob, ha az indexben feloldatlan útvonalak vannak, ha a véglegesítés nélküli tároló indexe üres, vagy ha a fa nem változott a HEAD-hez képest.
A $author paraméter teljes git szerzői karakterlánc (Name <email> timestamp timezone). Ha null, a környezeti változókból, konstansokból és a .git/config értékből oldja fel, a Kezdő lépések részben ismertetett sorrendben.
$id = $repo->commit('Fix null pointer bug');
show
public function show(string $revision): array
Commit-szerű objektum és annak diffje az első szülőhöz képest. Ha a revízió annotált címkére oldódik fel, a visszatérési érték tartalmazza a ['tag' => Tag] értéket is, a commit pedig a címke feloldott célvéglegesítése.
$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
HEAD visszaállítása egy véglegesítésre. Módok:
'soft': csak a HEAD mozgatása'mixed': HEAD mozgatása + index visszaállítása (alapértelmezett)'hard': HEAD mozgatása + index visszaállítása + munkafa visszaállítása
$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
Útvonal visszaállítása az indexből vagy egy megadott forrásrevízióból. Ha egyik jelző sincs beállítva, a Pitmaster a munkafát az indexből állítja vissza (vagy $source értékből, ha meg van adva). A staged: true a HEAD-ből (vagy $source értékből) állítja vissza az indexet, a munkafát pedig érintetlenül hagyja; a kettő visszaállításához adja meg a staged: true, worktree: true értéket.
$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
Véglegesítés alkalmazása új véglegesítésként az aktuális ágon, az eredeti szerző megőrzésével. Ha konfliktus miatt megáll a művelet, oldja fel a konfliktusokat, stage-elje az útvonalakat, majd hívja meg a cherryPickContinue() vagy cherryPickAbort() metódust.
$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
Véglegesítés visszavonására szolgáló véglegesítés létrehozása. Ha konfliktus miatt megáll a revert, oldja fel a konfliktusokat, stage-elje az útvonalakat, majd hívja meg a revertContinue() vagy revertAbort() metódust.
$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
Az aktuális ág újraalapozása egy másik revízióra. A Pitmaster jelenleg lineáris újraalapozást támogat a konfliktusok esetén Git-szerű megállási állapottal, valamint a folytatást, megszakítást és kihagyást. A HEAD-nek egy ágra kell mutatnia.
A rebase(), rebaseContinue() és rebaseSkip() a ['success' => bool, 'commits' => int, 'conflicts' => list<string>] értéket adják vissza: hogy befejeződött-e az újraalapozás, hány véglegesítés került alkalmazásra, és mely útvonalaknál volt konfliktus a megálláskor.
$result = $repo->rebase('main');
if (!$result['success']) {
// Resolve conflicts, then continue or skip/abort.
$repo->add('src/File.php');
$repo->rebaseContinue();
}
Állapot
status
public function status(): array
A munkafa állapotának kiszámítása. StatusEntry objektumok tömbjét adja vissza, amelyek mindegyike tartalmazza:
path: a fájl útvonalaindex:FileStatusenum a HEAD és az index közötti változásokhozworktree:FileStatusenum az index és a munkafa közötti változásokhozorigPath,renameScore: átnevezett bejegyzések esetén beállítva, egyébkéntnull
A nem követett fájlok mindkét oszlopban FileStatus::Untracked értéket kapnak. A figyelmen kívül hagyott fájlok nem jelennek meg.
foreach ($repo->status() as $entry) {
echo $entry->shortFormat() . "\n"; // "M src/File.php", "?? notes.txt"
}
statusPorcelainV2
public function statusPorcelainV2(): string
Géppel feldolgozható állapotkimenet a git porcelain v2 formátumában.
echo $repo->statusPorcelainV2();
// 1 M. N... 000000 000000 000000 0000...0000 0000...0000 modified-file.txt
// ? untracked-file.txt
Diff
diff
public function diff(?string $pathspec = null, string $algorithm = 'myers'): array
A munkafa összehasonlítása az indexszel (nem stage-elt módosítások). DiffResult objektumok tömbjét adja vissza. A $pathspec egy pontos fájlútvonalra szűr. A $algorithm értéke 'myers' (alapértelmezett), 'patience', 'histogram' vagy 'minimal' lehet; minden más érték InvalidArgumentException hibát okoz.
$diffs = $repo->diff();
foreach ($diffs as $diff) {
echo $diff->format(); // Unified diff output
}
diffStaged
public function diffStaged(?string $pathspec = null, string $algorithm = 'myers'): array
Az index összehasonlítása a HEAD-del (stage-elt módosítások). DiffResult[] értéket ad vissza, a törölt és hozzáadott fájlok közötti átnevezések felismerésével.
A $pathspec argumentumot jelenleg figyelmen kívül hagyja, ezért minden stage-elt fájlt visszaad, és az első véglegesítés előtt üres tömböt ad vissza (#5).
$staged = $repo->diffStaged();
diffTree
public function diffTree(ObjectId $a, ObjectId $b, string $algorithm = 'myers'): array
Két fát hasonlít össze az ObjectId értékük alapján. DiffResult[] értéket ad vissza. Faazonosítókat adjon meg, ne véglegesítésazonosítókat: a véglegesítésazonosítót nem faként olvassa be, ezért üres eredményt ad.
$old = $repo->readObject($repo->resolve('HEAD~1')->hex);
$new = $repo->head();
$diffs = $repo->diffTree($old->tree, $new->tree);
Napló
log
public function log(int $limit = 50, ?ObjectId $from = null): array
Véglegesítési előzmények bejárása, a véglegesítő időbélyege szerint a legújabbtól kezdve. Commit[] értéket ad vissza. Ha a $from null, a HEAD-ről indul. Üres tömböt ad vissza, ha a HEAD-hez még nem tartozik véglegesítés.
$commits = $repo->log(10);
logAll
public function logAll(int $limit = 50): array
Az összes hivatkozásból és a HEAD-ből elérhető véglegesítések bejárása, a legújabbtól kezdve. Commit[] értéket ad vissza.
logOneline
public function logOneline(int $limit = 50, bool $all = false, ?string $path = null): array
Naplósorok visszaadása git log --oneline formában (abc1234 Subject), a HEAD-ből, az összes hivatkozásból ($all), vagy útvonal szerint szűrve.
logPath
public function logPath(string $path, int $limit = 50): array
Napló szűrése fájlútvonal alapján. Csak azokat a véglegesítéseket adja vissza, amelyek első szülőjükhöz viszonyított diffje hozzáadja, módosítja, törli vagy átnevezi a pontosan megadott fájlt. A könyvtárútvonalak nem egyeznek.
Csak a legújabb 5 * $limit véglegesítést vizsgálja, így előfordulhat, hogy a fájlt érintő régebbi véglegesítések hiányoznak az eredményből (#7).
$commits = $repo->logPath('src/Repository.php', 20);
Összefésülés
merge
public function merge(string $branch, string $strategy = 'recursive'): MergeResult
public function mergeOctopus(array $branches): MergeResult
public function mergeContinue(): ObjectId
public function mergeAbort(): void
Ág (vagy bármely revízió) beolvasztása a HEAD-be. Automatikusan felismeri a gyors előrecsévéléssel végzett beolvasztást. Ha erre nincs lehetőség, fa szintű konfliktusfelismerést végez, és ütközésmentes esetben merge véglegesítést hoz létre. Konfliktus esetén megáll, és Git alakú merge-állapotot ír az indexbe és a munkafába; oldja fel a konfliktusokat, stage-elje az érintett útvonalakat, majd hívja meg a mergeContinue() vagy mergeAbort() metódust.
A $strategy 'ours' merge-véglegesítést rögzít, amely megtartja a HEAD fáját; minden más érték az alapértelmezett rekurzív merge-et használja. A mergeOctopus() két vagy több ágat olvaszt össze egy véglegesítéssé. Ha bármelyik ágon konfliktus van, tisztátalan eredményt ad vissza merge-állapot írása és véglegesítés létrehozása nélkül.
Ha a HEAD-ben már benne lévő ágat olvaszt be, a művelet újabb merge-véglegesítést hoz létre az „Already up to date” jelzés helyett (#6). A követett fájlok nem véglegesített módosításai felülíródnak a checkout() részben leírtak szerint.
MergeResult értéket ad vissza, amely tartalmazza:
clean: hogy a merge konfliktus nélkül sikerült-ecommitId: a merge-véglegesítés azonosítója (ha ütközésmentes)conflictPaths: a konfliktusos fájlútvonalak tömbje (ha nem ütközésmentes)mergedContents: a konfliktusos útvonalak és a konfliktusjelölőket tartalmazó fájltartalom párosításai (ha nem ütközésmentes)
$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
Két véglegesítés merge-alapjának (legalacsonyabb közös ősének) megkeresése. Null értéket ad vissza, ha nincs közös ős.
$base = $repo->mergeBase(
$repo->resolve('main'),
$repo->resolve('feature/login'),
);
Bisect
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
Bináris keresés annak a véglegesítésnek a megkeresésére, amely bevezette a változást. A bisectStart() rögzíti a hibás és a jó revíziókat, majd kiválasztja és visszaadja az első jelöltet. A bisectGood() és a bisectBad() az aktuális HEAD-et (vagy $revision értéket) jelöli meg, majd kiválasztja és visszaadja a következő jelöltet. Ha már csak egy gyanúsított marad, azt a véglegesítést adja vissza, és jelöltként hagyja meg: ez az első hibás véglegesítés. A bisectReset() lezárja a munkamenetet, és visszatér ahhoz az ághoz vagy véglegesítéshez, ahonnan indult.
$candidate = $repo->bisectStart('HEAD', 'v1.0.0');
// test $candidate ...
$candidate = $repo->bisectBad();
$candidate = $repo->bisectGood();
$repo->bisectReset();
Hálózat
fetch
public function fetch(string $remote = 'origin', ?int $depth = null): void
Lekérés távoli tárolóból. Letölti az új objektumokat, és frissíti a távoli követő hivatkozásokat. A sekély előzmények mélyítéséhez vagy korlátozásához adja meg a $depth értéket.
A fetch() és a push*() metódusok RuntimeException hibát dobnak olyan kezelőn, amelyet ['processes' => false] értékkel nyitottak meg.
$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
Az aktuális (vagy egy megadott) ág feltöltése távoli tárolóba. Szigorúbb vagy szélesebb körű hivatkozásfrissítéshez force-with-lease, atomic és mirror változatok is rendelkezésre állnak.
$repo->push();
$repo->push('origin', 'feature/login');
$repo->pushForceWithLease('origin', 'main', $repo->resolve('refs/remotes/origin/main'));
$repo->pushAtomic('origin', ['main', 'release']);
$repo->pushMirror();
Munkafák
addWorktree
public function addWorktree(string $path, string $branch, ?ObjectId $from = null, ?string $name = null): Worktree
Kapcsolt munkafa hozzáadása. Létrehozza az ágat, ha még nem létezik, beállítja a munkafa metaadatait, majd létrehozza a munkafa fájljait. Adja meg a $name értéket, ha a checkout könyvtárának alapnevétől eltérő, determinisztikus metaadat-slugra van szüksége.
$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
Kapcsolt munkafa eltávolítása. A zárolás ellenére történő eltávolításhoz használja a $force = true értéket.
worktrees
public function worktrees(): array
Az összes munkafa (fő és kapcsolt) listázása. Worktree[] értéket ad vissza.
foreach ($repo->worktrees() as $wt) {
echo "{$wt->path} [{$wt->branch}]\n";
}
Konfiguráció
config
public function config(): GitConfig
A tároló git konfigurációjának elérése. Konfigurációs értékek olvasása és írása.
$config = $repo->config();
$name = $config->get('user.name');
$config->set('user.email', 'new@example.com');
Belső hozzáférés
Ezek a metódusok belső komponenseket tesznek elérhetővé speciális felhasználási esetekhez.
objectDatabase
public function objectDatabase(): ObjectDatabase
A nyers objektum-adatbázis elérése (laza és csomagolt tárolók).
refDatabase
public function refDatabase(): RefDatabase
A nyers hivatkozás-adatbázis elérése (laza és csomagolt hivatkozások).
Alacsonyabb szintű osztályok
Ezeket az osztályokat nem csomagolja körül a Repository; azok belső komponenseiből készülnek.
Pitmaster\Graph\Blame
public function blame(ObjectId $headId, string $path): array
Soroként egy bejegyzést ad vissza a $path fájl $headId helyén: ['line' => int, 'hash' => string, 'author' => string, 'content' => string]. A author a teljes azonosító karakterlánc (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
Egy fa blob objektumaiban keres. Találatonként ['path' => string, 'line' => int, 'content' => string] értéket ad vissza. Beállítások: regex (a mintát PCRE-mintaként kezeli) és ignore_case. Érvénytelen reguláris kifejezés esetén InvalidArgumentException hibát dob.
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
Notes ref alatt tárolt git jegyzetek beolvasása és írása. A listAll() véglegesítés-hashek és jegyzettartalom közötti leképezést ad vissza.
use Pitmaster\Ref\Notes;
$notes = new Notes($repo->objectDatabase(), $repo->refDatabase());
$notes->set($repo->resolve('HEAD'), "Reviewed\n");
echo $notes->get($repo->resolve('HEAD'));