Curso
O Git é uma ferramenta amplamente utilizada para o controle de versões que ajuda a gerenciar projetos de desenvolvimento de software, fluxos de trabalho de ciência de dados e até mesmo repositórios de documentação. No entanto, o Git tradicional tem limitações quando se trata de lidar com arquivos grandes. Os arquivos grandes serão duplicados a cada commit, o que leva ao inchaço do repositório e a fluxos de trabalho mais lentos devido à necessidade de copiar várias cópias de arquivos grandes ao fazer alterações. Por esse motivo, o gerenciamento de arquivos grandes com o Git pode se tornar ineficiente pelos seguintes motivos:
- Tamanho grande do repositório: O armazenamento de arquivos grandes diretamente em um repositório Git aumenta seu tamanho geral, tornando as operações de clonagem e busca lentas, especialmente quando você trabalha em um repositório remoto que pode exigir o upload/download de arquivos.
- Armazenamento e controle de versão ineficientes: Toda vez que um arquivo grande é modificado, o Git armazena uma nova versão em seu histórico, levando a um rápido inchaço do repositório.
- Problemas de desempenho: Com um repositório grande, as operações do Git (por exemplo, clonagem, puxar, empurrar) tornam-se significativamente mais lentas e exigem mais armazenamento.
Neste guia, daremos uma olhada detalhada no Git Large File Storage (Git LFS), que é uma extensão do Git que ajuda com arquivos grandes em seu repositório. Ele nos permite armazenar com mais eficiência as alterações em arquivos grandes sem duplicação extra ou armazenamento de arquivos. Você deve usá-lo sempre que esperar ter arquivos binários grandes em seu repositório. Começarei explicando com mais detalhes o que é, como funciona, quando usá-lo e como configurá-lo de forma eficaz.
Se você é novo no Git, confira nosso guia sobre Como aprender Git e Curso de introdução ao Git.
O que é o Git LFS?
O Git Large File Storage (Git LFS) é uma extensão do Git que melhora o manuseio de arquivos grandes.
Ele muda a forma como o Git lida com a busca e a clonagem, adicionando funcionalidade ao Git para buscar dados de um repositório remoto e adicionando uma funcionalidade inteligente de gerenciamento de arquivos ao Git.
Em todos os outros aspectos, a experiência do usuário é perfeita e igual à do Git normal.
Como o Git LFS difere do programa padrão do Git
No Git tradicional, armazenamos todo o histórico do repositório no diretório .git
. Isso inclui os arquivos de texto reais que foram alterados ao longo do tempo. Além disso, o download de repositórios inteiros é feito quando chamamos git fetch
ou git clone
para que todos os arquivos estejam prontamente disponíveis. Quando usamos o Git LFS, isso muda algumas coisas.
Primeiro, o Git LFS substitui arquivos grandes por ponteiros leves para o armazenamento remoto, reduzindo a necessidade de armazenar cada arquivo. Em segundo lugar, os arquivos grandes são baixados somente quando você faz o checkout na ramificação, o que significa que só baixamos arquivos grandes quando estamos prontos para trabalhar neles.
Por fim, ele gerencia o armazenamento do repositório local para limpar versões antigas de arquivos e manter um ambiente de trabalho limpo.
Como o Git LFS funciona?
O Git LFS segue um mecanismo de armazenamento baseado em ponteiros. Como mencionado anteriormente, quando você especifica um arquivo para rastreamento do LFS, o Git LFS o substitui por um arquivo de ponteiro no repositório e também coloca uma cópia local no cache.
Quando você faz push de commits, o cache local é atualizado para um armazenamento remoto (por exemplo, servidores GitHub, GitLab, Bitbucket LFS). Se houver alterações e você fizer o checkout, essas alterações atualizarão o cache local para fornecer a você a cópia de trabalho mais recente.
Se você quiser saber mais sobre um dos repositórios remotos mais populares, o GitHub, confira este curso de Introdução ao GitHub.
Há muitas vantagens em usar o Git LFS. Isso mantém os tamanhos dos repositórios pequenos e gerenciáveis. Ele também melhora o desempenho das equipes que trabalham com arquivos grandes. Além disso, ao evitar a duplicação desnecessária de arquivos grandes, ele mantém o tamanho do repositório local gerenciável.
Configuração do Git LFS
Antes de usar o Git LFS, você deve seguir algumas etapas de configuração. É um processo relativamente simples que envolve a instalação da extensão. Se você tiver repositórios existentes, precisará migrá-los. Se estiver criando um novo repositório, você pode simplesmente iniciar o Git LFS.
Instalação do Git LFS
Para usar o Git LFS, você deve instalá-lo em seu sistema. A maneira mais simples é acessar o site do git-lfs e instalar os arquivos. Depois de fazer isso, você executará git lfs install
uma vez no console de comando para inicializar e instalar totalmente o Git LFS.
Utilização do Git LFS
Depois de instalado, você precisará garantir que o Git LFS esteja configurado para cada repositório. Diferentes rastreadores remotos do Git (por exemplo, GitHub vs. Bitbucket) terão etapas ligeiramente diferentes. É melhor você seguir as etapas recomendadas para seu rastreador remoto Git específico. Em um alto nível, se você inicializar um novo repositório, poderá executar o git lfs install
nesse repositório para inicializar os ganchos e adicionar arquivos ao programa. Se você tiver um repositório existente, poderá usar git lfs migrate
e seguir os procedimentos de limpeza do diretório .git:
git reflog expire --expire-unreachable=now --all
git gc --prune=now
Usando o Git LFS em um projeto
Vamos examinar alguns dos usos do Git LFS em um projeto. Abordaremos as etapas de rastreamento, confirmação, clonagem e extração de arquivos grandes de um repositório Git LFS.
Programando arquivos grandes (git lfs track)
Para começar a rastrear tipos de arquivos específicos, você pode usar o comando git lfs track
. Por exemplo, se eu quisesse rastrear arquivos CSV, eu escreveria o comando como: git lfs track "*.csv"
. Isso também adiciona informações ao nosso arquivo .gitattributes
para garantir que estamos usando o Git LFS para esse arquivo específico. Agora, devemos enviar nosso arquivo .gitattributes
primeiro para garantir que estamos rastreando os arquivos LFS corretamente.
git add .gitattributes
git commit -m "Adding LFS .gitattributes"
git push origin main
Adição e envio de arquivos grandes
Depois de adicionar o programa, você pode adicioná-lo e confirmá-lo como de costume:
git add largefile.csv
git commit -m "Adding large file with Git LFS"
git push origin main
Nos bastidores, o Git LFS armazena o arquivo separadamente e o substitui por um ponteiro no repositório. Deve ser uma experiência relativamente perfeita.
Clonagem de repositórios com o Git LFS (git lfs clone)
Se você tiver uma versão mais recente do Git (>= 2.3.0), o comando git clone deverá funcionar automaticamente para os arquivos LFS e não LFS. Se você estiver usando uma versão mais antiga do Git, precisará usar o comando específico git lfs clone. Isso funciona de forma diferente do clone normal, pois ele se refere às informações do ponteiro para arquivos grandes e clona apenas a cópia de trabalho de cada arquivo grande. Para obter mais informações sobre clonagem no Git, consulte o seguinte tutorial sobre Git Clone Branch.
Extração de arquivos grandes (git lfs pull)
Se quiser buscar e fazer checkout dos arquivos LFS grandes do seu repositório, você poderá usar a função git lfs pull
. Isso é diferente de um simples git pull
que extrairá apenas os arquivos git.
Aqui está um exemplo de fluxo de trabalho:
git checkout main # check out your main branch
git pull # pull latest git files from the remote, for this branch
git lfs pull # pull latest git lfs files from the remote, for this branch
Práticas recomendadas para usar o Git LFS
Embora o Git LFS seja uma ótima solução, ele ainda pode ter sua própria série de problemas e não foi projetado para ser uma solução universal. Certifique-se de que você tenha as seguintes práticas recomendadas ao usar o Git LFS para aproveitá-lo ao máximo:
- Use o Git LFS somente para arquivos binários grandes, não para código ou arquivos de texto pequenos.
- Elimine regularmente os arquivos desnecessários usando:
git lfs prune
- Evite programar diretórios inteirosque pode levar a problemas de desempenho e inchaço
- Certifique-se de que todos os colaboradores tenham o Git LFS instalado para evitar que você perca arquivos.
Se você seguir essas diretrizes gerais, o Git LFS será uma ótima ferramenta para você!
Problemas comuns e como corrigi-los
Como o Git LFS é uma extensão do Git, ele vem com sua própria série de problemas. Isso é especialmente verdadeiro porque ele depende de repositórios remotos que têm seus próprios problemas. Aqui estão alguns problemas comuns que você pode encontrar ao usar o Git LFS e suas soluções.
Problemas de autenticação do Git LFS
Há várias maneiras pelas quais você pode ter problemas de autenticação com o Git LFS. Para garantir que você tenha as credenciais corretas, verifique o seguinte:
- Use a configuração SSH correta com
git config lfs.url ssh://
- Verifique se você tem acesso de leitura/gravação ao ramo principal, pois o Git LFS geralmente programa para o principal
- Tente fazer uma busca/clonagem limpa do repositório remoto inteiramente
Se você continuar a ter problemas e não for o administrador, consulte o proprietário do projeto para ver se ele pode ajudá-lo com as permissões.
Limites e cotas de armazenamento de arquivos grandes
Os serviços podem ter cotações no armazenamento do Git LFS. Por exemplo, o GitHub tem um limite de 2 GB para usuários Free e Pro, com um limite de 5 GB por arquivo para usuários da nuvem Enterprise. Certifique-se de que você não está carregando arquivos maiores do que o limite do seu serviço para evitar erros.
Migração de repositórios existentes para usar o Git LFS
Se um repositório já contiver arquivos grandes, migre-os usando:
git lfs migrate import --include="*.filetype"
Isso substitui retroativamente arquivos grandes por ponteiros LFS.
Conclusão
O Git LFS é uma ferramenta essencial para gerenciar arquivos grandes de forma eficiente, mantendo o desempenho e a leveza dos repositórios. Ao aproveitar o Git LFS, os desenvolvedores podem gerenciar adequadamente seus arquivos de repositório maiores. Desde que você esteja seguindo as práticas recomendadas para minimizar o inchaço, o LFS será uma grande ajuda para o rastreamento de arquivos. Se você tiver mais interesse em aprender sobre o Git, experimente os seguintes recursos:
Perguntas frequentes sobre o Git LFS
O que acontece se eu clonar um repositório com arquivos LFS do Git?
A execução do git clone
em versões mais recentes do Git buscará automaticamente os ponteiros do repositório e do LFS. Se você estiver em uma versão mais antiga do Git, será necessário executar git lfs pull
para fazer o download dos arquivos grandes. Como alternativa, você pode usar o site git lfs clone
para fazer isso automaticamente.
Como posso verificar quais arquivos são programados pelo Git LFS?
Execute git lfs track
para ver os padrões de arquivos rastreados e git lfs ls-files
para listar os arquivos reais armazenados usando o LFS.
E se eu ficar sem armazenamento do Git LFS no GitHub ou em outro serviço de hospedagem?
Serviços como o GitHub impõem limites de armazenamento. Você pode gerenciar o armazenamento com git lfs prune
, comprar mais espaço ou usar uma solução alternativa de armazenamento externo.
Posso parar de usar o Git LFS depois de ativá-lo?
Sim, mas você precisa migrar seus arquivos de volta para o Git padrão usando git lfs migrate export --include="*.filetype"
para remover o rastreamento do LFS.