2

多くのディレクトリとファイルを含むリポジトリがあります。スクラッチビルドの場合、ルートから始まるツリーのサブセットのみが必要です。一部の不要なサブツリーには、スクラッチビルドに必要のない巨大なファイルが含まれています。まばらなツリーのみをチェックアウトする--depth emptyオプションを試してみましたが、不要なディレクトリの小さなブラックリストではなく、必要なディレクトリの大きなホワイトリストになってしまったため、これは面倒で逆です。スクラッチビルドに必要な新しいディレクトリを監視する必要があるため、ホワイトリストのアプローチはさらに複雑になります。

チェックアウトを再帰的dirdir/foo/bar/bazdir/frob/tweakに表現する方法はありますが、フープを飛び越えずにスキップしますか? ?の-prune述語のようなものfind(1)

4

1 に答える 1

3

Subversion は、ディレクトリ ツリー全体が必要であることを想定しています。まばらなチェックアウトを行う方法はありますが、メカニズムを介してフープジャンプするようなものです。

まず、チェックアウトを実行し、--depthimmediate に設定します。

 $ svn co --depth=immediates svn://localhost/myproject/trunk myproject-trunk

これにより、ルート直下のすべてのファイルとディレクトリがチェックアウトされます。

次に、あらゆる種類のシェル スクリプト マジックを使用して、必要な--set-depthディレクトリのみをフラグで更新できます。

$ shopt -s extglob   #Needed on BASH, but not Kornshell
$ svn co --depth=immediates $REPO_URL
$ svn up --set-depth=infinity !(foo|frob)

上記は、 と を除くすべてのディレクトリ ツリーのチェックアウトをfoo行いfrobます。

同様のこともできfindます。

問題は、Subversion が非常に単純であり、そのように設計されていることです。Perforce や ClearCase などの他のバージョン管理システムでは、何をチェックアウトするかを指定し、Perforce ではチェックアウト方法を指定します。

ただし、それにはビューを設定する必要があり、これらのバージョン管理システムの使用が非常に複雑になります。パーフォースが好きです。高速で強力ですが、ビューが必要なため、開発者はそれを嫌っていました。彼らにとって、それはある程度の複雑さを追加しましたが、実際にはあまりメリットがありませんでした. まばらなチェックアウトを行う必要はほとんどありませんでした。

これが Subversion リポジトリの一般的な問題である場合は、レイアウトを再考してより便利にすることをお勧めします。Subversion では、リポジトリ全体がブランチとタグを含む単なるファイル ツリーであるため、これはそれほど難しくありません。トランクを放棄して特定のブランチに置き換えたり、作業を容易にするためにリポジトリの名前を変更して再構築したりすることを何度も決定しました。

大規模な再構築が必要な場合は、必ず開発者と調整してください。作業中のディレクトリ ツリーを移動すると、変更をコミットできないことが突然わかります (ほとんどの場合、svn switch --relocateこの問題を回避するために変更を行うことができます。きれいなチェックアウトから始めましょう。

于 2012-08-31T14:05:56.323 に答える