---
title: "Fasáda Git — Git for Laravel | Roundly"
description: "Všetko začína pri Git:: — driver pre každú platformu, handly repo() a pullRequest(), vyhľadanie inštalácií, overenie webhookov a ochrana rozsahu."
url: https://roundly-consulting.com/sk/open-source/navody/git-for-laravel/fasada
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Git for Laravel](https://roundly-consulting.com/sk/open-source/navody/git-for-laravel.md)

# Fasáda Git

Všetko začína pri fasáde Git. Git::github() (alebo gitlab(), bitbucket(), provider()) vám dá prihláseného drivera; ->repo('owner/name') ho obmedzí na jeden repozitár a ->pullRequest($number) na jeden jeho pull request. S tokenom v konfigurácii nemusíte odovzdávať žiadne prihlasovacie údaje; explicitne odovzdané majú vždy prednosť pred konfiguráciou:

```php
use RoundlyConsulting\Git\Enums\MergeMethod;
use RoundlyConsulting\Git\Facades\Git;

$github = Git::github();                       // a driver: account-wide reads and writes
$github->repositories();                       // Page<Repository>
$github->createRepository($newRepository);     // Repository

$repo = $github->repo('acme/app');             // a handle on one repository
$repo->pullRequests('open');                   // Page<PullRequest>
$repo->commits()->branch('main')->lazy();      // LazyCollection<int, Commit>
$repo->contents('README.md');                  // FileContent (decoded)
$repo->compare('main', 'feature/ci');          // Comparison
$repo->branch('main');                         // Branch — the head of that exact branch
$repo->actions()->run($runId);                 // WorkflowRun — GitHub Actions
$repo->webhooks()->register();                 // Webhook

$pr = $repo->pullRequest(12);                  // a handle on one pull request
$pr->approve('LGTM');
$pr->merge(MergeMethod::Squash, sha: $pr->get()->raw()['head']['sha'] ?? null);

Git::githubApp()->installations()->find($id);  // app-JWT lookups
Git::capabilities('bitbucket');                // no authentication needed
Git::credentials('github');                    // ?Credentials — what github() would use
Git::verifyWebhook('github', $request);        // bool
```

## API v skratke

| Kde | Metódy |
| --- | --- |
| `Git::` | github(?Credentials), githubApp(?GithubApp), gitlab(?Credentials), bitbucket(?Credentials), provider(name, ?Credentials), capabilities(name), credentials(name), verifyWebhook(name, Request), fake(), macro() |
| `Git::github()` | repo(path\|Repository), installations(), user(), repositories(), allRepositories(), searchRepositories(), createRepository(), installationRepositories(), allInstallationRepositories(), batch(), rateLimit(), supports() / supportsAll() / supportsAny() / capabilities() / features() / featureMatrix() / featureInfo(), authenticate(), isAuthenticated() |
| `->repo('acme/app')` | get(), path(), branches(), branch($name), createBranch(), commit($sha), commits(), pullRequests(), pullRequest($n), createPullRequest(), issues(), issue($n), comment(), tags(), createTag(), releases(), release(), createRelease(), contents(), createFile(), updateFile(), compare(), contributors(), activity(), languages(), actions(), webhooks(), cloneUrl() |
| `->pullRequest(12)` | get(), number(), merge(), approve(), review(), reviews(), close(), comment() |
| `Git::githubApp()->installations()` | all(), find($id), forOrganization($org), forUser($login), installUrl(?$state) |
| `->repo(…)->actions()` | path(), dispatch(), runs(), run($id), jobs($runId), cancel($runId) |
| `->repo(…)->webhooks()` | register(), all(), registered(), delete(), deleteByUrl() |

Git::credentials() vráti prihlasovacie údaje, ktoré driver dostane, keď žiadne neodovzdáte — najprv nastavenú inštaláciu GitHub App, potom statický token, inak null — takže tie isté údaje môžete odovzdať aj niečomu mimo balíka, napríklad URL na klonovanie. Git::verifyWebhook() spustí kontrolu podpisu balíka pre routu, ktorú spravujete sami (pozrite sekciu Webhooky).

## Handly neopustia svoj rozsah

Každá cesta, ktorú handle prijme, skončí v URL platformy, preto ju handly najprv skontrolujú a namiesto oslovenia iného zdroja vyhodia OutOfScopeException (InvalidArgumentException):

```php
use RoundlyConsulting\Git\Exceptions\OutOfScopeException;

Git::github()->repo('acme/app/../billing');          // OutOfScopeException
Git::github()->repo($gitlabRepository);              // OutOfScopeException: belongs to GitLab
Git::github()->repo('acme/app')->contents('../.env'); // OutOfScopeException
Git::github()->repo('acme/app')->contents('%2e%2e/%2e%2e/x');   // OutOfScopeException — decoded first
Git::github()->repo('acme/app')->webhooks()->delete('1/../..'); // OutOfScopeException
Git::github()->repo('acme/app')->pullRequest(0);     // OutOfScopeException
```

- repo() odmietne prázdnu cestu, prázdny segment, segment . či .., znaky ?, #, \\, bajt NUL aj medzery — a tiež objekt Repository, ktorý patrí inému providerovi (repozitár z GitLabu na Git::github()).
- contents(), createFile() a updateFile() odmietnu cesty k súborom so segmentmi ., .. či prázdnymi a so znakom \\ alebo bajtom NUL; commit(), release() a compare() odmietnu takéto refy — a navyše refy s ? či medzerami —, rovnako ako každý iný ref, ktorý skončí v ceste URL (základný ref pri createBranch() a ref pri createTag() na GitHube). Názov súboru môže obsahovať ? aj # a ref znak # (contents('docs/C#/intro.md'), compare('main', 'fix/#123')): odošlú sa ako %3F a %23, no segment, ktorý je až po prvé ? alebo # len . či .. (..#x, ..%3F), sa aj tak odmietne.
- Každá hodnota sa kontroluje tak, ako prišla, aj po každom percentovom dekódovaní, pretože HTTP vrstva pred odoslaním dekóduje %2e a zlúči bodkové segmenty: %2e%2e/victim, %252e%252e/victim aj ..%2Fvictim sa odmietnu presne ako ../victim. Čo prejde, sa percentovo zakóduje po segmentoch, takže platforma dostane presne ten názov, ktorý ste zadali (docs/a b.md → docs/a%20b.md, 100%.md → 100%25.md).
- pullRequest() odmietne číslo menšie ako 1, installations()->find() nečíselné id a forOrganization() / forUser() čokoľvek iné než jeden segment.
- branch() aj ref pri spustení workflowu prechádzajú rovnakými kontrolami refov ako vyššie. actions() prijme workflow len ako číselné id alebo jeden názov súboru s koncovkou .yml či .yaml (bez /, ani zakódovaného, a bez medzier) a id runu len zo samých číslic.
- webhooks()->delete($id) — aj git:webhook --delete= — prijme len tvar id, aký vydáva platforma: číselné na GitHube a GitLabe, {uuid} v zložených zátvorkách na Bitbuckete, pretože id skončí v URL požiadavky DELETE.

Ploché metódy drivera (Git::github()->contents('acme/app', …)) aj batch() zostavujú URL cez rovnaké kontroly, takže odmietnu tie isté hodnoty.

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/git-for-laravel.md)
