webdevqa.jp.net

Gitを使用してiTunesライブラリを管理しますか?

Gitを使用してiTunesライブラリを管理し、コンピュータ間で同期できるようにすることを検討しています。

これが悪い考えになる理由を思いつくことができますか?

8
Nate

主な欠点はディスク容量です。リポジトリ自体は、「チェックアウトされた」ファイルのセットと同じ量のスペースを使用します。つまり、リポジトリのクローンを作成すると、コレクションは基本的に2倍のディスク容量を必要とします。

さらに悪いことに、不要になったファイルを削除しても、リポジトリにはコピーが残り、スペースを占有します。

nison のような同期ツールを検討することをお勧めします。これは、複数のマシン間でファイルを双方向に同期するために設計されています。

16
Evan

これが悪い考えになる理由を思いつくことができますか?

Gitはそのような使用法には適していません。

Gitが機能する方法は、リポジトリデータを.git/フォルダーに保持することです。テキストの場合、これは問題ではなく、簡単に圧縮でき、ファイルは小さいです。リポジトリは1〜2メガバイトになる可能性があります。

圧縮されたデータ(MP3、JPEGなど)はgitでこれ以上圧縮できません。また、データのコピーを2つ保存する必要があるため、必要なディスク容量が2倍になります(1つはファイル用、もう1つはリポジトリ用)。

テキストは小さく、圧縮可能であり、重要なことに、2つのリビジョンを簡単に「区別」できます。変更を保存するだけです。 1行だけを変更した場合、gitはその1行(およびコミットメッセージなどの関連メタデータ)のみを保存します。

バイナリファイルは差分が難しいため、100個のファイルのタグを変更すると(たとえば、アートワークを追加したり、ジャンルを変更したりするため)、gitはそれらのファイルの新しいコピーを.git/ディレクトリに保存します。次に、音楽のメタデータからすべてのコメントを削除すると、gitはファイルの別の完全なコピーを保存します。これは、リポジトリが実際のファイルの2倍を超えるサイズになることを意味します(たとえば、10 GBの音楽があった場合、音楽フォルダは30 GBを超えます)。

私が言ったように、gitはそのようなものには適していません-それはソースコードを追跡することを目的としており、大きなバイナリファイルではなく、テキストファイルに多くの小さな変更を加えています。同期ツールが必要な場合、音楽ライブラリの改訂履歴を保持する意味はあまりありません。

Gitの使用を検討しているので、コマンドラインツールに十分満足していると思います。rsyncを使用してマシン間でiTunesライブラリを同期することを検討することをお勧めします。 joshhuntが述べたように、最大​​の問題は、iTunesがメディアファイルへの絶対パスを使用することです。そのため、iTunes Library.xmlファイルには次のようなものが含まれます。

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

すべてのマシンで同じOSと同じユーザー名を使用している場合、これは問題ではありません。ファイルを同じパスに保持すれば、正常に機能するはずです。そうでなければ、物事はもう少し複雑になります。

2つのスクリプトを作成できます。1つはmachineAからmachineBへのパスを更新し、その逆も同様です。 iTunesライブラリを/User/Shared/Music/のような場所に移動して、パスが同じになるようにすることができます(ただし、これはOS X-> Windowsでは機能しない場合があります)

マシン間でiTunesライブラリを同期するためのユーティリティがいくつかあります。

この記事 から)

6
dbr

Gitに音楽ライブラリ内のファイルのサイズに問題があるかどうかはわかりませんが(大きなファイルではうまく機能しませんが、正確にどれだけ大きいかはわかりません)、Joey Hessは この種のユースケースを処理するためのgit annex

3
Ken Bloom

一般に、バージョン管理システムは、テキストファイルを処理するために設計されています。バイナリファイルを更新するたびに、デルタを保存するだけでなく、完全に新しいファイルを作成する必要があります。

これが実際の使用にどのように変換されるかは、ライブラリを定期的に変更すると、ライブラリが大量のディスク領域を使用することです。

ライブラリファイル自体についてのみ話している場合は、これで問題ない可能性があります。

2
Bruce McLeod

この設定のもう1つの問題は、iTunesがデータベースを独自のバイナリファイルとして保存し、gitがマージを実行できないことです(いいえ、iTunes Music Library.xmlファイルへの編集はiTunesによって読み戻されません) 。したがって、両方のマシンでメタデータに変更を加えたり、トラックを追加したりした場合、両端から行った変更を調整する方法はありません。データベースの一方のバージョンをもう一方のバージョンで上書きし、その過程でデータを失うことになります。 。

2
Brian Webster

あなたはrsyncの線に沿ってもっと何かを考えているかもしれません。

2
dlamblin

上記のディスク容量の問題は確かに真実です。しかし、2つの別々の問題があります。 1つは、リポジトリとデータを保存する必要があるため、各ファイルが2回保存されることです。 2番目の問題は、メタデータを変更するたびに、音楽のまったく新しいコピーが保存されるため、徐々に音楽をN回保存することになり、Nは継続的に増加します。最初の問題は問題ないかもしれません、2番目は本当のドラッグです。

したがって、Gitが2番目の問題に苦しんでいるのに、Subversionは苦しんでいないのは興味深いことです。その差分アルゴリズムはバイナリファイルで機能するため、変更内容のみを保存します。そのため、私はあなたのユースケースと非常によく似たSubversionを写真に使用しており、非常に満足しています。

これが問題を説明するログです。 Subversionは、実際には3つのコピーを格納することに注意してください。1つはリポジトリに、もう1つは作業コピーの.svnディレクトリに、そして作業コピー自体です。ただし、メタデータを変更するため、余分なスペースは使用されません。

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

私が正しく思い出せば、iTunesライブラリは、ライブラリファイルに相対的なものではなく、絶対パスとして音楽への場所を保存します。これは、音楽がコンピューターの2つの異なる場所に保存されている場合に問題を引き起こします。

0
Josh Hunt