0

古いバージョンのアプリケーションがあります。過去に外部企業から提供されたもので、基本的にライブ版のアプリです。

このバージョンではバグ修正が行われていますが、既存のバージョンでは外部の会社が新しい機能 (大幅なモデル変更) を開発しました。現在、古いアプリケーション バージョン (ライブ) と最後のアプリケーション バージョン (テストされておらず、さらに変更が必要です) があります。

今、私はそのすべてをsvnに置きたかったので、次の手順を実行しました:

  1. トランク フォルダーにリポジトリを作成し、そこに新しいアプリ バージョンのファイルを追加しました
  2. 古いアプリ バージョンのブランチ フォルダーにリポジトリを作成しました
  3. tags フォルダーに両方のリポジトリのタグを作成しました。

次の期間は、前のバージョン (trunk) の開発を続行し、同時に古いバージョン (branch) のバグを修正する必要があります。ブランチ バージョンからトランクに (毎週) 変更をマージする方法は? マージ オプションを試してみましたが、結果は非常に奇妙です (一部のフォルダーのコンテンツが完全に削除されます)。この状況の最善の解決策は何だと思いますか。ブランチのバグを修正するたびにトランク コードを手動で変更したくありません。

ありがとう、

ミンジャ

4

1 に答える 1

0

最初のステップでいくつかの間違いを犯したため、その結果、Subversion が進化パスを認識しない 2 つの無関係なコードが作成されました。

わずかに変更されたワークフローは次のようになります。

デフォルトの単一プロジェクト レイアウト (現在の) の空のリポジトリの場合

  • OLD-CODE を /trunk にインポート (または checkout+add+commit でファイルを追加)
  • このトランクをいくつかのブランチに分岐します ( svn copy URL-OF-TRUNK URL-OF-BRANCH-OLDCODE)
  • トランクの WC を取得します (svn coまたは手順 1 の WC を使用します)。
  • WC の OLD-CODE を NEW-CODE に置き換えます
  • コミットトランク

その後、後続のマージは(わずかに)頭痛の種が少なくなります。大幅に変更されたリファクタリングされたコードをマージするのはどのような場合でも簡単な作業ではないため、ほんのわずかですが、少なくともコードの継続的な履歴と差分のための共通の親が得られます。

悪いニュース: 継続的な履歴の必要性は、最後から 2 番目のステップでのコード置換操作の追加要件を指示します:新しいオブジェクトが古いオブジェクトの子孫である場合(リファクタリングの子) 、古いファイル/ディレクトリを削除して新しいものを追加することはできません。 ) -親子間の履歴をサポートする必要があります( svn mvOS 置換svn rm+svn addログ内の無関係なファイルの結果ではなく)。svn mv最悪のニュース: Subversion のみを使用して、合理的な時間内に防弾方法でそれを行う ( のすべての候補を見つける) 方法がわかりません

于 2013-01-15T15:58:52.860 に答える