El costo de clones completos
Un clone completo de un repositorio de larga vida puede ser de cientos de megabytes. En cada job CI. Multiplicado por cada push.
Fundamentos del clone shallow
git clone --depth=1 https://example.com/repo.git
Shallow con múltiples branches
git clone --depth=1 --no-single-branch https://example.com/repo.git
Clones parciales (Git 2.22+)
git clone --filter=blob:none https://example.com/repo.git
git clone --filter=tree:0 https://example.com/repo.git
Combinando shallow y partial
git clone --depth=1 --filter=blob:none https://example.com/repo.git
Ejemplo de GitHub Actions
- uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Get full history when needed
run: git fetch --unshallow
Limitaciones de shallow
- No puedes hacer push desde un clone shallow a otro repo sin unshallowing primero.
- Algunas operaciones (rebase entre el rango faltante, bisect completo) son imposibles.
- Forks y configuraciones complejas de submódulos pueden interactuar mal con shallow.
Medir
time git clone --depth=1 https://example.com/repo.git
time git clone https://example.com/repo.git
Cachear el resultado
if [ -d .git ]; then
git fetch --depth=1
git reset --hard FETCH_HEAD
else
git clone --depth=1 ...
fi