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

Est-ce que git est bien avec les fichiers binarys?

Si de nombreux fichiers non compressés sont en cours de modification et que de nombreux fichiers compressés ne sont jamais (ou presque jamais) modifiés, git le gérera-t-il correctement? Par exemple, si j’insère ou supprime le milieu et insère des données près de la fin, il le remarquera comme avec le texte?

Si git n’est pas bon avec les fichiers binarys, quel outil puis-je considérer?

En plus d’autres réponses.

  • Vous pouvez envoyer un fichier diff à un fichier binary en utilisant ce qu’on appelle le format binary . Ce n’est pas lisible par l’homme, et il ne peut être appliqué que si vous avez une pré-image exacte dans votre référentiel, c’est-à-dire sans 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!MmdKI;RB2CICA_GnfDX 
  • Vous pouvez utiliser textconv gitatsortingbute pour que git diff diff soit lisible par l’homme pour les fichiers binarys ou des parties de fichiers binarys. Par exemple, pour les fichiers * .jpg, cela peut être une différence dans les informations EXIF. Pour les fichiers PDF, cela peut être une différence entre leur représentation textuelle (pdf2text ou quelque chose comme ça).

HTH.

Par défaut, git peut facilement append des fichiers binarys à son index et les stocker de manière efficace, sauf si vous effectuez des mises à jour fréquentes sur de gros fichiers non compressables.

Les problèmes commencent lorsque git doit générer des diffs et des fusions: git ne peut pas générer de diffs significatifs ou fusionner des fichiers binarys d’une manière qui pourrait avoir un sens. Donc, toutes les fusions, rebases ou sélections de cerises impliquant un changement dans un fichier binary impliqueront une résolution de conflit manuelle sur ce fichier binary.

Vous devez décider si les modifications du fichier binary sont suffisamment rares pour que vous puissiez vivre avec le travail manuel supplémentaire qu’elles entraînent dans le stream de production normal de git, qui implique des fusions, des rebases et des sélections de cerises.

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

Je ne connais aucun outil qui essaie de stocker les diffs de fichiers binarys pour le contrôle de version, mais il convient de noter que Git ne le fait pas même pour les fichiers texte. Git stocke les fichiers sous forme de blobs et les diffère quand il le faut.

Si vous souhaitez contrôler les versions sur des documents tels que Photoshop / Illustrator, GridIron Flow peut vous aider. Si vous essayez de les maintenir synchrones entre les machines, Dropbox ou Rsync peuvent les gérer, mais elles ne vont pas faire de diffcing intelligent.

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