svn:mergeinfo が破損しているかどうかを確認するにはどうすればよいですか?また、それを修正するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2790471

質問

mergeinfo が破損しているのではないかと思われますが、よくわかりません。どうやって判断すればよいのか、また問題解決に役立つリソースは何か知っている人はいますか?

ここが問題です。私のチームは最近アジャイルに移行し、異なるチームが同じソースで同時に作業する機能ブランチ (実際にはストーリー ブランチ) を使用しています。ストーリーが高い準備状態に達すると、チームはトランクにマージされます。変更の欠落、予期しない変更、競合により、マージには数日から数週間かかります。私たちは 5 ~ 10 人のチームのことを話していますが、その労力や離職率は非常に高いようです。

ユーザーはこのマージ パターンを使用します a) PULL - トランクからブランチへのマージ、解決、テスト、コミット b) PUSH - ブランチからトランクへのマージ、解決、テスト、コミット c)ブランチを再作成します(または、通常は新しいストーリーブランチを作成し、完了してから古いブランチを削除します)

これが終わるまでに、枝と幹は整列しているはずです。

私たちが見ている問題:

  1. トランクからブランチへのマージ中に報告されなかった変更は、後続のブランチからトランクへのマージで反映されます。
  2. マージ中に svn:mergeinfo プロパティで競合します
  3. ファイルが見つかりませんが、新しいファイルをローカル編集してブランチに追加し、トランクにプッシュしました
  4. 受信 + ローカル削除 (トランクとブランチで削除されたファイルは競合として表示されます)

(1) そんなことはあってはならない。ブランチからトランクへのプルにより、トランク上に既に存在するすべての変更が 2 つ同期されます。ブランチとトランクのマージにおける変更は、トランクで発生した変更です。したがって、最初のマージではブランチに伝播されるはずでしたが、伝播されませんでした。これは、トランクの変更を「隠す」ことになる mergeinfo データの破損を示しています。

(2) あってはならないことです。SVN はマージ追跡の変更を管理する必要があります。これは、mergeinfo データの破損も示しています。

(3) あってはならないことです。ブランチに新規ファイルを追加した場合です。トランクに追加された新しいファイルとして表示されるはずです。これは、マージ情報データの破損も示しています。

(4) これは SVN のバグであり、修正できないと思います。それでも、これが私たちの唯一の問題であれば、私は幸せだろう

現在、svn 1.5.x サーバー上にあり、クライアントは svn 1.6.x および svn+ssh を使用して接続しています。いくつかの修正が問題に影響を与える可能性があるため、最新かつ最高の SVN に移行する予定です。

それでも、mergeinfo データが間違っていることは確かのようです。

  • すべての変更を報告しないマージ
  • mergeinfo プロパティのマージでの競合

探し始めるのに良い場所はありますか?

役に立ちましたか?

解決

SVN分岐/マージでいくつかの実験を行いましたが、マージが機能しない場合にはいくつかの状況があることがわかりました。たとえば、トランクからの変更が上書きされます。したがって、機能ブランチにSVNを使用し続けると、痛みの世界になります。

GITで同様の実験を行いましたが、誤ったマージを取得する方法は見つかりませんでした。 GITに移動することがチーム/管理によって受け入れられる可能性がある場合は、使用することを強くお勧めします。

他のヒント

私たちも同様の状況で同様の問題を抱えていましたが、ほぼ解決しました。

主なものは次のとおりです。

ブランチの作成後にトランクからブランチにマージする場合は、(svn merge --record-only を使用して) ブランチのコミットでトランクにフラグを立てる必要があります。そうしないと、トランクに再統合しようとすると、ブランチのコミットをマージしようとします。幹から枝へ幹に戻ります。

これは明らかに、後のトランク -> ブランチのコミット後に行われたトランクへの変更を元に戻すことになり、大規模な競合 (特にトランクに新しいファイルまたはディレクトリを作成した場合のツリーの競合) などを引き起こす傾向があります。

したがって、私たちのプロセスは、作成後にトランクをブランチに決して同期しない (存続期間が短いブランチには正常に機能します) か、次のことを行うかのどちらかです。

  • 幹からの枝b
  • トランクとブランチにコミットします
  • トランクをブランチに再統合してコミットします (競合は解決しますが、コンパイルする場合でも変更は加えません)
  • すぐにトランクからブランチへのコミットリビジョンの svn merge --record-only を実行します
  • ブランチに関するその他の問題を修正し、開発を続行します
  • 完了したら、枝から幹に再統合します。

私が見つけたのは: http://www.collab.net/community/subversion/articles/merge-info.html 私たちが間違っていたことを解決するときに役に立ちました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top