Temos um repositório com vários arquivos SQL grandes, variando de 100 MB a 10 GB de tamanho.
Estou tentando configurar a clonagem local para que possamos baixar apenas os arquivos SQL que precisam ser alterados e confirmados em um determinado momento, em vez de baixar todos os arquivos SQL, mesmo que precisemos apenas de um.
Consegui chegar perto com os seguintes comandos. Funciona até eu fazer commit das minhas alterações, nesse ponto ele baixa todos os arquivos no branch atual.
git clone --filter=blob:none --depth 1 -n --sparse <url>
cd <repoDir>
git sparse-checkout set <fileNeedingChangedAndCommitted>
git restore --staged .
git restore <fileNeedingChangedAndCommitted>
# At this point, the file I need to change is downloaded locally, ready for changes.
# Make changes to file.
git add <fileNeedingChangedAndCommitted>
git commit -m "test"
# At this point, all other files in current branch are downloaded, even if not changed.
Sinto que isso deveria ser possível, mas talvez eu esteja entendendo errado o conceito de sparse-checkout ou esteja esquecendo de alguma etapa/detalhe.
Existe alguma maneira de baixar apenas os arquivos que você deseja alterar e, então, confirmar essas alterações sem baixar todos os arquivos na ramificação atual?
EDIT: Dos meus testes e da conversa sobre essa questão, cheguei à conclusão de que isso não é possível com o Git. No entanto, decidimos manter os arquivos SQL em seus próprios branches órfãos no mesmo repositório, para que cada um tenha seu próprio histórico/cadeia de commits, mas estejam no mesmo repositório para organização. Isso nos permite fazer checkout apenas dos branches/arquivos que precisamos em um dado momento e fazer alterações/commits sem baixar todos os blobs/hashes dos outros arquivos sql. Isso não funcionará para todas as situações, mas resolve nossa necessidade por enquanto :)