128 votes

Est-ce que git est bon avec les fichiers binaires?

Est-ce que git est bon avec les fichiers binaires?

Dire que si j'ai beaucoup de fichiers non compressés en cours de modification, et beaucoup de fichiers compressés jamais modifiés (ou presque jamais) git le gérera bien? comme si, si j'insère ou enlève le milieu et que j'insère des données vers la fin, il le remarquera comme il le fait avec du texte?

Si git n'est pas bon avec binaire, quel outil puis-je prendre en compte?

67voto

ndim Points 11557

Hors de la boîte, git pouvez facilement ajouter des fichiers binaires à son index, et aussi de les stocker de manière efficace, sauf si vous faites des mises à jour fréquentes sur les grandes uncompressable fichiers.

Les problèmes commencent lorsque git doit générer des diffs et fusionne: git ne peut pas générer des diffs, ou de fusionner des fichiers binaires d'une façon qui pourrait faire sens. De sorte que toutes les fusions, rebases ou cherrypicks impliquant une modification à un fichier binaire implique vous faire un manuel de résolution des conflits sur que fichier binaire.

Vous devez décider si le fichier binaire changements sont assez rares pour que vous puissiez vivre avec le supplément de travail manuel qu'ils causent à la normale de git impliquant des fusions, rebases, cherrypicks.

54voto

Jakub Narębski Points 87537

En plus d'autres réponses.

  • Vous pouvez envoyer un diff de fichier binaire à l'aide dite binaire diff format. Il n'est pas lisible par l'homme, et il ne peut être appliqué que si vous avez exacte preimage dans votre référentiel, c'est à dire sans aucune fuzz.
    Un exemple:

    diff --git a/gitweb/git-favicon.png b/gitweb/git-favicon.png
    index de637c0608090162a6ce6b51d5f9bfe512cf8bcf..aae35a70e70351fe6dcb3e905e2e388cf0cb0ac3 100
    GIT binary patch
    delta 85
    zcmZ3&SUf?+pEJNG#Pt9J149GD|NsBH{?u>)*{Yr{jv*Y^lOtGJcy4sCvGS>LGzvuT
    nGSco!%*slUXkjQ0+{(x>@rZKt$^5c~Kn)C@u6{1-oD!M<s|Fj6
    
    delta 135
    zcmXS3!Z<;to+rR3#Pt9J149GDe=s<ftM(tr<t*@sEM{Qf76xHPhFNnYfP!|OE{-7;
    zjI0MY3OYE5upapO?DR{I1pyyR7cx(jY7y^{FfMCvb5IaiQM`NJfeQjFwttKJyJNq@
    hveI=@x=fAo=hV3$-MIWu9%vGSr>mdKI;RB2CICA_GnfDX
    
  • Vous pouvez utiliser textconv gitattribute avoir git diff spectacle lisible diff pour les fichiers binaires, ou des parties de fichiers binaires. Par exemple pour *.les fichiers jpg, il peut être la différence dans les informations EXIF, pour les fichiers PDF, il peut être la différence entre le texte de leur représentation (pdf2text ou quelque chose comme ça).

HTH.

17voto

John Gibb Points 4473

Si vous avez de très gros fichiers binaires, vous pouvez utiliser git-annex pour stocker les données en dehors du référentiel. Départ: http://git-annex.branchable.com/

5voto

coreyward Points 26109

Je ne sais pas du tout des outils que d'essayer de stocker des diff de fichiers binaires pour le contrôle de version, mais il est intéressant de noter que Git ne pas le faire même pour les fichiers texte. Git stocke les fichiers comme les gouttes, et il fait un diff entre eux quand il en a besoin.

Si vous cherchez à faire de contrôle de version sur quelque chose comme Photoshop/Illustrator documents, Gril Flux pourrait faire l'affaire pour vous. Si vous êtes en essayant de garder la synchronisation entre les machines, Dropbox ou Rsync peut le manipuler, mais ils ne vont pas faire intelligent diff-ing.

5voto

Eh bien, c'est bien avec les binaires. Mais il ne gérera pas les fichiers binaires comme les fichiers texte. C'est comme si vous vouliez fusionner des fichiers binaires. Je veux dire, un diff sur un jpeg ne vous retournera jamais rien. Git fonctionne très bien avec les fichiers texte et probablement aussi mauvais que toute autre solution avec des fichiers binaires!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X