2016-05-06 4 views
0

私はcvsからgitに移行中です。cvsからgitに移行するときに枝にスパースタグをマージする

には、レポのいくつかのファイルにのみタグを付ける古いタイムシェアのCVSタグがあります。すべてがそうではありません。これらのタグをチェックアウトすると、タグなしのものがすべて削除されたレポのように見えます。これは、一方でcvs/svnと他方でgitとの間の分岐モデルにおけるよく知られた違いです。私のmasterブランチと

  • スタートをして、新しいリリースブランチを作る:

    私は新しい枝のようにしたいのですが。

  • は、tags/Aというタグが付けられたファイルのみを置き換えます。
  • 次に、tags/Bというタグが付けられたファイルのみを置き換えます。
  • その後、全体をコミットします。

理想的には、新しいブランチにはタグ付きファイルの古い履歴とmasterブランチの履歴が含まれます。

これを行うには良い方法がありますか?

+0

私は特にこれを行う必要はありませんでしたが、私はまず 'cvs2 *'(cvs2gitで始まるもの)が何をしているのか見てみましょう。他のすべてが失敗した場合は、手作業で行う:cvs2gitでリポジトリの大部分を変換し、特殊なケース項目を作成し、filter-branchおよび/またはgraft/replaceを使用してそれらをくい込ませる。これらの小さなセット、それ以外の場合もそれを自動化する必要があります。 – torek

答えて

1

cvs2gitスクリプトのcvsレポを準備するために、今、CVSに入った後でこれを実行できますか?すべてのタグをステップ実行し、不足しているファイルをタグに追加します。 cvs tagを単独で使用すると、-Fはタグを移動しません。したがって、タグ/ Bに基づいてタグ/ Aを再適用することができます。タグ/ Bは、まだタグ付けされていないファイルにのみ適用されます。

これを実用的にするには、タグが多すぎることがあります。私は20,000タグ×5分タグ= 34日を考えています。

しかし、gitでそれを行う方がはるかに速いかどうかはわかりません。一度gitを実行すると、各タグに関連付けられているフィックスアップコミットなど、すべてのcvs2git成果物をクリーンアップする必要があります。しかし、理論的には、各タグをステップ実行し、ファイルをチェックアウトし、追加し、コミットを修正し(適切なGIT_環境変数によって作成者と日付を保持する)、タグを移動して、前回のコミットと比較するタグを元の場所に戻すことができる場合は、実際にはブランチにあります。

また、タグが指定されているはずの名前付きブランチにあることが重要ですか?これらのフィックスアップコミットはすべて、あなたのフィックスアップでさえもないからです。 masterブランチが最も優雅で意味のある方法で変換されることを保証するのは実用的かもしれませんが、古いブランチのいくつかをちょっとしたものにすることができます。

を更新するだけクレイジーな思考

。 cvs2svnを実行してタグを修正してから、svn2gitを実行するのは意味がありますか?私はそれがちょっと狂っているのは分かっていますが、Subversionにはgitのチェンジセットがありますが、cvsのようにファイルごとに作業できるため、タグを修正するのに最適な場所になる可能性があります。

1
git checkout -b release master 
git merge --no-commit -s ours tags/A tags/B 
git checkout tags/A -- . 
git checkout tags/B -- . 

git commit # put the above sequence in the commit message if you have love in your heart 

最初のコマンドは「現在のマスターをチェックアウトしていますが、リリース名は新しいブランチ」です。

2番目のタグは「設定されていますが、タグ/ Aとタグ/ Bからノーオペレーションマージをコミットしません」。コミットする前に、必要なマージ結果を整理することができます。

...特に、3番目と4番目のコマンドは、2つのコミットに含まれるもののバージョンを読み込みます。

+0

おそらく 'tags/A'を修正したいのであれば、レシピのgit checkoutは' git checkout -b fixA tags/A〜 'です。新しいコミットは、 'tags/A'と同じ親の上に作成されます。 'tags/A'は' fixA'(あるいは 'fixA〜'でも同じものであることが判明した場合でも)に移動できます。 (また、コミットのために、さまざまなGIT_AUTHOR環境変数を設定して、タグ/ Aと同じ作成者/コミッター/日付にすることができます)。 – Mort

関連する問題