código

2 mar, 2021

Github com arquivos com mais de 100MB: o que fazer?

Publicidade

Naturalmente o Github não impõe limite para o armazenamento de arquivos, porém o recomendado é que cada repositório permaneça entre menos 1GB à 5GB, principalmente por questões de agilidade.

Porém, quando falamos do tamanho de arquivos individuais, o cenário muda totalmente, nesse caso, o Github limita o armazenamento em 100MB.
Para mais informações sobre esse assunto, consulte a documentação oficial do Github, clicando aqui.

E se meu arquivo possui mais de 100MB? O que fazer?

Apesar de não ser uma situação tão comum no dia a dia de desenvolvimento, pode surgir a necessidade de versionar um arquivo que atinja ou exceda esse limite imposto pelo Github.

Citando até mesmo o cenário que deu origem para este artigo. Eu finalizei o treinamento de uma rede neural que durou um pouco mais de 40
minutos, armazenei o resultado em um arquivo .h5 (Hierarchical Data Format), porém o arquivo atingiu 250MB.

Foi então que conheci o LFS (Git Large File Storage), uma extensão Git, open source, para versionamento de arquivos que ultrapassam o limite de 100MB.

Mas como o Git LFS resolve esse problema?

O Git Large File Storage (LFS) irá gerenciar pessoalmente os arquivos individuais, isso acontece por meio de comandos no terminal, com isso, o Git
LFS será capaz de identificar os arquivos classificados como “grandes” e irá substituí-los por ponteiros de texto dentro do Git, enquanto armazena o
conteúdo do arquivo em um servidor remoto como GitHub.com ou GitHub Enterprise.

Benefícios de utilizar essa prática:
1. Armazenamento de arquivos com mais de 100MB
2. O armazenamento externo com o Git LFS permite seu repositório se manter com um tamanho gerenciável natural
3. Ações como clonar o repositório e buscar arquivos serão mais ágeis
4. Dispensa a necessidade de sistemas terceiros ou comandos adicionais
5. Os arquivos “grandes” herdam o controle de acesso e permissionamento do repositório

Como saber se estou enfrentando um erro de limite?

Em princípio, existem duas maneiras bem simples de checar:

  1. Verificar manualmente se algum arquivo no seu commit atual atingiu ou excedeu 100MB.
  2. No momento que este artigo é publicado o erro exibido pelo git no terminal possui uma mensagem bem grande, porém finaliza com o
    seguinte padrão:

remote: **error**: GH001: Large files detected. You may want to try
Git Large File Storage - https://git-lfs.github.com.
remote: **error**: Trace: 567a11e500b2a0e363098e9521e67f28
remote: **error**: See http://git.io/iEPt8g for more information.
remote: **error**: File model.h5 is 250.33 MB; this exceeds GitHub's
file size limit of 100.00 MB
To github.com:robertosousa1/skin-cancer-detection.git
! [remote rejected] HEAD -> master (pre-receive hook declined)
error: failed to push some refs to 'git@github.com:robertosousa1/skin-
cancer-detection.git'

Observação:
model.h5 é o arquivo que exceu 100MB
robertosousa1 é o meu usuário no Github
skin-cancer-detection é o repositório utilizado

Implementando o Git Large File Storage

Observação: É um pré-requisito que o Git esteja instalado previamente para executar os comandos a seguir.

1ª etapa

Primeiro, por se tratar de uma extensão, é necessário que seja instalado.

 git lfs install

É necessário executar o comando apenas uma vez por conta de usuário

2ª etapa

Iremos informar quais extensões de arquivos o Git LFS irá gerenciar.

Podemos adicionar manualmente no .gitattributes.

 *.h5 filter=lfs diff=lfs merge=lfs -text

Ou via terminal:

 git lfs track "*.h5"

Nesse exemplo estamos utilizando a extensão “.h5”, não esqueça de modificar o comando para o seu cenário.

3ª etapa

Certifique-se que o .gitattributes seja rastreado.

 git add .gitattributes

4ª etapa

Bastar seguir com o commit do seu arquivo.

 git add model.h5
 git commit -m "add file with trained neural network"
 git push origin master

A saída do terminal será algo semelhante a:

Uploading LFS objects: 100% (1/1), 262 MB | 1.0 MB/s, done.
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 481 bytes | 481.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To github.com:robertosousa1/skin-cancer-detection.git
f7a1050..be7ede0 master -> master

Visualizando o Git LFS na sua conta

Como mencionamos acima, o Git LFS é configurado na sua conta de usuário do Github independente da máquina local que esteja sendo utilizada.
Para visualizar o uso do Git LFS na sua conta do Github basta seguir os passos abaixo:

1. No canto superior direito de qualquer página, clique na sua foto de perfil e, em seguida, clique em Settings.

2. Na barra lateral de configurações do usuário, clique em Billing & plans.

3. Clique em Subscriptions

Por padrão, a tab Subscriptions está selecionada. Apenas, certifique-se de que está na aba correta.

4. Veja os detalhes do uso de armazenamento em Git LFS Data

Conclusão

Nesse artigo aprendemos a armazenar arquivos com mais de 100MB no Github com Git LFS.