Vocabulario de rendimiento
"Rendimiento a escala" puede significar muchas cosas: tiempo de clone, velocidad de log/blame, throughput de commits, manejo de tamaño del árbol de trabajo.
Clone y fetch
Los archivos pack de Git usan compresión delta agresiva. Mercurial usa archivos bundle con compresión similar.
Operaciones locales
Ambos sistemas realizan operaciones locales completamente desde disco. El núcleo Python puro de Mercurial fue históricamente más lento.
time git log --oneline | wc -l # ~5-10 segundos
time hg log --template '{rev}\n' | wc -l # ~10-20 segundos
Tamaño del árbol de trabajo
Ambos hacen actualizaciones del árbol de archivos caminando trees y aplicando cambios.
Uso de memoria
El runtime Python de Mercurial impone un piso de memoria más alto que el núcleo C de Git.
Almacenamiento del repositorio
Ambos usan almacenamiento direccionado por contenido con compresión delta.
Operaciones concurrentes
El índice de Git usa locks de archivo. Mercurial usa locking similar.
Escalado del lado servidor
Los servidores Git rutinariamente alojan repositorios con cientos de miles de contribuidores.
Escala de monorepo
Microsoft (Windows en Git vía VFS for Git / Scalar) y Meta (Sapling) enfrentaron el mismo problema.
# Git con sparse checkout y partial clone
git clone --filter=blob:none --sparse https://example.com/monorepo.git
cd monorepo
git sparse-checkout init --cone
git sparse-checkout set apps/myapp shared/utils
# Mercurial con sparse y narrow
hg clone --narrow --include 'apps/myapp' --include 'shared/utils' \
https://example.com/monorepo
Sapling y Scalar
Sapling de Meta es esencialmente "Mercurial reimaginado para monorepos".
La conclusión pragmática
A escala ordinaria, el rendimiento no es un factor decisivo.