github / github/copilot-cli

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

Đang mở
#2,399 2 bình luận 0 reaction 0 người được giao Xem trên GitHub
area:installation area:plugins
Ngôn ngữ chính
Shell
Star
11.2k
Fork
1.9k
Merge trung bình
14 giờ 16 phút
Pull request đã merge (30 ngày)
6

Mô tả

### 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

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.