作業コピーのローカル SVN ツリーは、リポジトリのディレクトリ構造と一致するように設定されています。つまり、トランク、ブランチ、およびタグのフォルダーがいたるところにあります。これは、作業コピーをセットアップする良い方法ですか? より良い/代替のアイデアはありますか?
5 に答える
1 つの例外を除いて、作業コピーをあなたと同様の方法で作成すると便利だと思います。ブランチとタグのスパース チェックアウトを行い、必要に応じて入力/削除します。したがって、チェックアウト コマンドは多少似ています。
$ svn co --depth immediates url_of_myrepo $PWD ;# empty checkout of the repo
$ svn up --set-depth infinity $PWD/myrepo/trunk ;# sticky dense update of the trunk
...
$ svn up --set-depth infinity $PWD/branches/release_branch ;# sticky dense update of a branch
$ cd $PWD/branches/release_branch
$ svn merge -c 1234 ../../trunk ;# merge a revision from trunk
$ svn commit
$ cd ..
$ svn update --set-depth exclude release_branch ;# sticky wipe out of branch from the working copy
...
それは少し型にはまらないと思います。より一般的には、ツリー全体ではなく、実際に作業する予定のプロジェクト ブランチ/タグ/トランクのみの作業コピーをチェックアウトします。
いつでも誤ってツリー全体に変更を加えることができない場合でも、何を変更しようとしているかを思い出すのがいくらか容易になります。
だからあなたが持っているなら
proj
tags/
t1/
branches/
b1/
b2/
trunk/
あなたはするだろう
svn checkout proj/trunk proj-trunk
ブランチで同時に作業する必要がある場合は、別の作業コピーをチェックアウトします。
svn checkout proj/branches/b1 proj-b1
時々、小さなプロジェクトの作業コピーをルートにチェックアウトしたままにしておくので、タグやブランチを調べることができますが、実際にはこのコピーを変更しません。適切なテキスト エディタなどを使用してプロジェクト リポジトリをブラウズするのは、簡単な方法にすぎません。ただし、頻繁に同期が取れなくなり、慎重に使用する必要があるsvn up
ため、この手法はあまり使用しません。
私がソース管理で通常行っていることは、メイン ブランチの最新リビジョン、または現在メイン ブランチと呼ばれているものに同期することです。一般的に言えば、特定の顧客が特定の機能を要求している場合にのみ、ブランチまたはブランチに同期しますが、これはすべてのビルドで一般的に利用できるものには含めたくないものです。ただし、その機能が「GA」ビルドに移行することを検討するほど十分に進歩している場合は、それらの変更をいつでもメイン ブランチにマージできます。
Subversion の全体的な目的は、バージョンを管理し、バックアップを提供することです。複数のブランチを保持することは、すぐにまとまりがなくなり、将来本当に混乱するための優れた方法のように思えます。また、そもそもソース管理の目的を無効にします。
私の意見では、これは、リポジトリ全体をチェックアウトせずに、新しいブランチをチェックアウトする必要がある場合に適しています。現時点では作業しないフォルダを実際に作成する必要はありません。たとえばmyproject/trunk
、プロジェクトのトランクで作業を開始するときのようなものから開始する必要があります。このようにして、ブランチに移動したいときにすぐに、そのブランチも最適なパスでチェックアウトできます。
myproject/branches/mybranch/[rev]
また、頻繁にリビジョンを切り替える必要がある場合は、わかりやすいように、ブランチ名の後にリビジョン フォルダーを作成することを好みます。
通常、マイケルが説明したように
proj
tags/
branches/
trunk/
しかし、ドキュメントやライブラリ用のフォルダーを追加することもありました。