Muitos projetos de pesquisa têm arquivos de dados, ou arquivos
temporários de análises, que são grandes e o GitHub vai reclamar se você
tiver arquivos acima de 50 MB. Se você tentar adicionar um arquivo com
mais do que 100 MB ao seu repositório, você não vai conseguir.
Existem algumas alternativas para lidar com arquivos grandes. Uma
delas é utilizando um serviço oferecido pelo próprio GitHub, chamado Git
Large Files Storage (veja a documentação
do GitHub).
Uma alternativa é usar o pacote R piggyback
,
que fornece uma interface R para armazenar arquivos como recurso/ativo
de versão do GitHub (veja sobre versão/release nesse
roteiro e na documentação
do GitHub. Ou seja, o piggyback
vai ajudar a criar
versões do repositório e incluir nesta versão os arquivos grandes
necessários. Porém, não vai fazer versionamento deste arquivo e toda vez
que houver alteração no arquivo grande, você precisará criar uma nova
versão do repositório para adicioná-la. A limitação de tamanho para os
arquivos é de 2 GB.
Git LFS
O Git Large Files Storage é uma extensão git do GitHub para
versionamento de grandes arquivos. É útil para projetos que contêm
arquivos grandes que, particularmente, são modificados regularmente e
que precisam ser versionados. A extensão substitui arquivos grandes,
como amostras de áudio, vídeos, conjuntos de dados e gráficos, por
ponteiros de texto dentro do Git, enquanto armazena o conteúdo do
arquivo em um servidor remoto como o GitHub.com. Ou seja, o Git LFS cria
um arquivo de ponteiro que funciona como uma referência ao arquivo real,
e o GitHub vai gerenciar esse arquivo de ponteiro no seu repositório.
Quando você clona o repositório, o GitHub usa o arquivo de ponteiro como
um mapa para encontrar o arquivo grande para você.
A versão gratuita de utilização do git LFS é de 1 a 2 GB de
armazenamento e o mesmo por mês de largura de banda. Caso precise de
mais armazenamento, você pode comprar cotas adicionais para git LFS. Por
US$10,00 você tem capacidade de armazenamento e largura de banda mensal
de 100 GB (valores de Julho de 2024).
Largura de banda e uso de armazenamento contam apenas na conta do
proprietário do repositório. Na bifurcação, largura de banda e o uso do
armazenamento contam contra a raiz da rede do repositório. Qualquer
pessoa com acesso para gravação a um repositório pode fazer push de
arquivos para o Git LFS sem afetar suas compras de pacotes de dados ou
cotas de bandwidth e armazenamento pessoais. Criar forks e transferir um
repositório conta no uso de bandwidth do repositório principal. (fonte;
https://docs.github.com/pt/billing/managing-billing-for-git-large-file-storage/about-billing-for-git-large-file-storage)
Uma desvantagem é que colaboradores e pessoas que queira clonar seu
repositório precisarão também instalar o git LFS em seus computadores
para serem capazes de baixar os arquivos grandes. Caso contrário, apenas
os arquivos “ponteiros” serão baixados. Se você usar esse serviço em
algum dos seus repositórios, lembre-se de alertar o uso do git LFS aos
leitores e indicar como fazer o clone/download/fork do repositório
corretamente. Veja esse documento
para saber mais sobre colaboração com o Git LFS
Para utilizar o git LFS siga o roteiro
da página oficial do git LFS para instalar, adicionar e gerenciar os
documentos grandes via linha de comando.
Piggyback
O piggyback
é
uma alternativa gratuita ao Git LFS e se usa da possibilidade de criar
versões do repositório e, assim, empacotar os arquivos grandes junto
desta versão. Ele faz isso provendo uma interface R para manejar os
arquivos grandes (downloads e uploads) e as versões, que são então
passados para a API do GitHub.
Não é necessário nenhuma autenticação para fazer download de dados de
repositórios públicos usando Piggyback. Mas recomenda-se ajustar um
Token para evitar limites de transferência e, claro, a autenticacção é
necessária para repositórios privados. Mais sobre tokens veja esse roteiro.
Vale lembrar que o piggyback
não é uma solução para
arquivamento de dados, nem é o Git LFS). O piggyback destina-se apenas a
reduzir o atrito de trabalhar com dados durante o processo de pesquisa
(por exemplo, fornecer dados acessíveis a colaboradores ou sistemas de
integração contínua durante o processo de pesquisa, inclusive para
repositórios privados). A página do pacote, assim como nós, recomenda o
arquivamento dos dados em um repositório de dados adequado (temático ou
genérico, dependendo do interesse do pesquisador e da natureza dos
dados), que forneça um DOI de preferência.
Para saber mais sobre o piggyback
e sua funcionalidade,
visite a página do
pacote, que contém roteiros para iniciantes e informações relevantes
sobre o pacote.
LS0tDQp0aXRsZTogIkxpZGFuZG8gY29tIGFycXVpdm9zIGdyYW5kZXMgbnVtIHJlcG9zaXTDs3JpbyBubyBHaXRIdWIiDQphdXRob3I6ICJNZWxpbmEgTGVpdGUiDQpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiDQpvdXRwdXQ6IGh0bWxfZG9jdW1lbnQNCi0tLQ0KDQoNCk11aXRvcyBwcm9qZXRvcyBkZSBwZXNxdWlzYSB0w6ptIGFycXVpdm9zIGRlIGRhZG9zLCBvdSBhcnF1aXZvcyB0ZW1wb3LDoXJpb3MgZGUgYW7DoWxpc2VzLCBxdWUgc8OjbyBncmFuZGVzIGUgbyBHaXRIdWIgdmFpIHJlY2xhbWFyIHNlIHZvY8OqIHRpdmVyIGFycXVpdm9zIGFjaW1hIGRlIDUwIE1CLiBTZSB2b2PDqiB0ZW50YXIgYWRpY2lvbmFyIHVtIGFycXVpdm8gY29tIG1haXMgZG8gcXVlIDEwMCBNQiBhbyBzZXUgcmVwb3NpdMOzcmlvLCB2b2PDqiBuw6NvIHZhaSBjb25zZWd1aXIuDQoNCkV4aXN0ZW0gYWxndW1hcyBhbHRlcm5hdGl2YXMgcGFyYSBsaWRhciBjb20gYXJxdWl2b3MgZ3JhbmRlcy4gVW1hIGRlbGFzIMOpIHV0aWxpemFuZG8gdW0gc2VydmnDp28gb2ZlcmVjaWRvIHBlbG8gcHLDs3ByaW8gR2l0SHViLCBjaGFtYWRvIEdpdCBMYXJnZSBGaWxlcyBTdG9yYWdlICAodmVqYSBhIFtkb2N1bWVudGHDp8OjbyBkbyBHaXRIdWJdKGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3B0L3JlcG9zaXRvcmllcy93b3JraW5nLXdpdGgtZmlsZXMvbWFuYWdpbmctbGFyZ2UtZmlsZXMvYWJvdXQtbGFyZ2UtZmlsZXMtb24tZ2l0aHViKSkuDQoNClVtYSBhbHRlcm5hdGl2YSDDqSB1c2FyIG8gcGFjb3RlIFIgW2BwaWdneWJhY2tgXShodHRwczovL2RvY3Mucm9wZW5zY2kub3JnL3BpZ2d5YmFjay8pLCBxdWUgZm9ybmVjZSB1bWEgaW50ZXJmYWNlIFIgcGFyYSBhcm1hemVuYXIgYXJxdWl2b3MgY29tbyByZWN1cnNvL2F0aXZvIGRlIHZlcnPDo28gZG8gR2l0SHViICh2ZWphIHNvYnJlIHZlcnPDo28vcmVsZWFzZSBbbmVzc2Ugcm90ZWlyb10oaHR0cHM6Ly9nYWJyaWVsbmFrYW11cmEuZ2l0aHViLmlvL1VTUF9yZXByb2R1Y2liaWxpdHlfQklFNTc5OC9yZWxlYXNpbmcuaHRtbCkgZSBuYSBbZG9jdW1lbnRhw6fDo28gZG8gR2l0SHViXShodHRwczovL2RvY3MuZ2l0aHViLmNvbS9wdC9yZXBvc2l0b3JpZXMvcmVsZWFzaW5nLXByb2plY3RzLW9uLWdpdGh1Yi9hYm91dC1yZWxlYXNlcykuIE91IHNlamEsIG8gYHBpZ2d5YmFja2AgdmFpIGFqdWRhciBhIGNyaWFyIHZlcnPDtWVzIGRvIHJlcG9zaXTDs3JpbyBlIGluY2x1aXIgbmVzdGEgdmVyc8OjbyBvcyBhcnF1aXZvcyBncmFuZGVzIG5lY2Vzc8Ohcmlvcy4gUG9yw6ltLCBuw6NvIHZhaSBmYXplciB2ZXJzaW9uYW1lbnRvIGRlc3RlIGFycXVpdm8gZSB0b2RhIHZleiBxdWUgaG91dmVyIGFsdGVyYcOnw6NvIG5vIGFycXVpdm8gZ3JhbmRlLCB2b2PDqiBwcmVjaXNhcsOhIGNyaWFyIHVtYSBub3ZhIHZlcnPDo28gZG8gcmVwb3NpdMOzcmlvIHBhcmEgYWRpY2lvbsOhLWxhLiBBIGxpbWl0YcOnw6NvIGRlIHRhbWFuaG8gcGFyYSBvcyBhcnF1aXZvcyDDqSBkZSAyIEdCLg0KDQoNCiMjIEdpdCBMRlMNCg0KTyBHaXQgTGFyZ2UgRmlsZXMgU3RvcmFnZSDDqSB1bWEgZXh0ZW5zw6NvIGdpdCBkbyBHaXRIdWIgcGFyYSB2ZXJzaW9uYW1lbnRvIGRlIGdyYW5kZXMgYXJxdWl2b3MuIMOJIMO6dGlsIHBhcmEgcHJvamV0b3MgcXVlIGNvbnTDqm0gYXJxdWl2b3MgZ3JhbmRlcyBxdWUsIHBhcnRpY3VsYXJtZW50ZSwgc8OjbyBtb2RpZmljYWRvcyByZWd1bGFybWVudGUgZSBxdWUgcHJlY2lzYW0gc2VyIHZlcnNpb25hZG9zLiBBIGV4dGVuc8OjbyBzdWJzdGl0dWkgYXJxdWl2b3MgZ3JhbmRlcywgY29tbyBhbW9zdHJhcyBkZSDDoXVkaW8sIHbDrWRlb3MsIGNvbmp1bnRvcyBkZSBkYWRvcyBlIGdyw6FmaWNvcywgcG9yIHBvbnRlaXJvcyBkZSB0ZXh0byBkZW50cm8gZG8gR2l0LCBlbnF1YW50byBhcm1hemVuYSBvIGNvbnRlw7pkbyBkbyBhcnF1aXZvIGVtIHVtIHNlcnZpZG9yIHJlbW90byBjb21vIG8gR2l0SHViLmNvbS4gT3Ugc2VqYSwgbyBHaXQgTEZTIGNyaWEgdW0gYXJxdWl2byBkZSBwb250ZWlybyBxdWUgZnVuY2lvbmEgY29tbyB1bWEgcmVmZXLDqm5jaWEgYW8gYXJxdWl2byByZWFsLCBlIG8gR2l0SHViIHZhaSBnZXJlbmNpYXIgZXNzZSBhcnF1aXZvIGRlIHBvbnRlaXJvIG5vIHNldSByZXBvc2l0w7NyaW8uIFF1YW5kbyB2b2PDqiBjbG9uYSBvIHJlcG9zaXTDs3JpbywgbyBHaXRIdWIgdXNhIG8gYXJxdWl2byBkZSBwb250ZWlybyBjb21vIHVtIG1hcGEgcGFyYSBlbmNvbnRyYXIgbyBhcnF1aXZvIGdyYW5kZSBwYXJhIHZvY8OqLg0KDQpBIHZlcnPDo28gZ3JhdHVpdGEgZGUgdXRpbGl6YcOnw6NvIGRvIGdpdCBMRlMgw6kgZGUgMSBhIDIgR0IgZGUgYXJtYXplbmFtZW50byBlIG8gbWVzbW8gcG9yIG3DqnMgZGUgbGFyZ3VyYSBkZSBiYW5kYS4gQ2FzbyBwcmVjaXNlIGRlIG1haXMgYXJtYXplbmFtZW50bywgdm9jw6ogcG9kZSBjb21wcmFyIGNvdGFzIGFkaWNpb25haXMgcGFyYSBnaXQgTEZTLiBQb3IgVVMkMTAsMDAgdm9jw6ogdGVtIGNhcGFjaWRhZGUgZGUgYXJtYXplbmFtZW50byBlIGxhcmd1cmEgZGUgYmFuZGEgbWVuc2FsIGRlIDEwMCBHQiAodmFsb3JlcyBkZSBKdWxobyBkZSAyMDI0KS4NCg0KTGFyZ3VyYSBkZSBiYW5kYSBlIHVzbyBkZSBhcm1hemVuYW1lbnRvIGNvbnRhbSBhcGVuYXMgbmEgY29udGEgZG8gcHJvcHJpZXTDoXJpbyBkbyByZXBvc2l0w7NyaW8uIE5hIGJpZnVyY2HDp8OjbywgbGFyZ3VyYSBkZSBiYW5kYSBlIG8gdXNvIGRvIGFybWF6ZW5hbWVudG8gY29udGFtIGNvbnRyYSBhIHJhaXogZGEgcmVkZSBkbyByZXBvc2l0w7NyaW8uIFF1YWxxdWVyIHBlc3NvYSBjb20gYWNlc3NvIHBhcmEgZ3JhdmHDp8OjbyBhIHVtIHJlcG9zaXTDs3JpbyBwb2RlIGZhemVyIHB1c2ggZGUgYXJxdWl2b3MgcGFyYSBvIEdpdCBMRlMgc2VtIGFmZXRhciBzdWFzIGNvbXByYXMgZGUgcGFjb3RlcyBkZSBkYWRvcyBvdSBjb3RhcyBkZSBiYW5kd2lkdGggZSBhcm1hemVuYW1lbnRvIHBlc3NvYWlzLiBDcmlhciBmb3JrcyBlIHRyYW5zZmVyaXIgdW0gcmVwb3NpdMOzcmlvIGNvbnRhIG5vIHVzbyBkZSBiYW5kd2lkdGggZG8gcmVwb3NpdMOzcmlvIHByaW5jaXBhbC4gKGZvbnRlOyBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9wdC9iaWxsaW5nL21hbmFnaW5nLWJpbGxpbmctZm9yLWdpdC1sYXJnZS1maWxlLXN0b3JhZ2UvYWJvdXQtYmlsbGluZy1mb3ItZ2l0LWxhcmdlLWZpbGUtc3RvcmFnZSkNCg0KVW1hIGRlc3ZhbnRhZ2VtIMOpIHF1ZSBjb2xhYm9yYWRvcmVzIGUgcGVzc29hcyBxdWUgcXVlaXJhIGNsb25hciBzZXUgcmVwb3NpdMOzcmlvIHByZWNpc2Fyw6NvIHRhbWLDqW0gaW5zdGFsYXIgbyBnaXQgTEZTIGVtIHNldXMgY29tcHV0YWRvcmVzIHBhcmEgc2VyZW0gY2FwYXplcyBkZSBiYWl4YXIgb3MgYXJxdWl2b3MgZ3JhbmRlcy4gQ2FzbyBjb250csOhcmlvLCBhcGVuYXMgb3MgYXJxdWl2b3MgInBvbnRlaXJvcyIgc2Vyw6NvIGJhaXhhZG9zLiBTZSB2b2PDqiB1c2FyIGVzc2Ugc2VydmnDp28gZW0gYWxndW0gZG9zIHNldXMgcmVwb3NpdMOzcmlvcywgbGVtYnJlLXNlIGRlIGFsZXJ0YXIgbyB1c28gZG8gZ2l0IExGUyBhb3MgbGVpdG9yZXMgZSBpbmRpY2FyIGNvbW8gZmF6ZXIgbyBjbG9uZS9kb3dubG9hZC9mb3JrIGRvIHJlcG9zaXTDs3JpbyBjb3JyZXRhbWVudGUuIFZlamEgZXNzZSBbZG9jdW1lbnRvXShodHRwczovL2RvY3MuZ2l0aHViLmNvbS9wdC9yZXBvc2l0b3JpZXMvd29ya2luZy13aXRoLWZpbGVzL21hbmFnaW5nLWxhcmdlLWZpbGVzL2NvbGxhYm9yYXRpb24td2l0aC1naXQtbGFyZ2UtZmlsZS1zdG9yYWdlKSBwYXJhIHNhYmVyIG1haXMgc29icmUgY29sYWJvcmHDp8OjbyBjb20gbyBHaXQgTEZTDQoNClBhcmEgdXRpbGl6YXIgbyBnaXQgTEZTIHNpZ2EgbyBbcm90ZWlybyBkYSBww6FnaW5hIG9maWNpYWwgZG8gZ2l0IExGU10oaHR0cHM6Ly9naXQtbGZzLmNvbS8pIHBhcmEgaW5zdGFsYXIsIGFkaWNpb25hciBlIGdlcmVuY2lhciBvcyBkb2N1bWVudG9zIGdyYW5kZXMgdmlhIGxpbmhhIGRlIGNvbWFuZG8uDQoNCg0KDQojIyBQaWdneWJhY2sNCg0KTyBbYHBpZ2d5YmFja2BdKGh0dHBzOi8vZG9jcy5yb3BlbnNjaS5vcmcvcGlnZ3liYWNrLykgw6kgdW1hIGFsdGVybmF0aXZhIGdyYXR1aXRhIGFvIEdpdCBMRlMgZSBzZSB1c2EgZGEgcG9zc2liaWxpZGFkZSBkZSBjcmlhciB2ZXJzw7VlcyBkbyByZXBvc2l0w7NyaW8gZSwgYXNzaW0sIGVtcGFjb3RhciBvcyBhcnF1aXZvcyBncmFuZGVzIGp1bnRvIGRlc3RhIHZlcnPDo28uIEVsZSBmYXogaXNzbyBwcm92ZW5kbyB1bWEgaW50ZXJmYWNlIFIgcGFyYSBtYW5lamFyIG9zIGFycXVpdm9zIGdyYW5kZXMgKGRvd25sb2FkcyBlIHVwbG9hZHMpIGUgYXMgdmVyc8O1ZXMsIHF1ZSBzw6NvIGVudMOjbyBwYXNzYWRvcyBwYXJhIGEgQVBJIGRvIEdpdEh1Yi4gDQoNCk7Do28gw6kgbmVjZXNzw6FyaW8gbmVuaHVtYSBhdXRlbnRpY2HDp8OjbyBwYXJhIGZhemVyIGRvd25sb2FkIGRlIGRhZG9zIGRlIHJlcG9zaXTDs3Jpb3MgcMO6YmxpY29zIHVzYW5kbyBQaWdneWJhY2suIE1hcyByZWNvbWVuZGEtc2UgYWp1c3RhciB1bSBUb2tlbiBwYXJhIGV2aXRhciBsaW1pdGVzIGRlIHRyYW5zZmVyw6puY2lhIGUsIGNsYXJvLCBhIGF1dGVudGljYWPDp8OjbyDDqSBuZWNlc3PDoXJpYSBwYXJhIHJlcG9zaXTDs3Jpb3MgcHJpdmFkb3MuIE1haXMgc29icmUgdG9rZW5zIHZlamEgZXNzZSBbcm90ZWlyb10oaHR0cHM6Ly9nYWJyaWVsbmFrYW11cmEuZ2l0aHViLmlvL1VTUF9yZXByb2R1Y2liaWxpdHlfQklFNTc5OC9iYXNpY3NfZ2l0Lmh0bWwjQ29uZmlndXJhJUMzJUE3JUMzJUEzb19kb19HaXRfZV9pbnRlZ3JhJUMzJUE3JUMzJUEzb19jb21fUlN0dWRpbykuDQoNClZhbGUgbGVtYnJhciBxdWUgbyBgcGlnZ3liYWNrYCBuw6NvIMOpIHVtYSBzb2x1w6fDo28gcGFyYSBhcnF1aXZhbWVudG8gZGUgZGFkb3MsIG5lbSDDqSBvIEdpdCBMRlMpLiBPIHBpZ2d5YmFjayBkZXN0aW5hLXNlIGFwZW5hcyBhIHJlZHV6aXIgbyBhdHJpdG8gZGUgdHJhYmFsaGFyIGNvbSBkYWRvcyBkdXJhbnRlIG8gcHJvY2Vzc28gZGUgcGVzcXVpc2EgKHBvciBleGVtcGxvLCBmb3JuZWNlciBkYWRvcyBhY2Vzc8OtdmVpcyBhIGNvbGFib3JhZG9yZXMgb3Ugc2lzdGVtYXMgZGUgaW50ZWdyYcOnw6NvIGNvbnTDrW51YSBkdXJhbnRlIG8gcHJvY2Vzc28gZGUgcGVzcXVpc2EsIGluY2x1c2l2ZSBwYXJhIHJlcG9zaXTDs3Jpb3MgcHJpdmFkb3MpLiBBIHDDoWdpbmEgZG8gcGFjb3RlLCBhc3NpbSBjb21vIG7Ds3MsIHJlY29tZW5kYSBvIGFycXVpdmFtZW50byBkb3MgZGFkb3MgZW0gdW0gcmVwb3NpdMOzcmlvIGRlIGRhZG9zIGFkZXF1YWRvICh0ZW3DoXRpY28gb3UgZ2Vuw6lyaWNvLCBkZXBlbmRlbmRvIGRvIGludGVyZXNzZSBkbyBwZXNxdWlzYWRvciBlIGRhIG5hdHVyZXphIGRvcyBkYWRvcyksIHF1ZSBmb3JuZcOnYSB1bSBET0kgZGUgcHJlZmVyw6puY2lhLg0KDQpQYXJhIHNhYmVyIG1haXMgc29icmUgbyBgcGlnZ3liYWNrYCBlIHN1YSBmdW5jaW9uYWxpZGFkZSwgdmlzaXRlIGEgW3DDoWdpbmEgZG8gcGFjb3RlXSgoaHR0cHM6Ly9kb2NzLnJvcGVuc2NpLm9yZy9waWdneWJhY2svKSksIHF1ZSBjb250w6ltIHJvdGVpcm9zIHBhcmEgaW5pY2lhbnRlcyBlIGluZm9ybWHDp8O1ZXMgcmVsZXZhbnRlcyBzb2JyZSBvIHBhY290ZS4NCg0KDQoNCg==