Est git bon avec les fichiers binaires?
Est git bon avec les fichiers binaires?
Si j'ai beaucoup de fichiers non compressés en cours de modification, et de nombreux fichiers compressés jamais (ou presque jamais) modifié, serait git débrouille bien? Par exemple, si j'ai d'insérer ou de retirer du milieu et de l'insertion de données près de la fin il va le remarquer, comme il le fait avec le texte?
Si git n'est pas bonne avec des fichiers binaires, quel outil puis-je envisager?
- très bon avec les binaires - je l'utilise moi-même
- C'est un peu vrai. Vous pouvez mettre votre /home sous git révision et il devrait fonctionner assez bien.
- Ce n'est pas dans l'esprit de la question, qui a été clairement indiqué comme étant le fait de savoir si les fichiers binaires avait diff est fait sur eux (probablement pour le dépôt de ballonnements et des raisons de performances). Cependant, je n'ai pas downvote il (et il semble que celui qui n'a, depuis, supprimé).
- Remarque: vous avez maintenant git-lts, pour stocker vos fichiers binaires ailleurs: stackoverflow.com/a/29530784/6309
- Est-il gonfle le .git dossier?
Vous devez vous connecter pour publier un commentaire.
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:
Vous pouvez utiliser textconv gitattribute avoir
git diff
montrer 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.
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.
git diff --binary
sera capable de traiter des fichiers binaires.Si vous avez vraiment de gros fichiers binaires, vous pouvez utiliser git-annex pour stocker les données en dehors du référentiel. Découvrez: http://git-annex.branchable.com/
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 De Flux De 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.
git gc
à faire la collecte des ordures. À partir de la même page: "Depuis Git stocke chaque version de chaque fichier comme un objet séparé, il peut être assez inefficace. Imaginez avoir un fichier de plusieurs milliers de lignes de long et de changer une seule ligne. Git va stocker le fichier dans son intégralité, ce qui est un grand gaspillage de l'espace."git gc
: "les Utilisateurs sont encouragés à exécuter cette tâche sur une base régulière à l'intérieur de chaque référentiel de maintenir une bonne utilisation de l'espace disque et de la bonne performance de l'exploitation. Certaines commandes git peut s'exécuter automatiquement git gc; voir l' --auto drapeau ci-dessous pour plus de détails."Bien git est bon avec les fichiers binaires. Mais il ne gère pas les fichiers binaires comme des fichiers texte. C'est comme vous voulez fusionner des fichiers binaires. Je veux dire, un diff sur un jpeg ne reviendra jamais rien. Git fonctionne très bien avec un fichier texte et probablement aussi mauvais que toutes les autres solutions avec des fichiers binaires!
si vous voulez une solution pour la gestion des versions, vous pourriez voulez envisager git-epa qui a un léger pointeur de votre fichier.
cela signifie que, lorsque vous clonez votre repo il ne marche pas télécharger toutes les versions, mais seulement celui qui est extrait.
Voici une belle tutoriel de la façon de l'utiliser