O git é bom com arquivos binários?
Se eu tivesse muitos arquivos descompactados sendo modificados, e muitos arquivos compactados nunca (ou quase nunca) modificados, o git lidaria bem com isso? Por exemplo, se eu inserir ou remover o meio e inserir dados perto do final, ele notará isso como acontece com o texto?
Se o git não for bom com arquivos binários, qual ferramenta devo considerar?
Respostas:
Pronto para uso, o git pode facilmente adicionar arquivos binários ao seu índice e também armazená-los de uma maneira eficiente, a menos que você faça atualizações frequentes em grandes arquivos não compactáveis.
Os problemas começam quando o git precisa gerar diffs e mesclagens: git não pode gerar diffs significativos ou mesclar arquivos binários de qualquer maneira que possa fazer sentido. Portanto, todas as mesclagens, rebases ou escolhas que envolvem uma alteração em um arquivo binário envolvem você na resolução manual de conflitos nesse arquivo binário.
Você precisa decidir se as alterações no arquivo binário são raras o suficiente para que você possa conviver com o trabalho manual extra que elas causam no fluxo de trabalho normal do git envolvendo mesclagens, rebases, escolhas seletivas.
fonte
git diff --binary
será capaz de corrigir arquivos binários.Além de outras respostas.
Você pode enviar um diff para um arquivo binário usando o chamado formato diff binário . Não é legível por humanos e só pode ser aplicado se você tiver uma pré-imagem exata em seu repositório, ou seja, sem fuzz.
Um exemplo:
Você pode usar textconv gitattribute para
git diff
mostrar diff legível por humanos para arquivos binários ou partes de arquivos binários. Por exemplo, para arquivos * .jpg, pode haver diferença nas informações EXIF, para arquivos PDF pode haver diferença entre sua representação de texto (pdf2text ou algo parecido).HTH.
fonte
Se você tiver arquivos binários realmente grandes, pode usar git-attachment para armazenar os dados fora do repositório. Confira: http://git-annex.branchable.com/
fonte
Não conheço nenhuma ferramenta que tente armazenar diffs de arquivos binários para controle de versão, mas é importante notar que o Git não faz isso nem mesmo para arquivos de texto. O Git armazena arquivos como blobs e faz uma diferença entre eles quando necessário.
Se você está procurando fazer o controle de versão em algo como documentos do Photoshop / Illustrator, o GridIron Flow pode fazer o truque para você. Se você está tentando mantê-los sincronizados entre as máquinas, o Dropbox ou Rsync pode lidar com isso, mas eles não farão diferenças inteligentes.
fonte
git gc
para fazer a coleta de lixo. Da mesma página: "Como o Git armazena cada versão de cada arquivo como um objeto separado, ele pode se tornar bastante ineficiente. Imagine ter um arquivo com vários milhares de linhas e alterar uma única linha. O Git armazenará o segundo arquivo por completo, o que é um grande desperdício de espaço. "git gc
: "Os usuários são incentivados a executar esta tarefa regularmente em cada repositório para manter uma boa utilização do espaço em disco e um bom desempenho operacional. Alguns comandos git podem executar git gc automaticamente; consulte a sinalização --auto abaixo para obter detalhes . "Bem, git é bom com binários. Mas não lida com binários como arquivos de texto. É como se você quisesse mesclar arquivos binários. Quero dizer, um diff em um jpeg nunca retornará nada. Git funciona muito bem com arquivos de texto e provavelmente tão ruim quanto qualquer outra solução com arquivos binários!
fonte
se você quiser uma solução para o controle de versão, pode considerar git-lfs, que possui um ponteiro leve para o seu arquivo.
significa que quando você clona seu repo, ele não baixa todas as versões, mas apenas aquela que está em check-out.
Aqui está um bom tutorial de como usá-lo
fonte