web-dev-qa-db-ja.com

リライトのバージョン管理の実践

言語Xで製品(プロトタイプ)P_OLDを開発し、現在、言語YでP_NEWとしてゼロから書き直しています。

P_NEWとP_OLDは同じ製品なので、

P_NEWは単にP_OLDの支柱なのか、それとも独自のリポジトリなのか?

バージョン管理の観点からこのような大きな変更を処理する通常の方法は何ですか?

29
1v0

ほぼ間違いなく新しいリポジトリが必要です。

リポジトリの目的は次のとおりです。

  • 履歴と変更を追跡して、簡単に比較できるようにする
  • パッチファイルを電子メールで送信して作業ディレクトリに手動で適用するだけでなく、ブランチとマージを管理する

プロジェクトを完全に最初から書き直す場合は、同じリポジトリに書き直しても意味がありません。古い言語で書かれたパッチをリライトに適用することはできません。リポジトリを切り替えても、古いリポジトリの履歴は消えません。切り替えた場合、2つの言語がリポジトリを駆け巡る奇妙な暫定ステージはありません。

言語を変更するときにリポジトリを維持することを検討する唯一の理由は、a)言語が非常に類似しているため、コードを変更せずに一方から他方にコードをコピーして貼り付けることができる場合、またはb)プロジェクトでバージョン管理の機能的なコンテンツの大部分は、保持しているテンプレート言語のテンプレートのようなものであり、変更しているコアの言語は、行ごとに別の言語に翻訳されます(それでもわかっている場合のみ)移行中もテンプレートを繰り返し使用する必要があります)。

46
user52889

私は常に自分で新しいリポジトリにリライトを入れています。このようにして、ビルド、テスト、およびデプロイメントをすべて独立して行うことができます。

プロジェクトを別の言語で書き直す場合、ビルド、テストの実行、デプロイなどのタスクの類似性はほとんどありません。それらを独自のリポジトリーに隔離するだけで、痛みを軽減できます。そうすれば、古いシステムから新しいシステムへのユーザーとデータの移行をどのように管理するかという面倒を心配するだけで済みます。それはいつも楽しいことです。 :)

16
dsw88

システムが十分にモジュール化されており、リンク互換性がある場合は、単一のリポジトリーとビルドからメリットを得られます。たとえば、CシステムがC++で書き直されている場合、C++コードは既存の機能を呼び出して段階的に置き換えることができます。

ただし、この場合でも、関連する古いコードが必要に応じて取り込まれる新しいリポジトリを開始することを主張する人もいます。

5
Keith