> ## Documentation Index
> Fetch the complete documentation index at: https://namespace.so/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Fast repository checkouts with Git snapshots

Git snapshots prepare a repository and working tree once, package them as a snapshot, and reuse that snapshot across ephemeral runners. A runner downloads and extracts the snapshot instead of fetching Git history and checking out every file itself.

This is most useful for large repositories where checkout time is a significant part of each job. Snapshots are keyed by the resolved commit, so repeated checkouts of the same commit reuse the same immutable snapshot.

<Info>
  Git snapshots are in **early access**. Reach out to enable them for your workspace.

  Git snapshots are intended to supersede [Git checkout caching](/docs/solutions/github-actions/caching/git-checkouts).

  [Contact support →](mailto:support@namespace.so)
</Info>

## Requirements

* A GitHub repository.
* A Namespace Linux or macOS runner.
* A [GitHub association](https://cloud.namespace.so/workspace/workspace/integrations) that gives Namespace read-only access to the target organization and repositories.

## Use Git snapshots in a workflow

Replace `actions/checkout` with [`namespace-actions/code-checkout`](https://github.com/namespace-actions/code-checkout):

```yaml theme={null}
jobs:
  test:
    runs-on: nscloud-ubuntu-26.04-amd64-8x16
    steps:
      - uses: namespace-actions/code-checkout@main
      - run: go test ./...
```

By default, the action checks out the workflow's commit (`$GITHUB_SHA`) into `$GITHUB_WORKSPACE`. It uses the runner's Namespace credentials, so no GitHub token is needed.

The same step works on Linux and macOS runners, on both x64 and arm64. To run the job on macOS, replace `runs-on` with your Namespace macOS runner profile.

<Tip>
  Versioned releases of the action are not published yet. Pin it to a full commit SHA for reproducible workflows.
</Tip>

### Inputs

| Input | Default | Description |
| - | - | - |
| `repository` | `${{ github.repository }}` | GitHub repository in `owner/name` form. |
| `ref` | The workflow SHA for the workflow repository; otherwise the target repository's default branch | Commit, branch, or tag to check out. Use a commit SHA for reproducibility. |
| `path` | `.` | Destination relative to `$GITHUB_WORKSPACE`. Must be absent or empty and stay inside the workspace. |
| `additional-refs` | None | Additional refs to include in the local Git data, one per line. Does not change the checked-out ref. |

For example, to check out into a subdirectory and also fetch `main` for comparison:

```yaml theme={null}
- uses: namespace-actions/code-checkout@main
  with:
    path: source
    additional-refs: |
      main
```

For pull requests, the default ref is the workflow SHA, which is normally GitHub's merge commit. To check out the pull request's head commit instead, set `ref: ${{ github.event.pull_request.head.sha }}`.

### Differences from actions/checkout

The action does not support every `actions/checkout` option:

* It does not clean a nonempty destination or persist GitHub credentials.
* It does not expose submodule, LFS, sparse-checkout, or fetch-depth settings.
* GitHub Enterprise and Windows runners are not supported.
* Snapshot and authentication failures fail the step. There is no fallback to a direct Git clone.

See the [action repository](https://github.com/namespace-actions/code-checkout) for more details.

## How it works

Whenever a ref is requested, Namespace generates a snapshot of the repository contents and serves it from an internal Namespace cache.

When multiple jobs request the same ref, as commonly happens in CI, the same snapshot is served to each job. This amortizes the checkout time across those jobs.

Snapshots are ephemeral and are removed automatically after some time.
