8 votes

Utiliser Git pour gérer une bibliothèque iTunes ?

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

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

16voto

Wheelie Points 2365

Le principal inconvénient 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 occupera deux fois plus d'espace disque.

Pire encore, même si vous supprimez les fichiers dont vous ne voulez plus, il en restera des copies dans votre dépôt, qui occuperont de l'espace.

Vous pourriez envisager des outils de synchronisation tels que unisson qui est conçu pour la synchronisation bidirectionnelle de fichiers sur plusieurs machines.

0 votes

Le problème de l'espace disque n'est pas nécessairement vrai. Certes, dans le cas d'une bibliothèque musicale, c'est probablement le cas car 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 graphe d'objets git est compressé dans le dépôt.

1 votes

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 réaliser de grandes économies d'espace.

6voto

Ian Nelson Points 20020

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

Git n'est pas adapté à un tel usage.

La manière dont git fonctionne est qu'il garde les données du dépôt dans .git/ dossier. Avec le texte, ce n'est pas un problème, il peut être facilement compressé, et les fichiers sont petits - le dépôt peut être d'un ou deux mégaoctets.

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

Le texte est minuscule, et compressible, et de manière importante, vous pouvez facilement "diff" entre deux révisions - en ne stockant que les changements. Si vous ne changez qu'une ligne, git ne stocke que cette ligne (et toute métadonnée associée, comme le message commit).

Les fichiers binaires sont difficiles à différencier, donc si vous modifiez les balises de 100 fichiers (par exemple, pour ajouter des illustrations ou changer de genre), git stockera une nouvelle copie de ces fichiers dans sa base de données. .git/ répertoire. Si vous supprimez ensuite 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 sera maintenant deux fois plus volumineux que vos fichiers réels (disons que vous avez 10 Go de musique, votre dossier de musique sera maintenant de plus de 30 Go).

Comme je l'ai dit, git n'est pas adapté à ce genre de choses - il est destiné à suivre le code source, avec beaucoup de petites modifications de fichiers texte, pas de gros fichiers binaires. Il n'y a pas beaucoup d'intérêt à conserver un historique des révisions de votre bibliothèque musicale, alors que vous n'avez besoin que d'un outil de synchronisation.

Puisque vous envisagez d'utiliser git, je suppose que vous êtes assez satisfait des outils en ligne de commande. Je vous suggère donc d'utiliser rsync pour synchroniser votre bibliothèque iTunes entre les machines. Le plus gros problème, comme l'a mentionné joshhunt, c'est qu'iTunes utilise des chemins absolus pour les fichiers multimédias, donc l'option iTunes Library.xml 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 - gardez les fichiers dans le même chemin et cela devrait fonctionner correctement. Sinon, les choses se compliquent un peu plus

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

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

(de cet article )

3voto

Ken Bloom Points 499

Je ne suis pas sûr que Git ait des problèmes avec la taille des fichiers d'une bibliothèque musicale (il ne fonctionne pas bien avec les gros fichiers, mais je ne sais pas exactement quelle taille), mais Joey Hess a écrit un programme appelé annexe git pour traiter ce type de cas d'utilisation.

2voto

Jon Limjap Points 46429

Les systèmes de contrôle de version en général sont conçus pour traiter des fichiers texte. Chaque fois que vous mettez à jour un fichier binaire, il faut créer un fichier entièrement nouveau, et non pas simplement stocker un delta.

Dans la pratique, votre bibliothèque utiliserait beaucoup d'espace disque si vous la modifiez régulièrement.

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

2voto

Simon Munro Points 4069

Un autre problème avec cette configuration est qu'iTunes stocke sa base de données sous la forme d'un 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). Ainsi, si vous modifiez les métadonnées ou ajoutez des pistes supplémentaires sur les deux machines, il n'y a aucun moyen de réconcilier les changements effectués des deux côtés, vous finirez par écraser une version de la base de données avec l'autre et perdrez des données dans le processus.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X