Używasz Git do zarządzania biblioteką iTunes?

8

Zastanawiałem się nad użyciem Git do zarządzania biblioteką iTunes i zezwalania na synchronizację między komputerami.

Czy znasz jakieś powody, dla których byłby to zły pomysł?

Nate
źródło

Odpowiedzi:

16

Główną wadą jest miejsce na dysku. Samo repozytorium zajmie tyle samo miejsca, co zestaw plików „pobranych”. Oznacza to, że po sklonowaniu repozytorium Twoja kolekcja zajmie dwa razy więcej miejsca na dysku.

Co gorsza, nawet jeśli usuniesz niepotrzebne pliki, w twoim repozytorium nadal będą znajdować się kopie, zajmujące miejsce.

Możesz przyjrzeć się narzędziom do synchronizacji, takim jak unison, który jest przeznaczony do dwukierunkowej synchronizacji plików na wielu komputerach.

Evan
źródło
Problem z miejscem na dysku niekoniecznie musi być prawdziwy. To prawda, że ​​w przypadku biblioteki muzycznej prawdopodobnie jest tak, ponieważ pliki MP3 są już skompresowane, ale w ogólnym przypadku repozytorium git może być z pewnością mniejsze niż zestaw plików pobranych, ponieważ wykres obiektu git jest kompresowany w magazyn.
Lily Ballard,
1
Myślę, że współczynniki kompresji dla wstępnie skompresowanych plików (mp3, obraz, wideo) są słabe i nie zapewnią wielkich oszczędności miejsca.
willoller
6

Czy znasz jakieś powody, dla których byłby to zły pomysł?

Git nie nadaje się do takiego użycia.

Sposób działania git polega na tym, że przechowuje dane repozytorium w .git/folderze. W przypadku tekstu nie stanowi to problemu, można go łatwo skompresować, a pliki są małe - repozytorium może być megabajt lub dwa.

Skompresowane dane (MP3, JPEG itp.) Nie mogą być dalej kompresowane przez git, a ponieważ musisz skutecznie przechowywać dwie kopie danych, podwoi to wymaganą ilość miejsca na dysku (jedna dla plików, jedna dla repozytorium)

Tekst jest drobny i ściśliwy, a co ważne, możesz łatwo „różnicować” dwie wersje - tylko przechowując zmiany. Jeśli zmienisz tylko jeden wiersz, git przechowuje tylko ten wiersz (i wszelkie powiązane metadane, takie jak komunikat zatwierdzenia)

Pliki binarne są trudne do odróżnienia, więc powiedzmy, że zmodyfikujesz tagi na 100 plikach (powiedzmy, aby dodać grafikę lub zmienić gatunek), git zapisze nową kopię tych plików w swoim .git/katalogu. Powiedzmy, że usuwasz wszystkie komentarze z metadanych twojej muzyki, git zapisze kolejną kompletną kopię twoich plików! Oznacza to, że Twoje repozytorium będzie teraz ponad dwa razy większe niż rzeczywiste pliki (powiedzmy, że masz 10 GB muzyki, folder muzyki będzie teraz ponad 30 GB)

Jak powiedziałem, git nie nadaje się do takich rzeczy - ma na celu śledzenie kodu źródłowego, z wieloma małymi zmianami w plikach tekstowych, a nie dużymi plikami binarnymi. Przechowywanie historii wersji biblioteki muzycznej nie ma większego sensu, gdy potrzebujesz narzędzia do synchronizacji.

Ponieważ zastanawiasz się nad użyciem git, zakładam, że jesteś wystarczająco zadowolony z narzędzi wiersza poleceń, więc sugeruję skorzystanie z rsync do synchronizacji biblioteki iTunes między komputerami. Największym problemem, jak wspomniano joshhunt, jest to, że iTunes używa bezwzględnych ścieżek do plików multimedialnych, więc iTunes Library.xmlplik zawiera takie rzeczy jak ...

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

