0

社内で SVN 方法論をセットアップしようとしています。問題は、プログラマーがタスクを完了するための簡単な方法を作成したいということです。私たちはタスクの割り当てに取り組んでおり、タスクはコード ベースのサブセットのみを変更し、通常はリポジトリのさまざまな部分からオブジェクト (ファイル) を取得します。

私がやりたいことは、SVN でブランチを作成する方法を見つけ (その名前をバグ トラッカーのタスク コードと想像してください)、そのブランチ内にはそのタスクに関連するファイルだけがあることです。

このように、さまざまなモジュールとシステムの部分を分離するための巨大なフォルダー構造がありますが、小さな例を取り上げます: フォルダー 1、2、3 の中にいくつかのファイルがあります。
各フォルダーからファイルを取得し、各フォルダーのファイルを含む /branches/task_1 にブランチを作成します。

3 つのファイルを使用してそのブランチのみをチェックアウトし、トランクの残りの部分を変更せずに、変更をトランクにマージする方法が必要です。これは、開発者の多大な労力なしに可能ですか?

編集: コードは主に SQL および PL/SQL コードであるため、壊れるビルドはありません。従来のソフトウェア開発パラダイムではなく、私が求めていることに集中してください。

EDIT2: クライアントに従来の SVN 戦略を使用するよう説得しました! 勝つ!

4

1 に答える 1

2

いいえ、簡単なことではありません。当然のことながら、これは恐ろしい戦略です。

SVN は、ファイルのツリーの一連のスナップショットとして使用することを意図しています。そのため、ツリーからブランチにチェリー ピッキングを行ってから、それらをマージして戻そうとするのは面倒ですが、不可能ではないと思います。さらに、各タスクで何が起こるかをテストする必要があります...とにかく、アプリケーション全体に対してテストする必要があります。だから、あなたが求めていることをするのはちょっと無意味です。

さて、設計上モジュール化されている場合は、各モジュールを個別のツリーまたは個別のリポジトリに格納し、完全なアプリケーションを一連の として維持できますが、svn:externals実際にはより複雑になります。標準的な方法で物事を行う方がおそらく良いと思います。

そして、それが不可能だと思わないなら、少なくとも私をある方向に向かわせてみてください。

CLIツールからブランチを作成する必要があります.特定のファイルのセットをコピーしてブランチを作成することだけをサポートするクライアントを私は知りません(そのファイルのセットがリポジトリ内の特定のディレクトリの内容でない限り) )。したがって、あなたまたは開発者は次のようなことをしなければなりません:

svn cp --parents SVNURL/trunk/file1.sql SVNURL/trunk/file2.sql SVNURL/branches/taskname

問題は、これが中間ディレクトリ構造ではなく、トランクからファイルをコピーするだけであることです。したがって、トランクにフラットなファイル レイアウト以外のものがあれば、すべてをマージして戻すときにおそらく混乱するでしょう。

これを回避する唯一の方法は、次のように各ファイルを個別にコピーすることです。

svn cp --parents SVNURL/trunk/file1.sql SVNURL/branches/taskname
svn cp --parents SVNURL/trunk/file2.sql SVNURL/branches/taskname
svn cp --parents SVNURL/trunk/migrations/file3.sql SVNURL/branches/taskname/migrations

要するに、マージするときは、一度に 1 つのファイルをチェリーピック マージする必要があるということだと思います。これは、あまりメリットがないのに、私にはかなりのオーバーヘッドのように思えます。

ここで扱っていることとワークフローについて説明した後でも、これは悪い考えだと思います。TRUNK を BRANCH にコピーして、必要なファイルだけを操作すれば、作業がずっと楽になります。ログを見るだけで、これらのファイルが何であるかを簡単に確認できます。

また、開発者がタスクの範囲外のものを誤って変更することを心配している場合は、タスクの影響を受ける既存のファイルへのコミット アクセスと新しいファイルを追加するための書き込みアクセス許可のみを開発者に与える許可を設定するだけでよいと確信しています。必要であれば。

于 2013-03-05T19:59:56.107 に答える