Le coût des clones complets
Un clone complet d'un dépôt de longue durée peut faire des centaines de mégaoctets, à chaque job CI, multiplié par chaque push.
Bases du clone shallow
git clone --depth=1 https://example.com/repo.git
Shallow avec plusieurs branches
git clone --depth=1 --no-single-branch https://example.com/repo.git
Clones partiels (Git 2.22+)
git clone --filter=blob:none https://example.com/repo.git
git clone --filter=tree:0 https://example.com/repo.git
Combiner shallow et partial
git clone --depth=1 --filter=blob:none https://example.com/repo.git
Exemple GitHub Actions
- uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Get full history when needed
run: git fetch --unshallow
Limites de shallow
- Vous ne pouvez pas pusher depuis un clone shallow vers un autre repo sans unshallow d'abord.
- Certaines opérations sont impossibles.
- Les forks et configurations complexes de submodules peuvent mal interagir.
Mesurer
time git clone --depth=1 https://example.com/repo.git
time git clone https://example.com/repo.git
Cacher le résultat
if [ -d .git ]; then
git fetch --depth=1
git reset --hard FETCH_HEAD
else
git clone --depth=1 ...
fi