Vous utilisez Git pour gérer une bibliothèque iTunes?


8

J'ai envisagé d'utiliser Git pour gérer ma bibliothèque iTunes et me permettre de la synchroniser entre les ordinateurs.

Pouvez-vous penser à des raisons pour lesquelles ce serait une mauvaise idée?

Réponses:


16

L'inconvénient principal est l'espace disque. Le référentiel lui-même prendra la même quantité d'espace que l'ensemble des fichiers "extraits". Cela signifie que lorsque vous clonez le référentiel, votre collection prend essentiellement deux fois plus d'espace disque.

Pire encore, même si vous supprimez des fichiers dont vous ne voulez plus, il y aura toujours des copies dans votre référentiel, prenant de la place.

Vous voudrez peut-être regarder les outils de synchronisation comme l' unisson qui est conçu pour la synchronisation bidirectionnelle des fichiers sur plusieurs machines.


Le problème d'espace disque n'est pas nécessairement vrai. Certes, dans le cas d'une bibliothèque musicale, c'est probablement parce que les fichiers MP3 sont déjà compressés, mais dans le cas général, un dépôt git peut certainement être plus petit que l'ensemble des fichiers extraits, car le graphique d'objet git est compressé dans le dépôt.
Lily Ballard

1
Je pense que vous constaterez que les taux de compression des fichiers pré-compressés (mp3, image, vidéo) sont médiocres et ne vous permettront pas de faire de grandes économies d'espace sur les fichiers.
willoller

6

Pouvez-vous penser à des raisons pour lesquelles ce serait une mauvaise idée?

Git ne convient pas à une telle utilisation.

La façon dont git fonctionne est de conserver les données du référentiel dans un .git/dossier. Avec du texte, ce n'est pas un problème, il peut être compressé facilement et les fichiers sont petits - le référentiel peut être un mégaoctet ou deux.

Les données compressées (MP3, JPEG, etc.) ne peuvent plus être compressées par git, et comme vous devez effectivement stocker deux copies des données, cela doublera l'espace disque requis (un pour les fichiers, un pour le référentiel)

Le texte est minuscule et compressible, et surtout, vous pouvez facilement "différencier" entre deux révisions - ne stockant que les modifications. Si vous ne changez qu'une seule ligne, git ne stocke que cette seule ligne (et toutes les métadonnées associées, comme le message de validation)

Les fichiers binaires sont difficiles à différencier, alors disons que vous modifiez les balises sur 100 fichiers (par exemple, pour ajouter des illustrations ou changer un genre), git stockera une nouvelle copie de ces fichiers dans son .git/répertoire. Supposons que vous supprimiez tous les commentaires des métadonnées de votre musique, git stockera alors une autre copie complète de vos fichiers! Cela signifie que votre référentiel aura désormais plus de deux fois la taille de vos fichiers réels (supposons que vous disposiez de 10 Go de musique, votre dossier de musique dépassera maintenant 30 Go)

Comme je l'ai dit, git n'est pas adapté à de telles choses - il vise à suivre le code source, avec beaucoup de petites modifications aux fichiers texte, pas de gros fichiers binaires. Il ne sert à rien de conserver un historique des révisions de votre bibliothèque musicale, alors que vous avez besoin d'un outil de synchronisation.

Étant donné que vous envisagez d'utiliser git, je suppose que vous êtes assez satisfait des outils de ligne de commande, je suggère donc d'envisager d'utiliser rsync pour synchroniser votre bibliothèque iTunes entre les machines. Le plus gros problème, comme l'a mentionné joshhunt, est qu'iTunes utilise des chemins absolus vers les fichiers multimédias, donc le iTunes Library.xmlfichier contient des choses comme ..

<key>Location</key>
<string>file://localhost/Users/dbr/Music/iTunes/iTunes%20Music/65daysofstatic/Hole/01%20Hole.mp3</string>

Si vous utilisez le même système d'exploitation et le même nom d'utilisateur sur toutes les machines, ce n'est pas un problème - conservez les fichiers dans le même chemin et cela devrait fonctionner correctement. Sinon, les choses deviennent un peu plus compliquées ..

Vous pouvez écrire deux scripts, un qui met à jour les chemins de machineA à machineB, et vice versa. Vous pouvez déplacer votre bibliothèque iTunes vers un endroit similaire /User/Shared/Music/afin que les chemins soient les mêmes (bien que cela ne fonctionne pas pour OS X -> Windows)

Il existe certains utilitaires pour synchroniser les bibliothèques iTunes entre les machines, tels que ..

