Skip to content

Using several remotes

When you specify a repository in the manifest with just an URL, tsrc assumes you want a remote named origin:

repos:
  - dest: foo
    url: git@gitlab.acme.com/your-team/foo

  - dest: bar
    url: git@gitlab.acme.com/your-team/bar

But sometimes you need several remotes. Let's see a few use cases.

Mirroring open-source projects

If you want some repos in your organization to be open source, you may need:

  • a remote named 'origin' containing for the private repository on your GitLab instance
  • a remote named 'github' for the public repository on GitHub

In that case, you can use an alternative syntax:

repos:
  # foo is open source and thus needs two remotes:
  - dest: foo
    remotes:
    - name: origin
      url: git@gitlab.acme.com/your-team/foo
    - name: github
      url: git@github.com/your-team/foo

  # bar is closed source and thus only needs the
  # default, 'origin' remote:
  - dest: bar
    url: gitlab.acme.com/your-team/bar

After this change, when running tsrc init or tsrc sync, both the origin and github remotes will be created in the foo repo if they don't exist, and both remotes will be fetched when using tsrc sync.

Using a VPN

Sometimes you will need two remotes, because depending the physical location of your developers, they need to use either:

  • a 'normal' remote, when they are in the office
  • a 'vpn' remote, when they are working at home

In that case, you can create a manifest looking like this:

repos:
  - dest: foo
    remotes:
    - name: origin
      url: git@gitlab.local/your-team/foo
    - name: vpn
      url: git@myvpn.com/gitlab/your-team/foo

  - dest: bar
    remotes:
    - name: origin
      url: git@gitlab.local/your-team/bar
    - name: vpn
      url: git@myvpn.com/gitlab/your-team/bar

Developers can then use the -r, --singular-remote option to either use the origin or vpn when running tsrc init (to create a workspace), or tsrc sync (to synchronize it), depending on their physical location:

# Init the workspace using the 'vpn' remote
$ tsrc init -r vpn
# Bring back the computer in the office
# Synchronize using the 'origin' remote:
$ tsrc sync -r origin

Note

When using this option, tsrc expects the remote to be present in the manifest for all repositories.