2010-12-13 11 views
10

多くのソースファイルを含む私のC++プロジェクトのリファクタリングを行っています。 現在のリファクタリングのステップでは、2つのファイル(たとえば、x.cppy.cpp)を大きなコード(たとえばxy.cpp)に結合して、コードを投げ捨て、いくつかのコードを追加します。バージョン管理システムで2つのファイルを結合する方法

私のバージョン管理システム(私の場合はPerforce)に結果ファイルが2つの前のファイルに基づいていることを伝えたいと思います。将来、私はxy.cppの改訂履歴を見ると、これまでに行われた変更はx.cppy.cppです。

PERFORCEは名前を変更するファイルをサポートしています。したがって、y.cppが存在しない場合は、何をすべきか正確に分かります。 Perforceはマージもサポートしているので、xy.cppという2つの異なるバージョンがあれば、1つのバージョンを作成できます。これから、私は2つの異なるファイルを結合することが可能であることを理解しています。しかし、私はPerforceや他のソース管理システムのドキュメントを検索し、有用なものは何も見つかりませんでした。

私は何をしようとしていますか?
従来の名前を使用していますか(「マージ」または「参加」のドキュメントを検索できませんでした)?

+2

+1あなたが尋ねるまで、このような有用なものがどれほど有益であるかは私には決してありませんでした。 –

答えて

1

古典的なVCS​​ではできないと思います。 1つのファイルを取り、その差分を記録:

  • デルタベース歴:
    これらのバージョン管理システムでは、2種類(スライドGetting git by Scott Chaconの50+)に来ます。この場合、ユニットがファイルであるため、その履歴を別のファイルに関連付けることはできません。

  • DAGベースの履歴:の内容をとし、そのパッチを記録します。この場合、ファイルそのものは変更することができます(自由に名前を変更/移動することができます)。これは2つの他のコンテンツの結果になる可能性があります(したがって、あなたが望むものの近くにあります)...しかし、まだ1つのファイル(DAGの異なるブランチからの内容です)。

alt text

3

あなたは根拠のないマージ(コマンドラインで-i)との統合を試みることができます。私がドキュメントを正しく理解していれば、それは2つのファイルの統合を強制します。しかし、あなたが選択した統合を解決する必要があり、その結果、あなたが想像しているファイルに近いものが得られます。

これを実行した後、Perforceの履歴では、関連性のないファイルからの統合が統合履歴に表示され、必要に応じてそのファイルに戻って追跡することができます。

+0

それをしようとしました。うまくいかなかった。それは私が "基本バージョン"としての 'x.cpp'の最初の(古代)バージョンとの3方向マージを行うべきであることを示唆しました。 – anatolyg

1

簡単な部分はこのようになります:

p4 edit x.cpp y.cpp 
p4 move x.cpp xy.cpp 
p4 move y.cpp xy.cpp 

はその後トリッキーな部分はy.cppの移動を解決し、あなたのリファクタリングを行うことになります。しかしこれは、ファイルが結合されていることをPerforceに伝えます。

関連する問題