4

私は持っている

www.example.com の /var/www/cool_codebase であり、

www.example.net の /var/www/cool_codebase

コードベースは、異なるサーバーで実行されている同じ Web アプリ用です。コードベース (クライアント固有のビットとボブなど) の間にはいくつかの特殊化がありますが、それほど多くはありません。1 つのコードベースには、もう 1 つのコードベースにないファイルがあり、その逆もあります。プログラミングのいくつかのビットも異なります。

各コードベースをローカルホストにダウンロードしましたが、質問は次のとおりです。

これらの 2 つのフォルダーを 1 つのフォルダーにマージし、それを 1 つの「大規模な統合コードベース」として SVN にコミットするにはどうすればよいですか?

各コードベースを独自の SVN リポジトリに配置してから、これらの個別のリポジトリをマージする必要がありますか? または、SVN の前にコードベースをマージできますか?たとえば、Linux コマンドを使用して、SVNコミットできますか?

どんなアイデアや助けも大歓迎です。

最終結果は、www.example.com と www.example.net の両方に問題なく展開できる 1 つの「大規模な統合コードベース」になることを付け加えておきます。

(追伸。はい、何をするにしても、いくつかのファイルを編集し、プログラミングを「汎用」にする必要があることを認識しています。これは気にしません。単に自動化または半自動化する方法を探しているだけです。 -全体を自動化します。)

4

1 に答える 1

2

コードベースを svn にコミットした後にマージすると、後で履歴にアクセスできるという利点があります。コードのどの部分が「.com」バージョンからのもので、どの部分が「.net」からのものかを確認できます。そして、2つを組み合わせる過程でどのような変更が加えられましたか.

これを行う1つの方法:

  1. 「.com」コード ベースを新しいリポジトリにトランクとしてインポートします。
  2. そのトランクからブランチを作成します。svn cp svn://repo/trunk svn://repo/branches/net
  3. ブランチをチェックアウトし、「.net」コードをコピーして、svn add必要removeに応じて実行し、ブランチに .net バージョンが正確に含まれるようにします。それをコミットします。
  4. トランクをチェックして、svn merge ^/branches/net .
  5. の出力を注意深くsvn diff確認し、トランクのチェックアウトを編集して、統合されたコードベースにします。

ステップ 5 の難易度は、特定のコード ベースに大きく依存します。

両方のコード ベースの派生元である古い「共通祖先」バージョンにアクセスできる場合は、代わりにステップ 1 でそのバージョンをチェックインし、「.com」バージョンをトランクにチェックインする必要があります。ステップ 4 の前。これにより、svn はステップ 5 で自動の「3 方向マージ」を実行できるようになり、多くの手作業を節約できる可能性があります。

どのような方法で行っても、ファイルを手動で編集する必要があります。meldなどの優れたインタラクティブなマージ ツールを使用すると、はるかに簡単になります。これは、svn diff上記の手順 5 のプレーンの優れた代替手段でもあります。

meld には、a) ディレクトリ ツリー全体を比較する機能と、b) 3 つのバージョンを一度に比較および編集する機能があることに注意してください。したがって、「.com」コードを含むディレクトリ、「.net」コードを含むディレクトリ、および作業ディレクトリをポイントして、3 つのバージョンすべてを並べて表示できます。

于 2010-10-23T16:20:46.667 に答える