Jeśli używasz tego samego systemu operacyjnego i tej samej nazwy użytkownika na wszystkich komputerach, nie stanowi to problemu - utrzymuj pliki w tej samej ścieżce i powinno działać dobrze. Jeśli nie, sprawy stają się nieco bardziej skomplikowane ...

Możesz napisać dwa skrypty, jeden, który aktualizuje ścieżki z komputera A na komputer B i odwrotnie. Możesz przenieść bibliotekę iTunes w inne miejsce, /User/Shared/Music/aby ścieżki były takie same (chociaż może to nie działać w systemie OS X -> Windows)

Istnieje kilka narzędzi do synchronizacji bibliotek iTunes między komputerami, takich jak ..

(z tego artykułu )

dbr
źródło
3

Nie jestem pewien, czy Git ma problemy z rozmiarem plików w bibliotece muzycznej (nie działa dobrze z dużymi plikami, ale nie jestem pewien, jak duże), ale Joey Hess napisał program o nazwie załącznik git dla zajmowanie się tego rodzaju przypadkiem użycia.

Ken Bloom
źródło
2

Systemy kontroli wersji są ogólnie zaprojektowane do obsługi plików tekstowych. Za każdym razem, gdy aktualizujesz plik binarny, musi on utworzyć zupełnie nowy plik, a nie tylko przechowywanie delty.

Przekłada się to na faktyczne wykorzystanie przez bibliotekę dużej ilości miejsca na dysku, jeśli zmieniasz ją regularnie.

Jeśli mówisz tylko o samym pliku biblioteki, może to być OK.

Bruce McLeod
źródło
2

Kolejnym problemem związanym z tą konfiguracją jest to, że iTunes przechowuje swoją bazę danych jako zastrzeżony plik binarny, którego git nie będzie mógł wykonać scalania (nie, zmiany w pliku iTunes Music Library.xml nie zostaną ponownie odczytane przez iTunes) . Tak więc, jeśli dokonałeś zmian w metadanych lub dodałeś dodatkowe ścieżki na obu komputerach, nie byłoby sposobu na pogodzenie zmian dokonanych na obu końcach, w rezultacie nadpisałeś jedną wersję bazy danych drugą, tracąc dane w tym procesie .

Brian Webster
źródło
2

Być może myślisz o czymś podobnym do tego rsync.

dlamblin
źródło
1

Problemy z miejscem na dysku opisane powyżej są z pewnością prawdziwe. Ale są dwa oddzielne problemy. Jednym z nich jest to, że musisz przechowywać repozytorium i dane, więc każdy plik jest przechowywany 2 razy. Drugi problem polega na tym, że za każdym razem, gdy zmieniasz metadane, zapisywana jest cała nowa kopia muzyki, więc stopniowo zapisujesz muzykę N razy, gdzie N stale rośnie. Pierwszy problem może być OK, drugi to prawdziwy problem.

Ciekawe, że chociaż Git ma drugi problem, Subversion nie. Algorytm różnicowania działa na plikach binarnych, więc przechowujesz tylko te zmiany. Dlatego używam Subversion do moich zdjęć, bardzo podobnie do twojego przypadku użycia i jestem z tego bardzo zadowolony.

Oto dziennik ilustrujący problem. Zauważ, że Subversion faktycznie przechowuje trzy kopie: jedną w repozytorium, jedną w katalogach .svn w kopii roboczej i samą kopię roboczą. Nie zmienia to jednak miejsca, ponieważ zmieniam metadane.

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/
Matthew Exon
źródło
0

Jeśli dobrze pamiętam, biblioteki iTunes przechowują lokalizacje do muzyki jako ścieżki bezwzględne, a nie względem pliku biblioteki. Powodowałoby to problemy, gdyby muzyka była przechowywana w dwóch różnych lokalizacjach na komputerach.

Josh Hunt
źródło