2012-02-10 19 views
4

私はゲーム開発プロジェクトを開始しています。チームと私はMercurialをバージョン管理に使用しています。私はゲームのバイナリ資産を格納するより適切な方法は何だろうと思っていました。基本的に、私は2つのオプションがあります:Mercurialでバイナリ資産を保存する方法は?

  1. のMercurial 2.1をlargefiles extensionを持っているが、私はそれについてはあまり知りません。これは、 'リポジトリの膨らみ'問題を解決するようだが、バイナリマージの競合の問題は解決しないようだ。

  2. SVNチェックアウトのバイナリアセットをサブペクトとして保持する。こうすることで、ファイルを編集用にロックしてマージの競合を避けることができますが、私は実際には2つのバージョンコントロールシステム(特にそれほど好きではないバージョンコントロールシステム)を使用する必要はありません。

私が考えていない洞察力/アドバイスその他のオプションはありますか?

答えて

2

あなたが推測したように、large filesが必要なことを行います。バイナリをマージするには、set up a merge tool if one exists for your file typeがあります。

[merge-tools] 
mymergetool.priority = 100 
mymergetool.premerge = False 
mymergetool.args = $local $other $base -o $output 
myimgmerge = SOME-PROGRAM-THAT-WILL-MERGE-IMAGES-FOR-YOU 
[merge-patterns] 
**.jpg = myimgmerge 
**.exe = internal:fail 

一般に、テキスト以外のものをマージすることは、ソース管理ツールを使用すると痛みになります。 Digital Asset Managementアプリケーションは、それほど苦痛を軽減するために存在しますが、分散化されていないか、作業するのに非常に快適です。

2

largefiles extensionがリポジトリの膨張を避けることは間違いありません。何が起こるかは、チェックアウトしているリビジョンに必要な大きなファイルのみをダウンロードすることです。したがって、50 MBのファイルがあり、それが10倍に大幅に編集された場合、バージョンはサーバー上で500 MBを占めることになります。しかし、hg updateを実行すると、そのリビジョンに必要な50 MBのバージョンのみがダウンロードされます。

また、largefiles拡張がマージに役立たないことも間違いありません。 Infactは、それは完全にマージステップをスキップしてのみ、このように求められます

largefile <some large file> has a merge conflict 
keep (l)ocal or take (o)ther? 

あなたは、通常のマージ機械を使用する機会を得ることはありません。

ロックを行うには、クライアント用に書いたlock extensionを使用します。彼らは簡単にマージすることができないファイルを扱うドキュメンテーション部門のためにそれを望んでいました。これは基本的にMercurialをSubversionに似た集中システムに変えます:ロックは中央リポジトリのファイルに格納され、クライアントはhg locksを実行してhg commitの前にこのリポジトリにアクセスします。

+0

はかなりいい拡張子のようですが、それはBitbucketのようなホスティングサービスが除外されることを意味しますか? – torchengie2

+2

@darkestfright:ロック拡張を意味する場合、はい、サーバー上で有効になっていないため、Bitbucketでは動作しません。これは本当に会社内での使用を意図しています - あなたの 'hg'はロックサーバーとたくさん話をしてロックサーバーを近くにしたいと思っています。 –

関連する問題