web-dev-qa-db-fra.com

Comment gérer les images dans un dépôt Git?

J'ai hérité d'un projet iOS de taille moyenne - environ 30 000 lignes de code - comportant un nombre insane d'images. Bien sûr, nous utilisons Git/Github pour scm. Actuellement, les images sont incluses dans l’arborescence des répertoires et sont donc ingérées dans le référentiel, ce qui en fait une honte et rend généralement le développement un véritable casse-tête. 

Nous avons 4 développeurs sur le projet, certains virtuels. Il me vient à l’esprit de déplacer les images vers Dropbox, de les consulter à partir du projet iOS et de conserver leur forme.

Quelqu'un a-t-il un commentaire sur cette idée? Que faites-vous des fichiers image/vidéo/audio dans une configuration Git scm?

36
dugla

Je serais assez nerveux à ce sujet, en fait; Et si vous voulez mettre à jour une image, puis changez d'avis? Ou si vous avez besoin de créer une version de maintenance avec d'anciennes images?

Si c'est vraiment un problème - et je n'ai jamais vu cela être réellement un problème dans la pratique, mais je vais prendre votre parole pour elle - pourquoi ne pas simplement utiliser un dépôt pour les images, un autre pour tout le reste? Vous pouvez alors être simplement paresseux sur la synchronisation de l'image une.

28

Cela peut être un peu pénible à gérer, mais j’ai utilisé dans le passé des sous-modules pour les images et les médias. De cette façon, vous pouvez extraire simplement votre code sans obtenir les images si vous le souhaitez, mais vous pouvez toujours garder vos images et vos médias synchronisés avec votre code. Lorsque l'historique des sous-modules deviendrait trop volumineux, nous pourrions simplement créer un nouveau repo sans historique et remplacer l'ancien sous-module par le nouveau. De cette façon, les gens pourraient être synchronisés avec la dernière version des médias sans avoir à tirer l'historique complet. 

Nous commençions fréquemment avec des écrans verts de notre vidéo dans le sous-module, afin de pouvoir développer avec la vidéo avant qu'elle ne soit dans sa forme finale, mais une fois composée, nous briserions l'historique du sous-module et pousserions un nouveau sous-module qui juste les vidéos composites. Cela évitait d'avoir une copie supplémentaire complète de chaque vidéo, tout en vous permettant toujours (avec un peu de travail manuel de permuter les sous-modules) de sortir l'ancienne version si vous en aviez besoin.

Les sous-modules augmenteront la quantité de travail que vous devrez faire. Si vous souhaitez valider les modifications apportées à vos images, vous devez les modifier dans le sous-module, valider celle-ci, Transférer, puis accéder au projet parent, valider la modification dans le sous-module et Transférer cela. Pour les cas simples, vous pouvez écrire des scripts pour simplifier un peu la tâche, mais dans des cas plus complexes tels que des conflits de fusion, ce sera beaucoup plus compliqué que d'utiliser un seul projet pour tout.

14
Brian Campbell

git-lfs semble être une bonne solution moderne à ce problème. Il suit les fichiers en tant que pointeurs de texte locaux dans votre référentiel, tout en les stockant dans un magasin de fichiers volumineux externe. C'est un peu comme la solution de subrepo, mais sans la nécessité d'une intervention manuelle aussi importante.

D'une part, cela vous rend plus dépendant d'un accès à Internet - vous ne pourrez probablement pas basculer aussi facilement entre les branches si vous ne pouvez pas accéder au magasin de fichiers externe. D'autre part, cela signifie que vous ne téléchargez pas l'intégralité de l'historique de chaque fichier binaire lorsque vous clonez un référentiel.

Il est pris en charge par GitHub , Visual Studio Online et Bitbucket Server .

9
StriplingWarrior

Je ne l'ai pas utilisé moi-même, mais il existe un projet appelé git media qui est conçu pour faciliter le travail avec de gros fichiers binaires tels que des images dans git. Il vient de Scott Chacon, qui est un gros problème dans le monde des idiots, alors j'imagine que cela fonctionne probablement très bien.

9
MatrixFrog

Je trouve que git est le mauvais outil pour le travail quand il s’agit de traiter avec une source binaire. 

Les ressources finalisées dont votre logiciel a besoin pour être considérées comme "complètes" seraient mieux conservées dans votre référant, mais je rechercherais une solution alternative pour travailler avec une source d'image réelle telle qu'un fichier ai ou psd.

Git offre peu ou pas d’avantage pour travailler avec ces fichiers et, comme vous l’avez dit plus haut, il gonfle le repo qui affecte négativement les zones où git offre des avantages réels.

J'ai moi-même envisagé de déposer, mais je ressens le besoin d'une solution plus personnalisée. Celui qui me permet de synchroniser rapidement entre ordinateurs, stocke automatiquement les versions les plus récentes (environ 10 versions), me permet de conserver et de nommer des versions spécifiques et prend en charge le verrouillage de fichiers (Lire: évite la nécessité d’essayer de fusionner des fichiers binaires.) C’est un outil différent. pour un travail/flux de travail différent. Malheureusement, je ne connais pas son existence, mais j'aimerais le voir devenir.

3
Blake Taylor

Je me suis intéressé à cette question. Dans mes méandres, je suis tombé sur git annexe: http://git-annex.branchable.com Je ne l'ai pas utilisé car mon fournisseur de serveur ne l'a pas installé.

1
user2520657

Vous pouvez stocker l'image et les fichiers binaires à l'aide du système Subversion (SVN). Les images et autres fichiers binaires ne changeront pas très souvent, mais vous pouvez quand même être averti lorsque ces fichiers sont modifiés ou mis à jour de manière centralisée. 

Git est préférable pour la version uniquement du code source et n'inclut que des codes sources dans Github.

Subversion et Git peuvent vous donner une version totale de toutes les choses.

0
Shahadat Hossain