1

私の現在の SubVersion ワークフローは次のようになります。

  1. トランクは、小さなコンテンツの変更とメイン ソース コードのバグ修正に使用されます。
  2. ブランチは、拡張機能とプロジェクトの追加/編集に使用されます。

したがって、トランクの変更は非常に迅速に行われ、テストされ、コミットされ、展開されます。一方、拡張機能とプロジェクトには、追加のユーザー テストと承認が必要です。

同時に、テストと承認が必要な 2 つのブランチがあります。変更が完全にテストされて承認されるまで、トランクにマージしてコミットしたくありません。

私がする必要があるのは、コミットなしで両方のブランチを 1 つの作業コピーにマージすることです。

Tortoise SVN を使用しています。2 番目のブランチをマージしようとすると、次のエラー メッセージが表示されます。

ローカルで変更された作業コピーにマージできません

どちらのマージもコミットせずにこれを行う方法はありますか?

4

5 に答える 5

2

現在、トランクと 2 つのブランチ A と B (どちらもトランクからのブランチ) があります。次のように、AB という別のブランチを作成することをお勧めします。

  1. 作業フォルダーがトランクにない場合は、トランクに切り替えます
  2. 最新のものを更新し、ローカルの変更がないことを確認してください。その場合は、それらを (トランクに) コミットするか、必要に応じて元に戻します。
  3. トランクから作業フォルダーの最後の更新を 1 回実行します。更新したリビジョン番号をメモします (リビジョン R と呼びます)。
  4. リポジトリで、トランクのリビジョン R を「AB」という新しいブランチにコピーします (まだ作業フォルダーを AB に切り替えないでください)。
  5. 作業フォルダーを A にマージします。
  6. 作業フォルダーを AB に切り替えます。
  7. 作業フォルダーを (AB に) コミットし、(AB から) 更新します。
  8. 作業フォルダーをトランクに切り替えます。
  9. 作業フォルダーを B にマージします。
  10. 作業フォルダーを AB に切り替えます。
  11. 作業フォルダーを AB にコミットします。
  12. 修正をテストし、AB にコミットします。
  13. それが機能し、すべてをトランクにマージする準備ができたら、最終コミット (AB へ) を実行してから、作業フォルダーを (AB から) 更新します。
  14. 作業フォルダーをトランクに切り替えます。
  15. 作業フォルダーを AB にマージします
  16. テストと修正
  17. 動作している場合は、作業フォルダーをトランクにコミットします。
  18. ビールを飲みに出かける
于 2012-09-14T14:59:04.940 に答える
1

エリック、「一度に1つの変更のみをデプロイしたい場合があります...」と「コミットせずに2つのブランチを1つの作業コピーにマージする」は互換性のない要件です。または、ブランチを次々にテストするか、2つのブランチを1つの大きなミックスにミックスします。 。

バージョンAとにかく-トランクのあるブランチだけでなく、リポジトリツリー内の任意のノードと任意のノードをマージできます。つまり、一般的に、@ JoelFanワークフローは優れていますが、必要なアクションは少なくなります

  1. トランクのHEADをABにコピーします
  2. ABとAをマージする
  3. マージセットのコミット、テストなど...
  4. ABとBをマージする
  5. マージされた結果をテストする
  6. トランクにマージし、一時的なABブランチを削除します

バージョンBは2-URLマージです。svn help merge、「2-URLマージの例」の部分を開始します。1つのコマンドで2つの独立したブランチを3番目にマージできますmerge BRANCHA[@N] BRANCHB[@M] [TRUNK_WCPATH]

于 2012-10-23T13:02:19.807 に答える
1

すべてのマージ操作は、ローカル サンドボックスで行われます。ジャンキーなコードをコミットするまで心配する必要はありません。

あなたが行う展開プロセス全体はわかりませんが、できることは次のとおりです。

  1. ブランチ A に切り替えます
  2. ブランチ A とブランチ B をマージする
  3. アプリをビルドし、デプロイしてテストする

すべてが正常に機能する場合は、すべての変更をコミットできます (ブランチ A にいます)。次に、トランクに切り替えて、ブランチ A とマージできます。すべての競合が解決されたら、トランクでコミットできます。それだけです。

于 2012-09-14T14:03:47.990 に答える
1

ある時点で同様のワークフローがありました。私が最終的にたどり着いた解決策は、基本的にブランチごとに 1 つずつ、複数のローカル コピーを保持することでした。共有データベースで少し危ういこともありましたが、全体としては非常にうまくいきました。

于 2012-09-14T19:29:57.473 に答える
1

マージ先のブランチの別のコピーをローカル ドライブの別の場所にチェックアウトし、そこにマージしてからコミットできます。次に、2 番目の作業コピー全体を削除して、現在のタスクに戻ります。

しかし、あなたはあなた自身の作業慣行を覆そうとしているようです.2つのブランチをマージしてすべての作業を同時にコミットし、2つの古いブランチを削除したい場合を除きます.そのような場合、正常にマージしますか?

于 2012-09-15T14:05:03.750 に答える