Adds a remote to the repository.
public addRemote ( string $name, string $url, array $options = [] ) : |
||
$name | string | The name of the remote to add. |
$url | string | The URL of the remote to add. |
$options | array | An associative array of options, with the following keys:
- -f: Boolean, set to true to run git fetch immediately after the
remote is set up. Defaults to false.
- --tags: Boolean. By default only the tags from the fetched branches
are imported when git fetch is run. Set this to true to import every
tag from the remote repository. Defaults to false.
- --no-tags: Boolean, when set to true, git fetch does not import tags
from the remote repository. Defaults to false.
- -t: Optional array of branch names to track. If left empty, all
branches will be tracked.
- -m: Optional name of the master branch to track. This will set up a
symbolic ref 'refs/remotes/ |
Résultat |
/** * Pushes the deployment build to the temporary git repository. */ public function main() { // Check if all required properties are present. $this->checkRequiredProperties(); // Add the remote for the starterkit if it doesn't exist yet. $remote_branch = 'remotes/' . $this->starterkitRemote . '/' . $this->starterkitBranch; $remote_exists = $this->subsiteRepository->hasRemote($this->starterkitRemote); if (!$remote_exists) { $this->log('Adding remote repository.'); // Only track the given branch, and don't download any tags. $options = ['--no-tags' => TRUE, '-t' => [$this->starterkitBranch]]; $this->subsiteRepository->addRemote($this->starterkitRemote, $this->starterkitRepository, $options); } // Check if the tracking branch exists and create it if it doesn't. try { $this->subsiteRepository->run(array('rev-parse', $remote_branch)); } catch (GitException $e) { $this->log('Adding tracking branch.'); $this->subsiteRepository->remote('set-branches', '--add', $this->starterkitRemote, $this->starterkitBranch); } // Fetch the latest changes. $this->log('Fetching latest changes.'); $this->subsiteRepository->fetch($this->starterkitRemote); // Check if the latest commit on the remote is merged into the current // branch. $this->subsiteRepository->clearOutput(); $latest_commit = (string) $this->subsiteRepository->run(array('rev-parse', $remote_branch)); $merge_base = (string) $this->subsiteRepository->run(array('merge-base @ ' . $remote_branch)); // If the latest commit on the remote is not merged into the current branch, // the repository is not up-to-date. if ($merge_base !== $latest_commit) { throw new \BuildException('The current branch is not up to date with the starterkit.'); } $this->log('The starterkit is up to date.'); }