バージョン 1.4 はもう使用しないでください。Subversion 1.5 に大きな変更があり、Subversion にマージ追跡が追加されました。実際、バージョン 1.4 で変更されたコードをコミットできないようにするために、システムにプリコミット トリガーを設定している人が誰もいないことに驚いています。
Subversion 1.4 を使用しているため、他の問題が発生している可能性があります。たとえば、何がマージされ、何がマージされなかったのかわかりません。1.5 より前の Subversion では、マージするすべてのリビジョンを指定する必要があります。手動で。プロパティを探して、svn:mergeinfo
何がマージされたかを確認する最善の方法は次のとおりです。
$ svn propget -R svn:mergeinfo .
これにより、すべてのマージとマージされたリビジョンが出力されます。これを使用して、マージする必要があるリビジョンを把握できます。たとえば、リビジョン 2300 を使用していることがわかり、svn:mergeinfo がリビジョン 1230-2298 がそのブランチから既にマージされていることを示している場合、リビジョン 2299 を 2300 にマージすることを指定する必要があります。
$ svn merge -r2299:2300 $REPO/$branch/$project
それを行ったらsvn:mergeinfo
、最新のマージで更新する必要があります。
$ svn pe svn:mergeinfo . #And all files/directories where this is set
もう 1 つの可能性は、誰かがブランチ/トランクを削除して再作成したことです。誰かがこれをしたと想像してください:
$ svn co $REPO/trunk/foo
A foo/bar.txt
A foo/foo.txt
$ cd foo
$ svn delete bar.txt
$ svn commit -m"Deleted bar.txt"
$ svn up
$ vi bar.txt
$ svn add bar.txt
$ svn commit -m"Added bar.txt back in"
あなたの単なる人間の目に$REPO/trunk/foo/bar.txt
は、両方のリビジョンで同じだと思います. 結局、どちらも URL を持っています$REPO/trunk/foo/bar.txt
。Subversion にとって、これら 2 つbar.txt
は 2 つの完全に異なるファイルであり、共通点はありません。誰かが に変更を加え$REPO/branches/1.2/foo/bar.txt
、この変更をマージしようとすると、マージの競合が発生します。実際、マージの競合は、ローカルの追加が更新の邪魔になっていることを示しています。
トランクがブランチと一致する必要があると判断する場所をたくさん見てきました。彼らはトランクを削除し、ブランチからファイルをコピーしました。実際、私はこれを見ました:
$ svn delete -m"Who needs trunk?" $REPO/trunk #Delete trunk
$ svn add -m"Making a real mess of things" $REPO/trunk #Add a new trunk
$ svn co $REPO/trunk # Check out the now empty trunk
$ cd trunk
$ cp -R $work/branches/1.4 . #Copy a branch 1.4 working directory to trunk
$ svn add . #Now add all of those files back in
$ svn commit -m"A trunk with files that aren't related to anything!"
この場合、開発者はトランクを削除しただけでなく、単に新しい空のトランクを作成し、ファイルを Subversion の背後にコピーしてから、再度追加しました。トランク内のすべてのファイルは、リポジトリ内のどのファイルとも完全に無関係です。似たような URL を共有していますが。この場合、ブランチからトランクにマージできなかった理由も知りたいと考えていました。結局のところ、それはファイルがどこから来たのですか?
これが行われた場合、基本的に推進手段のないかなり腐敗した河口を上っていることになります.
私が追加できる唯一の提案は、試してみることsvn merge --ignore-ancestory
です。また、パラメーターを試して、--dry-run
何にも影響を与えずにマージがどのように行われるかを確認することをお勧めします。