1

私の会社はバージョン管理にSVNを使用しています。一度に複数のバグに取り組む必要があることがわかりました。開発と修正が可能な環境を作成するには、同じファイルに複数の(場合によっては競合する)変更を加える必要があります。基本的に、ワークフローをインスタンス化できるようにしたいだけです。

作業を簡単にするために、ローカルマシンでgitを使用してインスタンスを管理し、SVNを使用してローカルを会社の最新の安定版と同期させたいと考えています。

ローカルのメイントランクとローカルの「Nightly」トランク(基本的に最新の更新)を作成すれば、これを実行できると理論付けました。私は毎晩最新のビルドを最新の状態に保ちます。メインは、会社のトランクに変更をコミットできる一種の「プッシュポイント」として機能します。プロジェクトを作成したいときはいつでも、毎晩分岐し、変更を加え、毎晩マージしてから、それをメインにマージして、SVNにコミットします。

次のようになります。

Main    -----------------------------------------------------------------------
           \                                  /
Nightly     -------------------------------------------------------------------
                     \                /
Project               ----------------

そして、それが明らかでない場合、毎晩のポイントは、メイントランクを汚染することなく、取得した更新をプロジェクトに取り入れることを許可することです。

これは機能しますか?多分(おそらく)より良い解決策はありますか?フィードバックをお願いします。

4

3 に答える 3

3

SVNブランチを使用するには、それらを切り替えるか( "svn switch"を使用)、Al_Gが提案したようにいくつかの作業コピーを使用します。

Gitベースのソリューションが本当に必要な場合は、次のツールをご覧ください。* SubGit ---サーバーにインストールされ、そのSVNリポジトリ用の純粋なGitインターフェイスを作成します。GitにプッシュされたすべてのコミットはSVNと同期され、その逆も同様です。*サーバーにアクセスできない場合は、SmartGitまたはgit-svnを使用できます。これらは同様の機能を備えていますが、SmartGitはマージ(チェリーピックを含む)を変換し、無視し、タグ付けをより正確に行います。

于 2012-07-05T17:04:23.467 に答える
2

私はコメントから私の答えを打ち破るつもりです。

私は常に複数のブランチを使用しています。私たちのレイアウトでは、トランクに「ライブ/テスト中」があり、すべての開発がブランチにあります。ブランチでの 2 つの新機能の開発と、トランクでのバグ修正を終えたところです。

通常、私は自分が取り組んでいるプロジェクトごとにブランチ (タグ) を作成し、そのための固有のディレクトリを作成します。したがって、2 つのプロジェクトが進行中の場合は、次のようになります。

.../Trunk/
.../Branch1/
.../Branch2/

これにより、プロジェクトを「シフト」するたびに切り替える必要がなくなります。必要に応じて (少なくとも週に 2 ~ 3 回) トランクからブランチにマージして、ブランチを最新の状態に保ちます。すべての新しい作業は、適切なブランチにチェックインされます。ディレクトリ間を移動して「ブランチを変更」できますが、ディスク容量を除けば、それほど苦労することはありません。

マージの許可が下りたら、ブランチをトランクに再統合 (マージ) します。SVN docs のBranching and Merging をチェックすることをお勧めします。

Windows、Linux、OS X などを使用していますか? 優れた UI を取得するか、一般的な使用法に関するスクリプトを作成する必要があります。Tortoise SVNVisualSVN (どちらの会社とも提携していません)を使用して、Windows で両方を少し使用しています。

于 2012-07-05T17:01:41.713 に答える
1

はい。絶対。

私は自分のものをSVN リポジトリにマップされているgit svn dcommitというブランチにマージ (つまり) するセットアップを持っています。開発全体は、個別のブランチとすべての git マジックで行われます。svntrunk

唯一重要なことは、誤って を使用してブランチをリベースしないことです。ブランチは、次のような限られた機能セットでのみアクセスできるものと考えてください。svngit rebasesvn

  • git svn fetchインデックスを更新する (
  • git svn rebaseインデックスを更新し、ローカルの変更を更新されたインデックスにリベースします
    (のようにgit pull --rebase)
  • git svn dcommitローカルコミットをプッシュするtrunk
    (のようにgit push)

そしてもちろん、git の使用を極秘に保ちたい場合は、次のようなコメントを使用しないでください。

02259fd の修正: 忘れ物

同僚が次のような質問をした場合、正直に言ってはいけません。

あなたはすでにすべてをマージしましたか???

参考文献: Git Magic 、ゲリラ バージョン管理の章

于 2012-07-05T18:56:25.520 に答える