(extrait de cet article )


3

Je ne sais pas si Git a des problèmes avec la taille des fichiers dans une bibliothèque musicale (il ne fonctionne pas bien avec des fichiers volumineux, mais je ne sais pas exactement quelle taille), mais Joey Hess a écrit un programme appelé git annexe pour traitant de ce type de cas d'utilisation.


2

Les systèmes de contrôle de version en général sont conçus pour gérer des fichiers texte. Chaque fois que vous mettez à jour un fichier binaire, il doit créer un fichier complètement nouveau au lieu de simplement stocker un delta.

Cela se traduit par une utilisation dans le monde réel, c'est que votre bibliothèque utiliserait beaucoup d'espace disque si vous la modifiiez régulièrement.

Si vous ne parlez que du fichier de bibliothèque lui-même, cela peut être OK.


2

Un autre problème avec cette configuration est qu'iTunes stocke sa base de données sous forme de fichier binaire propriétaire sur lequel git ne pourra pas effectuer de fusion (non, les modifications apportées au fichier iTunes Music Library.xml ne seront pas relues par iTunes) . Donc, si vous apportiez des modifications aux métadonnées ou ajoutiez des pistes supplémentaires sur les deux machines, il n'y aurait aucun moyen de réconcilier les modifications apportées des deux côtés, vous finiriez par écraser une version de la base de données avec l'autre et perdre des données dans le processus .


2

Vous pensez peut-être à quelque chose de plus dans le sens de rsync.


1

Les problèmes d'espace disque décrits ci-dessus sont certainement vrais. Mais il y a deux problèmes distincts. La première est que vous devez stocker le référentiel et les données, donc chaque fichier est stocké 2 fois. Le deuxième problème est que chaque fois que vous modifiez vos métadonnées, une toute nouvelle copie de la musique est stockée, donc vous finissez progressivement par stocker votre musique N fois, où N augmente continuellement. Le premier problème est peut-être OK, le second est un véritable frein.

Il est donc intéressant de noter que même si Git souffre du deuxième problème, Subversion ne le fait pas. Son algorithme diff fonctionne sur les fichiers binaires, vous ne stockez donc que les modifications. C'est pourquoi j'utilise Subversion pour mes photos, très similaire à votre cas d'utilisation, et j'en suis très content.

Voici un journal qui illustre le problème. Notez que Subversion stocke en fait trois copies: une dans le référentiel, une dans les répertoires .svn de la copie de travail et la copie de travail elle-même. Cependant, il n'utilise aucun espace supplémentaire car je modifie les métadonnées.

mat@Winter:~/temp$ git init repo
Initialized empty Git repository in /home/mat/temp/repo/.git/
mat@Winter:~/temp$ cp -r light_and_magic/ repo/
mat@Winter:~/temp$ cd repo/
mat@Winter:~/temp/repo$ du -hs .
101M    .
mat@Winter:~/temp/repo$ git add light_and_magic/
mat@Winter:~/temp/repo$ git commit -m 'First commit'
...
mat@Winter:~/temp/repo$ du -hs .
191M    .
mat@Winter:~/temp/repo$ id3v2 -a 'ladytron' light_and_magic/*.mp3
mat@Winter:~/temp/repo$ git commit -a -m 'changed metadata'
...
 15 files changed, 0 insertions(+), 0 deletions(-)
mat@Winter:~/temp/repo$ du -hs .
282M    .
mat@Winter:~/temp$ svnadmin create repo
mat@Winter:~/temp$ svn co file:///home/mat/temp/repo working
Checked out revision 0.
mat@Winter:~/temp$ cp -r light_and_magic/ working/
mat@Winter:~/temp$ svn add working/light_and_magic/
...
mat@Winter:~/temp$ svn commit -m 'First commit' working/
...
mat@Winter:~/temp$ du -hs repo
91M     repo
mat@Winter:~/temp$ du -hs working/
201M    working/
mat@Winter:~/temp$ id3v2 -a 'ladytron' working/light_and_magic/*.mp3        
mat@Winter:~/temp$ svn commit -m 'changed metadata' working/                      
...
mat@Winter:~/temp$ du -hs repo/
91M     repo/
mat@Winter:~/temp$ du -hs working/
201M    working/

0

Si je me souviens bien, les bibliothèques iTunes stockent les emplacements de la musique sous forme de chemins absolus, sans rapport avec le fichier de bibliothèque. Cela causerait des problèmes si la musique était stockée à deux endroits différents sur les ordinateurs.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.