2010-12-13 14 views
1

現在、私の会社はバージョン管理にcvsを使用しています。私たちには、私たちが頭に合体することを望んでいる1人のクライアント(質問しない)のために特別に使用された古いコードブランチがあります。水銀を使用してcvsブランチをマージする

このブランチと頭の間のデルタによって、私は水銀のマージ能力が私の仕事を少し楽にするはずだと思います。推論の私のラインは次のとおりです。

  1. ブランチと現在のヘッドの水銀リポジトリを作成します。
  2. トランクレポにブランチレポをマージします。

この段階では、水銀がcvsよりも良いmerge supportを提供することを期待しています。

私はトランクリポジトリの変更をcvsにコミットします。

このアプローチは効果的ですか?この戦略は、私が思うように、それほど苦しい合併につながるのだろうか、それとも私が紛失しているものがあるだろうか?

答えて

1

MercurialがCVSやSubversionよりもマージする理由は、2つのヘッド/ブランチの最新の共通の祖先を追跡するためです。その情報を正確に提供していることを確認するか、合併が悪い

あなたはこのような何か場合:

hg init newrepo 
cd newrepo 
cvs checkout POINT_OF_DIVERGENCE 
hg commit --addremove -m 'commiting point of divergence' 
cvs checkout BRANCH 
hg addremove --similarity 90 # let Mercurial discover any renames 
hg commit -m 'committing branch head' 
hg update -r 0    # jump back to point of divergence 
cvs checkout HEAD 
hg addremove --similarity 90 # let Mercurial discover any renames 
hg commit -m 'commiting HEAD head' 
hg merge 

を、2つのヘッドのための共通の祖先は(CVSコマンドが間違っている場合は申し訳ありませんが、それは幸いに長い時間がかかった)発散のポイントになります。

問題は、POINT_OF_DIVERGENCEがCVSリポジトリ内のどこにあるのかを知ることです - CVSはそれを全く追跡しません。なぜなら、それ自身のマージがそれを使用しない理由です。

CVSのベストプラクティスでは、分岐するたびに発散点を示すタグを作成することを推奨しますが、それをやり遂げなかった場合は、先行きに厄介な狩猟があります。

最新の共通祖先が正しくなければ、MercurialマージはCVSより優れていません。

+0

cvs2hgと呼ばれるcvs2svnのフォークを使用してください。私はブランチをどれくらいうまく扱っているのか分かりませんが、どこから始めればいいのでしょうか。 –

+0

私の経験から、枝が分岐した場所を推測するのはひどい仕事でしたが、それはずっと前です。ブランチポイントタグ(CVSのベストプラクティス)を持っているなら、明示的に行う方が良いでしょう。 –

0

はい、それはうまくいくはずですが、途中で少し問題があるかもしれません(CVSからMercurialへのソースの取得方法:hg convertを使用する、または特定のリビジョンを手動でインポートするなど)。

問題が発生した場合は、新しい質問を作成してください。

0

非常に単純な履歴を除いて、組み込みの変換拡張機能はCVSでうまく機能しません。個人的に私が最初に `HG convert`拡張子と一緒に行く、と乖離が発生した場所、それがうまくできるかどうかを確認しなければならないと思い

http://hg.gerg.ca/cvs2svn

関連する問題