あなたが望むものを見てみましょう。後で参照できるように、番号を付けます...
- いつでも気軽にオリジナルに戻れるように。
- 変更を元のリポジトリ トランクにマージする意図はありません。
- 多くの個別の「実験」をキャプチャし、必要に応じて最小限のコードをキャプチャし、元のリポジトリからすべてを保持します。
- 特定の元のリポジトリ バージョンとの同期は不要です。
- 元のリポジトリの作業コピーから始めて、特定のフォルダーやファイルをターゲットにして実験的なリポジトリに移動できるようにしたいと考えています。
#2によると、このコードを元のコードにマージすることは決してありません。それはいいです。ブランチを持つことができ、それらに対して何もすることはありません。ポイント 4 によると、元のリポジトリに同期し直す必要さえありません。変更を加えたら、リポジトリから新しいものは必要ありません。
ポイント#1とポイント#3は私を混乱させます。自由にオリジナルに戻せるとはどういう意味ですか? 必要に応じて、元のレポの変更を自分のレポに入れる必要があるということですか? そして、多くの離散実験とはどういう意味ですか? 元の変更とは異なる方向性を試したいということですか?
ベースコードをチェックアウトして、独自のプライベートリポジトリを作成することを妨げているのは何ですか?
タグを作成してマークする元のコード ベースから何度も分岐するだけで、多くの個別の実験に分岐を使用できます。タグに戻るだけで、自由に元に戻すことができます。
それはうまくいくでしょうか?
$ # First create the experimental repo
$ cd $HOME/my_repo
$ svnadmin create my_repo
$ # Now let's start it up
$ svnserve -r . -d
$ # Now, let's do a checkout and get some work done!
$ mkdir $HOME/my_workspace
$ cd $HOME/my_workspace
$ svn co svn://localhost my_project
$ cd my_project
$ # This is an empty directory. Let's fill it up!
$ svn mkdir trunk tags, branches
$ cd truck
$ # Now, get the revision you want and put it in your repository
$ svn export http://server.com/src/trunk/project .
$ # We have all of the code, let's add it to our repository
$ svn add *
$ cd ..
$ svn commit -m"Original code" #This is your original
$ # Now, we'll mark the original, so you can get back to it
$ svn cp -m"Tagging original" svn://localhost/trunk svn://localhost/tags/ORIGINAL
これで、独自のリポジトリができたので、変更は元のリポジトリには表示されません。ORIGINAL
そして、タグを探すことで元のソースに戻ることができます。
3つの実験をしましょう
$ svn cp -m"Experiment #1" svn://localhost/tags/ORIGINAL svn://localhost/branches/experiment_1
$ svn cp -m"Experiment #2" svn://localhost/tags/ORIGINAL svn://localhost/branches/experiment_2
$ svn cp -m"Experiment #3" svn://localhost/tags/ORIGINAL svn://localhost/branches/experiment_3
ORIGINAL
タグからどのように分岐したかに注目してください。そうすれば、元のコードに戻っていることがわかります。実験ごとにブランチが使用されていることに注意してください。それらの間でマージすることは決してないかもしれませんが、それは問題ありません。あるブランチから次のブランチにマージする必要があるということは何もありません。
また、実験が終了したら、いつでもブランチを削除できます。
$ svn delete svn://localhost/branches/experiment_1
svn ls
これはまだリポジトリにありますが、HEAD で実行すると表示されなくなります。ただし、必要に応じて引き続きアクセスできます。枝が散らかるのを防ぎますが、再び必要になった場合でも利用できます。
したがって、外部について心配する必要はありません。単に新しいリポジトリを作成し、コードをインポートして楽しんでください。
ただし、誰かが私のシステムでこのようなことをしたい場合は、通常、それを思いとどまらせ、元のリポジトリで操作できるブランチを提供します。たとえば、ボブに , というディレクトリを与えると/branches/BOB/trunk
しbranches/BOB/branches
branches/BOB/tags
ます。このように、これがボブのプライベート エリアであることが示され、ボブは遊んだり、好きなことをしたりできます。同時に、Bob はレポからコードを何度も取得でき、さらに新しいコードを取得することもできます。多くの人がこれを行いたい場合は、プライベート フォルダーを最初の階層に追加します。
/trunk
/branches
/tags
/private
そして、各ユーザーに /private の下に独自のディレクトリを与えます。ユーザーが他のユーザーのコードに触れるのを防ぐことができる pre-commit フックがあります。すべてをリポジトリに保持することで、柔軟性が向上します。ユーザーは、コードを共有したり、さまざまなリビジョンを作成したり、遊んだりすることができます。プライベートな実験をメイン リポジトリに保持することに問題があったことは一度もありません。