Mac の「バンドル」ファイルをバージョン管理するための最良のアプローチ
-
09-06-2019 - |
質問
多くの Mac アプリが「バンドル」を使用していることがわかります。アプリケーションにとっては 1 つのファイルのように見えますが、実際には内部に多数のファイルが含まれるフォルダーです。
バージョン管理システムがこれを処理するには、次のことが必要です。
- ディレクトリ内のすべてのファイルをチェックアウトして、アプリが必要に応じてファイルを変更できるようにします
- チェックイン時に、
- 変更されたファイルをコミットする
- アプリケーションが作成した新しいファイルを追加する
- もう存在しないファイルを削除済みとしてマークします (アプリによって削除されたため)
- これを 1 つの原子的な変更として管理します
既存のバージョン管理システムでこれを処理する最善の方法について何かアイデアはありますか?この分野でより優れたバージョン管理システムはありますか?
解決
Matthew が述べたように、git や mercurial のような分散 SCM システムの場合は問題になりません。
Subversion や CVS などの集中型 SCM を使用する必要がある場合は、バンドルをソース管理にチェックインする前に圧縮 (アーカイブ) できます。これは苦痛を伴う可能性があり、追加の手順が必要になります。これに関する優れたブログ投稿が Tapestry Central にあります。
この記事では、アーカイブを管理する Ruby スクリプトを紹介します。
他のヒント
Mercurial の特定のバージョンでは、ディレクトリ構造ではなくファイルに基づいています。したがって、本格的なリポジトリである作業ツリーは、各レベルで .svn フォルダーを吐き出しません。
また、アプリケーションや他のバンドルのように、置き換えられたディレクトリでも、リビジョン管理下で特定のファイル名のコンテンツが引き続き見つかることを意味します。監視されるのはファイル名であり、inode などの特別なものではありません。
明らかに、新しいファイルがバンドルに追加された場合は、これをリポジトリに明示的に追加する必要があります。同様に、バンドルからファイルを削除するには、「hg rm」を使用する必要があります。
OS X 用の適切な Mercurial GUI はまだありませんが、追加/コミット/マージだけであれば、コマンド ラインを使用するのはそれほど難しくありません。
今後のアップデート:
思い起こせば、SVN でバンドルを管理する際の問題は、バンドルを作成するたびにすべての .svn フォルダーがクリアされることでした。SVN ではルートにある単一の .svn フォルダーにすべてが保存されるため、これはもう問題にはなりません。
このスレッドを白日の下に戻します。2013 年 10 月以降、iWork (Pages 5.0 など) では「フラット ファイル」(zip 形式) での保存が許可されなくなり、バンドルとしてのみ保存できるようになりました。
問題は、そのような構造内にバージョン管理の隠しフォルダーが作成されることではなく (svn の場合はそうです)、 マーク 質問の中で次のように述べています。(アプリケーション、この場合は iWork によって) 追加または削除されたファイルが自動的にアトミックに更新されるため、手動で行う必要がありません。
iWork と Apple が iCloud の使いやすさだけを気にしているのは明らかです。それでも、私は .pages、.numbers、.keynote を Mercurial リポジトリに保存するための本格的なケースを持っています。アップデート後、すべてがバラバラになってしまいます。何をするか?
補遺:
見つかった 'hg addremove
それが私にとってはうまくいきます。
$ hg help addremove
hg addremove [OPTION]... [FILE]...
add all new files, delete all missing files