3

私の最初の大きなディレクトリのマージに苦労し、なぜこれらのエラーが発生するのかについての手がかりを期待していました。

私は1週間前にtrunk/のコードを分岐し、branchs / myBranchのコードに多くの変更を加え、それらをtrunk/にマージするときが来たと判断しました。それ以来、トランク内のコードは変更されていません。新しいコードが分岐したときとまったく同じであるため、競合が発生する可能性はないと思いました。

私が知っているように、新しいコードをトランクにマージしようとすると、多くの競合が発生し、ファイルの欠落が報告されるという誤った仮定があります。誰かがこれが起こっている理由を明確にすることができますか?

これが基本的な事実です:

  • コードはリビジョン19466で分岐しました。
  • それ以来、トランクは手つかずのままです。変更なし(最終変更Rev:19453)。
  • ブランチは(残念ながら?)ローカルで行われ、いくつかの変更が組み込まれました。
  • 次のコマンドを使用して、ブランチイントロトランクからの変更をマージしてみましたsvn merge -r19466:HEAD branches/myBranch trunk/。(私がトランクに立って最後の議論をスキップしていたか、または単に上記を行っていたかは関係ありませんでした)
  • Subversionは、ファイルfooDaoが見つからないことについて文句を言います。 ! C trunk/fooDao.java

    > local missing, incoming edit upon merge

    このファイルは、ブランチが作成されたのと同じコミット(19466)で名前が変更されましたが、。を使用して発行されたため、subversionがこれを取得する必要があると思いましたsvn move。ログにはその祖先が表示されます。

    ... /branches/myBranch/fooDao.java(/branches/myBranch/fooDato.java:19452から)

  • コードを変更しなくてもリビジョン番号が増えるのはなぜか疑問に思われる場合は、他の多くの(アクティブなプロジェクト)を含む共有リポジトリであるためです。
4

1 に答える 1

3

私が経験したエラーの主な原因は、不適切な方法でブランチを作成したことです。分岐を正しく行うと、ブレインポイントにはトランク (そのリビジョン) とまったく同じファイルが含まれます。リビジョン 100 で作成されたブランチがトランクにマージされるsvn merge -r100:HEAD ../branches/myBranch ./trunk場合、それらのリビジョンのファイルへの変更のみを使用して取得することができます。

残念ながら、ブランチを作成する前に、trunk/ にローカルで変更を加えました。これらの変更は新しいブランチにコピーされ、コミットされました。したがって、myBranch とトランクのファイルは、ブランチの作成時点では異なっていました。状況を改善するために、ブランチ作成にマージ元のリビジョン (rev99 など) を見つけ、そこからマージを行う必要がありました。競合が発生した場合は、"tf" (フル) を選択して、競合しているブランチから完全なファイルを取得するだけで簡単に解決できました。トランクは手付かずで変更がなかったので、この簡単な修正を行うことができました。

要約すると、問題を回避するには、次のことを確認して正しく分岐してください。

  • トランク内のすべてのローカル変更がコミットされました
  • サーバー上でコピーを行います。「svn cp https://source.foo.com/svn/repos/myProj/trunk https://source.foo.com/svn/repos/myProj/branches/myBranch」のように
于 2011-04-05T14:21:28.710 に答える