Est-ce que git est 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és, est-ce que git le gérerait bien? Par exemple, si j'insère ou supprime le milieu et insère des données vers la fin, il le remarquera comme avec le texte?
Si git n'est pas bon avec les fichiers binaires, quel outil pourrais-je envisager?
Réponses:
Dès la sortie de la boîte, git peut facilement ajouter des fichiers binaires à son index, et également les stocker de manière efficace, à moins que vous ne fassiez des mises à jour fréquentes sur de gros fichiers non compressibles.
Les problèmes commencent lorsque git a besoin de générer des différences et des fusions: git ne peut pas générer de différences significatives, ni fusionner des fichiers binaires de quelque manière que ce soit. Ainsi, toutes les fusions, rebases ou cherrypicks impliquant une modification d'un fichier binaire impliqueront que vous effectuiez une résolution manuelle des conflits sur ce fichier binaire.
Vous devez décider si les modifications du fichier binaire sont suffisamment rares pour que vous puissiez vivre avec le travail manuel supplémentaire qu'elles provoquent dans le flux de travail git normal impliquant des fusions, des rebases, des cherrypicks.
la source
git diff --binary
pourra patcher des fichiers binaires.En plus d'autres réponses.
Vous pouvez envoyer un diff dans un fichier binaire en utilisant le format de diff binaire . Il 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 aucune fuzz.
Un exemple:
Vous pouvez utiliser textconv gitattribute pour
git diff
afficher des différences lisibles par l'homme pour les fichiers binaires ou des parties de fichiers binaires. Par exemple, pour les fichiers * .jpg, il peut y avoir une différence dans les informations EXIF, pour les fichiers PDF, il peut y avoir une différence entre leur représentation textuelle (pdf2text ou quelque chose comme ça).HTH.
la source
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. Consultez: http://git-annex.branchable.com/
la source
Je ne connais aucun outil qui essaie de stocker des différences de fichiers binaires 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 d'objets blob et effectue une différence entre eux quand il en a besoin.
Si vous cherchez à contrôler la version de quelque chose comme des documents Photoshop / Illustrator, GridIron Flow pourrait faire l'affaire pour vous. Si vous essayez de les maintenir synchronisés entre les machines, Dropbox ou Rsync peuvent le gérer, mais ils ne feront pas de différence intelligente.
la source
git gc
pour faire le ramasse-miettes. De la même page: "Puisque Git stocke chaque version de chaque fichier comme un objet séparé, cela peut devenir assez inefficace. Imaginez avoir un fichier de plusieurs milliers de lignes et changer une seule ligne. Git stockera le deuxième fichier dans son intégralité, ce qui est un énorme gaspillage d'espace. "git gc
: "Les utilisateurs sont encouragés à exécuter cette tâche régulièrement dans chaque référentiel pour maintenir une bonne utilisation de l'espace disque et de bonnes performances d'exploitation. Certaines commandes git peuvent exécuter automatiquement git gc; voir l'indicateur --auto ci-dessous pour plus de détails . "Eh bien git est bon avec les binaires. Mais il ne gérera pas les 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 toutes les autres solutions avec des fichiers binaires!
la source
si vous voulez une solution pour la gestion des versions, vous pouvez envisager git-lfs qui a un pointeur léger vers votre fichier.
cela signifie que lorsque vous clonez votre dépôt, il ne télécharge pas toutes les versions, mais uniquement celle qui est extraite.
Voici un joli tutoriel sur la façon de l'utiliser
la source