6

多くの Mac アプリが「バンドル」を使用していることをご存知でしょう。アプリケーションからは 1 つのファイルのように見えますが、実際には多くのファイルが含まれるフォルダーです。

バージョン管理システムでこれを処理するには、次のことを行う必要があります。

  • ディレクトリ内のすべてのファイルをチェックアウトして、アプリが必要に応じてファイルを変更できるようにします
  • チェックイン時、
    • 変更されたコミットファイル
    • アプリケーションが作成した新しいファイルを追加する
    • もう存在しない削除済みファイルとしてマークします(アプリがそれらを削除したため)
    • これを 1 つのアトミックな変更として管理する

既存のバージョン管理システムでこれを処理する最善の方法についてのアイデアはありますか? この分野でより優れたバージョン管理システムはありますか?

4

4 に答える 4

2

ディレクトリ構造ではなく、ファイルに基づく特定のバージョンの Mercurial。したがって、完全なリポジトリである作業ツリーは、各レベルで .svn フォルダーを吐き出しません。

また、アプリケーションやその他のバンドルのように、置き換えられたディレクトリは、リビジョン管理下で特定のファイル名を持つコンテンツを引き続き見つけることも意味します。ファイル名は監視されますが、inode やそのような凝ったものは監視されません!

明らかに、新しいファイルがバンドルに追加された場合、これをリポジトリに明示的に追加する必要があります。同様に、バンドルからファイルを削除するには、「hg rm」を使用する必要があります。

OS X 用のまともな Mercurial GUI はまだありませんが、追加/コミット/マージするだけなら、コマンド ラインを使用するのはそれほど難しくありません。

于 2008-08-25T23:30:19.377 に答える
1

Matthewが述べたように、gitやmercurialのような分散型SCMシステムの場合は問題になりません。

SubversionやCVSなどの集中型SCMを使用する必要がある場合は、バンドルをソース管理にチェックインする前に、バンドルを圧縮(アーカイブ)することができます。これは苦痛を伴う可能性があり、余分な手順が必要です。Tapestry Centralには、これに関する優れたブログ投稿があります。

MacOSXバンドルとSubversion

この記事では、アーカイブを管理するルビースクリプトについて説明します。

于 2008-08-28T14:39:37.337 に答える
1

2013 年 10 月の iWork (Pages 5.0 など) では、「フラット ファイル」(zip 形式) に保存することはできなくなり、バンドルとしてのみ保存できるようになりました。

問題は、そのような構造内にバージョン管理の隠しフォルダーを作成することではありません (svn の場合はそうです) が、Markが質問で述べているように、追加または削除されたファイルの自動でアトミックな更新を取得することです (この場合は 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
于 2013-11-01T13:21:59.907 に答える
1

未来からのアップデート:

思い出すと、SVN でバンドルを管理する際の問題は、バンドルを作成するたびにすべての .svn フォルダーがクリアされることでした。SVN はすべてをルートの 1 つの .svn フォルダーに保存するため、これはもはや問題ではありません。

于 2013-02-15T21:45:00.780 に答える