5

大きなバイナリ ファイル (デジタル オーディオ ワークステーション ファイル) をバージョン管理するためのバイナリ デルタ ストレージ ソリューションを探しています。

DAW ファイルで作業する場合、生データ (ウェーブ) を保存するために使用される膨大な量のデータに比べて、特にミックスの終わり近くでの変更の大部分は非常に小さいものです。

古いバージョンにロールバックできるように、DAW ファイルのバージョン管理システムがあれば素晴らしいことです。

システムは、各バージョンのバイナリ ファイル (diff) 間の差分のみを保存します。これにより、すべてのバージョンの完全なファイルを保存することなく、現在のバージョンから以前のバージョンに変更するための指示のリストが得られます。

これを行う現在のバージョン管理システムはありますか? レポのスペースを節約するためにバイナリ差分を使用してそのSVNを読んだことがあります...しかし、バイナリファイルのみのテキストファイルでは実際にはそれを行わないことも読みました...わかりません。何か案は?

現時点での私の行動計画は、既存のツールの調査を継続することです。存在しない場合は、c/c++ でバイナリ データを読み取り、自分でツールを作成することに慣れることです。

4

4 に答える 4

5

I can't comment on the reliability or connection issues that might exist when committing a large file across the network (one referenced post hinted at problems). But here is a little bit of empirical data that you may find useful (or not).

I have been doing some tests today studying disk seek times and so had a reasonably good test case readily at hand. I found your question interesting, so I did a quick test with the files I am using/modifying. I created a local Subversion repository and added two binary files to it (sizes shown below) and then committed the files a couple of times after changes were made to them. The smaller binary file (.85 GB) simply had data added to the end of it each time. The larger file (2.2GB) contains data representing b-trees consisting of "random" integer data. The updates to that file between commits involved adding approximately 4000 new random values, so it would have modified nodes spread somewhat evenly throughout the file.

Here are the original file sizes along with the size/count of all files in the local subversion repository after the commit:

file1    851,271,675  
file2  2,205,798,400 

1,892,512,437 bytes in 32 files and 32 dirs

After the second commit:

file1    851,287,155  
file2  2,207,569,920  

1,894,211,472 bytes in 34 files and 32 dirs

After the third commit:

file1    851,308,845  
file2  2,210,174,976  

1,897,510,389 bytes in 36 files and 32 dirs

The commits were somewhat lengthy. I didn't pay close attention because I was doing other work, but I think each one took maybe 10 minutes. To check out a specific revision took about 5 minutes. I would not make a recommendation one way or other based on my results. All I can say is that it seemed to work fine and no errors occurred. And the file differencing seemed to work well (for these files).

于 2011-08-30T17:23:41.697 に答える
2

Subversion は、バイナリ ファイルとテキスト ファイルに対してバイナリ デルタを実行します。Subversion は、人間が読めるバイナリ ファイルのデルタを提供することができないだけでなく、バ​​イナリ ファイル内の競合のマージを支援することもできません。

于 2011-08-29T20:23:49.247 に答える
2

大規模の定義によっては、Subversion が機能する場合があります。この質問/回答は、ファイルが 1 GB 未満であれば問題なく機能すると述べています。

于 2011-08-29T18:45:59.053 に答える
-1

gitgit gcは圧縮します (ただし、手動で呼び出す必要がある場合があります)。

$ git init
$ dd if=/dev/urandom of=largefile bs=1M count=100
$ git add largefile
$ git commit -m 'first commit'
[master (root-commit) e474841] first commit
 1 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 largefile
$ du -sh .
201M    .
$ for i in $(seq 20); do date >> largefile; git commit -m "$i" -a; git gc; done
$ du -sh .
201M    .
于 2011-08-30T17:37:45.920 に答える