¿Usando Git para administrar una biblioteca de iTunes?


8

He estado considerando usar Git para administrar mi biblioteca de iTunes y permitirme sincronizarla entre computadoras.

¿Puedes pensar en alguna razón por la cual sería una mala idea?

Respuestas:


16

El principal inconveniente es el espacio en disco. El repositorio en sí ocupará la misma cantidad de espacio que el conjunto de archivos "desprotegidos". Esto significa que cuando clonas el repositorio, tu colección básicamente ocupará el doble de espacio en disco.

Peor aún, incluso si elimina archivos que ya no desea, todavía habrá copias en su repositorio, ocupando espacio.

Es posible que desee ver las herramientas de sincronización como Unison, que está diseñada para la sincronización bidireccional de archivos en varias máquinas.


El problema de espacio en disco no es necesariamente cierto. Por supuesto, en el caso de una biblioteca de música, probablemente sea porque los archivos MP3 ya están comprimidos, pero en el caso general, un repositorio de git ciertamente puede ser más pequeño que el conjunto de archivos extraídos, ya que el gráfico de objeto git está comprimido en el repositorio.
Lily Ballard

1
Creo que encontrará que las tasas de compresión de los archivos precomprimidos (mp3, imagen, video) son pobres y no le brindarán un gran ahorro en espacio de archivos.
willoller

6

¿Puedes pensar en alguna razón por la cual sería una mala idea?

Git no es adecuado para tal uso.

La forma en que funciona git es que mantiene los datos del repositorio en la .git/carpeta. Con el texto, esto no es un problema, se puede comprimir fácilmente y los archivos son pequeños: el repositorio puede ser uno o dos megabytes.

Los datos comprimidos (MP3, JPEG, etc.) no pueden comprimirse más con git, y dado que realmente necesita almacenar dos copias de los datos, esto duplicará el espacio en disco requerido (uno para los archivos, uno para el repositorio)

El texto es pequeño y comprimible, y lo más importante es que puede "diferenciarse" fácilmente entre dos revisiones, solo almacenando los cambios. Si solo cambia una línea, git solo almacena esa línea (y cualquier metadato asociado, como el mensaje de confirmación)

Los archivos binarios son difíciles de diferenciar, así que supongamos que modifica las etiquetas en 100 archivos (por ejemplo, para agregar ilustraciones o cambiar un género), git almacenará una nueva copia de esos archivos en su .git/directorio. Digamos que luego eliminas todos los comentarios de los metadatos de tu música, ¡git almacenará otra copia completa de tus archivos! Esto significará que su repositorio ahora tendrá más del doble del tamaño de sus archivos reales (digamos que tenía 10 GB de música, su carpeta de música ahora tendrá más de 30 GB)

Como dije, git no es adecuado para tales cosas: está destinado a rastrear el código fuente, con muchos pequeños cambios en los archivos de texto, no en grandes archivos binarios. No tiene mucho sentido mantener un historial de revisión de su biblioteca de música, cuando todo lo que necesita es una herramienta de sincronización.

Como está considerando usar git, supongo que está bastante satisfecho con las herramientas de línea de comandos, por lo que le sugiero que busque usar rsync para sincronizar su biblioteca de iTunes entre máquinas. El mayor problema, como mencionó joshhunt, es que iTunes utiliza rutas absolutas a los archivos multimedia, por lo que el iTunes Library.xmlarchivo contiene cosas como ...

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

Si usa el mismo sistema operativo y el mismo nombre de usuario en todas las máquinas, esto no es un problema: mantenga los archivos en la misma ruta y debería funcionar bien. Si no, las cosas se ponen un poco más complicadas.

Podría escribir dos scripts, uno que actualice las rutas de la máquina A a la máquina B, y viceversa. Puede mover su biblioteca de iTunes a algún lugar como /User/Shared/Music/para que las rutas sean las mismas (aunque esto puede no funcionar para OS X -> Windows)

Hay algunas utilidades para sincronizar las bibliotecas de iTunes entre máquinas, como ..

(de este artículo )


3

No estoy seguro de si Git tiene problemas con el tamaño de los archivos en una biblioteca de música (no funciona bien con archivos grandes, pero no estoy seguro de qué tan grande), pero Joey Hess escribió un programa llamado git annex para lidiando con este tipo de caso de uso.


2

Los sistemas de control de versiones en general están diseñados para manejar archivos de texto. Cada vez que actualiza un archivo binario, necesita crear un archivo completamente nuevo en lugar de simplemente almacenar un delta.

La forma en que esto se traduce en el uso en el mundo real es que su biblioteca usaría mucho espacio en disco si la cambiara regularmente.

Si solo está hablando del archivo de la biblioteca en sí, esto podría estar bien.


2

Un problema más con esta configuración es que iTunes almacena su base de datos como un archivo binario propietario en el que git no podrá fusionarse (no, iTunes no volverá a leer las ediciones en el archivo iTunes Music Library.xml) . Entonces, si realizó cambios en los metadatos o agregó pistas adicionales en ambas máquinas, no habría forma de conciliar los cambios realizados desde ambos extremos, terminaría sobrescribiendo una versión de la base de datos con la otra y perdiendo datos en el proceso .



1

Los problemas de espacio en disco descritos anteriormente son ciertamente ciertos. Pero hay dos problemas separados. Una es que debe almacenar el repositorio y los datos, por lo que cada archivo se almacena 2 veces. El segundo problema es que cada vez que cambia sus metadatos, se almacena una copia completamente nueva de la música, por lo que gradualmente termina almacenando su música N veces, donde N aumenta continuamente. El primer problema podría estar bien, el segundo es un verdadero lastre.

Por lo tanto, es interesante que si bien Git sufre el segundo problema, Subversion no. Su algoritmo diff funciona en archivos binarios, por lo que solo almacena los cambios. Es por eso que uso Subversion para mis fotos, muy similar a su caso de uso, y estoy muy contento con eso.

Aquí hay un registro que ilustra el problema. Tenga en cuenta que Subversion en realidad almacena tres copias: una en el repositorio, otra en los directorios .svn en la copia de trabajo y la copia de trabajo en sí. Sin embargo, no utiliza ningún espacio adicional ya que cambio los metadatos.

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 recuerdo correctamente, las bibliotecas de iTunes almacenan las ubicaciones de la música como rutas absolutas, no relativas al archivo de la biblioteca. Esto causaría problemas si la música se almacenara en dos ubicaciones diferentes en las computadoras.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.