Pull from a remote repository
- Tier: Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
You can use the GitLab interface to browse the content and activity of a repository, even if it isn’t hosted on GitLab. Create a pull mirror to copy the branches, tags, and commits from an upstream repository to yours.
Unlike push mirrors, pull mirrors retrieve changes from an upstream (remote) repository on a scheduled basis. To prevent the mirror from diverging from the upstream repository, don’t push commits directly to the downstream mirror. Push commits to the upstream repository instead. Changes in the remote repository are pulled into the GitLab repository:
- Automatically, 30 minutes after a previous pull. This cannot be disabled.
- When an administrator force-updates the mirror.
- When an API call triggers an update.
UI and API updates are subject to default pull mirroring intervals of 5 minutes. This interval can be configured on GitLab Self-Managed instances.
By default, if any branch or tag on the downstream pull mirror diverges from the local repository, GitLab stops updating the branch. This prevents data loss. Deleted branches and tags in the upstream repository are not reflected in the downstream repository.
Items deleted from the downstream pull mirror repository, but still in the upstream repository, are restored upon the next pull. For example: a branch deleted only in the mirrored repository reappears after the next pull.
How pull mirroring works
After you configure a GitLab repository as a pull mirror:
- GitLab adds the repository to a queue.
- Once per minute, a Sidekiq cron job schedules repository mirrors to update, based on:
- Available capacity, determined by Sidekiq settings. For GitLab.com, read GitLab.com Sidekiq settings.
- How many mirrors are already in the queue and due for updates. Being due depends on when the repository mirror was last updated, and how many times updates have been retried.
- Sidekiq becomes available to process updates, mirrors are updated. If the update process:
- Succeeds: An update is enqueued again with at least a 30 minute wait.
- Fails: The update is attempted again later. After 14 failures, a mirror is marked as a hard failure and is no longer enqueued for updates. A branch diverging from its upstream counterpart can cause failures. To prevent branches from diverging, configure Overwrite diverged branches when you create your mirror.
Configure pull mirroring
Prerequisites:
- If your remote repository is on GitHub and you have
two-factor authentication (2FA) configured,
create a personal access token for GitHub
with the
repo
scope. If 2FA is enabled, this personal access token serves as your GitHub password. - GitLab Silent Mode is not enabled.
On the left sidebar, select Search or go to and find your project.
Select Settings > Repository.
Expand Mirroring repositories.
Enter the Git repository URL.
To mirror the
gitlab
repository, usegitlab.com:gitlab-org/gitlab.git
orhttps://gitlab.com/gitlab-org/gitlab.git
.In Mirror direction, select Pull.
In Authentication method, select your authentication method. For more information, see Authentication methods for mirrors.
Select any of the options you need:
- Overwrite diverged branches
- Trigger pipelines for mirror updates
- Only mirror protected branches
To save the configuration, select Mirror repository.
Overwrite diverged branches
To always update your local branches with remote versions, even if they have diverged from the remote, select Overwrite diverged branches when you create a mirror.
For mirrored branches, enabling this option results in the loss of local changes.
Trigger pipelines for mirror updates
You can configure your mirror to automatically trigger pipelines when the remote repository updates branches or tags. Before you enable this feature:
Ensure your CI runners can handle the additional load from the remote repository activity.
Consider the security implications. The pipelines use the credentials from pull mirroring and run unreviewed code.
Only enable this feature for your own projects or those with trusted maintainers.
Trigger an update by using the API
Pull mirroring uses polling to detect new branches and commits added upstream, often minutes afterwards. You can notify GitLab using an API call, but the minimum interval for pull mirroring limits is still enforced.
For more information, read Start the pull mirroring process for a project.
Fix hard failures when mirroring
After 14 consecutive unsuccessful retries, the mirroring process is marked as a hard failure and mirroring attempts stop. This failure is visible in either the:
- Project’s main dashboard.
- Pull mirror settings page.
To resume project mirroring, force an update.
If multiple projects are affected by this problem, such as after a long network or server outage, you can use the Rails console to identify and update all affected projects with this command:
Project.find_each do |p|
if p.import_state && p.import_state.retry_count >= 14
puts "Resetting mirroring operation for #{p.full_path}"
p.import_state.reset_retry_count
p.import_state.set_next_execution_to_now(prioritized: true)
p.import_state.save!
end
end
Related topics
- Troubleshooting for repository mirroring.
- Pull mirroring intervals
- Project pull mirroring API
Docs
Edit this page to fix an error or add an improvement in a merge request.
Create an issue to suggest an improvement to this page.
Product
Create an issue if there's something you don't like about this feature.
Propose functionality by submitting a feature request.
Feature availability and product trials
View pricing to see all GitLab tiers and features, or to upgrade.
Try GitLab for free with access to all features for 30 days.
Get help
If you didn't find what you were looking for, search the docs.
If you want help with something specific and could use community support, post on the GitLab forum.
For problems setting up or using this feature (depending on your GitLab subscription).
Request support