Can actions/checkout Be Used with a Different Git Provider? A Complete Guide

Yes, actions/checkout can clone repositories from any Git provider—including GitLab, Bitbucket, or self-hosted GitHub Enterprise—by using the github-server-url input to specify a custom Git host.

The actions/checkout action is not limited to GitHub.com. According to the source code in actions/checkout, you can configure the action to fetch code from any Git server that supports standard HTTPS or SSH protocols. This flexibility makes it a versatile tool for organizations using multiple Git hosting platforms or self-hosted instances.

How actions/checkout Builds URLs for Different Git Providers

The action constructs repository URLs dynamically based on your inputs. In src/url-helper.ts, the getFetchUrl function (lines 5‑21) concatenates the server URL with the encoded owner and repository name to generate the final fetch URL.

When you provide the github-server-url input, the getServerUrl function (lines 23‑31) overrides the default https://github.com with your custom base URL. This allows the action to target any Git host that follows the conventional owner/repo naming convention.

The isGhes function (lines 47‑58) detects whether the target is a GitHub Enterprise Server, but the action treats any non‑GitHub host as a generic Git server. As long as the host supports standard Git protocols, the checkout proceeds normally.

Configuring the github-server-url Input

The github-server-url input is the critical parameter that enables checkout code from a different Git provider. When set, it replaces the environment default GITHUB_SERVER_URL with your specified base URL.

The action supports two primary authentication patterns for external hosts:

  • HTTPS with token: Pass a personal access token via the token input for HTTP‑basic authentication
  • SSH with private key: Supply an ssh-key to generate SSH‑style URLs (user@host:owner/repo.git) as implemented in src/url-helper.ts (lines 14‑18)

Both methods work with any Git server that implements the standard Git wire protocol, including GitLab, Bitbucket, Azure DevOps, or Gitea instances.

Practical Examples for Alternative Git Hosts

Self-Hosted GitHub Enterprise Server

To checkout from a GitHub Enterprise Server (GHES) instance, specify the server URL and a valid token:

- uses: actions/checkout@v4
  with:
    repository: my-org/my-repo
    github-server-url: https://ghes.example.com
    token: ${{ secrets.GHES_TOKEN }}

GitLab or Bitbucket via HTTPS

For GitLab, Bitbucket, or other HTTPS‑accessible Git hosts:

- uses: actions/checkout@v4
  with:
    repository: my-group/my-project
    github-server-url: https://gitlab.example.com
    token: ${{ secrets.GITLAB_TOKEN }}

The repository input accepts the owner/repo or group/project format used by your specific Git provider.

Any Git Server via SSH

When using SSH authentication, the action constructs the URL with your specified ssh-user (defaulting to git):

- uses: actions/checkout@v4
  with:
    repository: my-org/another-repo
    github-server-url: https://git.example.com
    ssh-key: ${{ secrets.SSH_PRIVATE_KEY }}
    ssh-user: git

This method works with any SSH‑compatible Git server regardless of the hosting platform.

Key Implementation Details

The flexibility for actions/checkout different Git provider support stems from these specific implementation points in the source code:

  • src/url-helper.ts: Contains the URL generation logic that supports both HTTPS and SSH schemes
  • src/git-source-provider.ts: Calls urlHelper.getFetchUrl and executes the standard git clone and git fetch commands
  • README.md (lines 166‑170): Documents the github-server-url input for fetching from instances other than GitHub.com

The action essentially shells out to standard Git commands, meaning any server that implements the Git protocol correctly will work.

Summary

  • actions/checkout supports any Git provider that offers HTTPS or SSH access, not just GitHub.com
  • Use the github-server-url input to point to self-hosted GitHub Enterprise, GitLab, Bitbucket, or other Git servers
  • Authentication works via token for HTTPS or ssh-key for SSH connections
  • The URL construction in src/url-helper.ts generates appropriate fetch URLs for any host following standard Git naming conventions

Frequently Asked Questions

Can actions/checkout work with GitLab repositories?

Yes. Set github-server-url to your GitLab instance URL (e.g., https://gitlab.com or https://gitlab.example.com) and provide a GitLab personal access token via the token input. The action treats GitLab as a generic Git host and constructs the appropriate HTTPS URL for fetching.

What is the github-server-url input used for?

The github-server-url input overrides the default GitHub server URL, allowing the action to target alternative Git hosts. According to the README (lines 166‑170), this input ensures the action fetches from the specified instance rather than defaulting to GitHub.com.

Does actions/checkout support SSH authentication for external providers?

Yes. When you provide the ssh-key input, the action builds an SSH‑style URL in src/url-helper.ts (lines 14‑18) using the format user@host:owner/repo.git. This works with any SSH‑compatible Git server, including Bitbucket, GitLab, and self-hosted solutions.

Is there a difference between checking out from GitHub vs other providers?

The only difference is URL construction and authentication configuration. The isGhes function in src/url-helper.ts (lines 47‑58) detects GitHub Enterprise specifically, but the underlying Git operations remain identical. Any provider supporting standard Git protocols works with the same git clone and git fetch commands executed by src/git-source-provider.ts.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →