github / github/copilot-cli

[FEATURE] Use sparse checkout for plugin installs — only fetch shipping assets, not entire repo

Abierto
#2,399 2 comentarios 0 reacciones 0 asignados Ver en GitHub
area:installation area:plugins
Lenguaje dominante
Shell
Estrellas
11.2k
Forks
1.9k
Merge medio
14 h 16 min
PR fusionados (30 d)
6

Descripción

### Problem Statement

When GitHub Copilot CLI installs a plugin, it performs a full `git clone` of the source repository. This means **every file in the repo** — tests, CI configs, development tooling, documentation source, images, etc. — is downloaded to the user's machine, even though only the plugin directory is a shipping asset.

This has two problems:

1. **Performance**: Full clones are unnecessarily slow and disk-heavy, especially for monorepos or repos with large non-plugin content (media, test fixtures, etc.).

2. **Shipping asset boundary** (more important): Files outside the plugin directory are development artifacts — tests, `.github/` workflows, `.config/`, contributor docs, build scripts, etc. These are **not intended to be distributed to end users**. Fetching them conflates "installing a plugin" with "cloning a development environment." Plugin consumers should only receive what plugin authors intend to ship.

### Proposed Solution

Use Git's **partial clone + sparse checkout** to fetch only the plugin subdirectory:

```bash
# 1. Partial clone — no blobs downloaded yet
git clone --filter=blob:none --sparse --depth=1
cd

# 2. Sparse checkout — only materialize the plugin path
git sparse-checkout set
```

| Flag | Effect |
|---|---|
| `--filter=blob:none` | Partial clone — skips downloading file content until needed |
| `--sparse` | Enables sparse checkout (only root files initially) |
| `--depth=1` | Shallow — only the latest commit, no history |

This is well-supported by GitHub's servers and requires Git 2.25+.

### Alternative Solutions

| Approach | Downside |
|---|---|
| Full clone (status quo) | Downloads non-shipping content; slower |
| `--depth=1` only (shallow clone) | Still downloads all files across the tree |
| Download tarball of subdirectory via GitHub API | Loses git-based update/ref mechanism |

### Additional Context

- Git partial clone + sparse checkout is production-ready and used at scale (e.g., by large monorepos at Microsoft, Google).
- GitHub's servers fully support `--filter=blob:none` and `--filter=tree:0`.
- A corresponding issue has been filed for Claude Code: https://github.com/anthropics/claude-code/issues/40864

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.