2016-11-09 19 views
0

tl; dr;以前の統合の履歴を含め、gitに移行されたファイルの履歴を保持したい。 すなわちgit p4 clonegit log --all --follow <file> == p4 filelog -li <file>git p4クローンファイルの履歴(統合履歴を含む)

長いバージョンその:

私は過去にreposotoryに他のプロジェクトの周りに移動し、コピーされたファイルが含まれperforceでプロジェクトを持っています。

p4 filelog -l <file2> 

は、その現在の位置でファイル(ロングフォームの-l)の履歴を示しています。 ファイルはp4 integrateで移動(コピー)されます。

p4 integrate <file1> file2> 

使用移動前履歴を確認するには、次の

p4 filelog -li <file2> 

同等gitコマンドは次のとおりです。

git log --follow <file2> 

今、私が使用してperforceプロジェクトの一部を複製する場合:

git p4 clone //depot/some/path/[email protected] . 

ファイルの完全な履歴は、同じファイルの現在のディレクトリの場所と同じようにperforceになります。

(あなたが@allGetting the whole files history with git-p4を参照することなく、今では、単一のファイルのコミットを取得)

どのように私はgit log --follow <file2> は私がp4 filelog -liで見ていた完全な履歴を与えることを得るのですか?

ファイルの履歴は、リポジトリの履歴よりもそれほど有用ではないことに注意してください。たとえば、孤独なファイルは、正しいバージョンの適切な相対位置に他のファイルがなければコンパイルされません。しかし、完全なperforceリポジトリには、gitリポジトリに含まれてはならない他の無関係なプロジェクトの履歴が含まれています。 私は、リポジトリや移植履歴を長い間痛みを伴うプロセスにすることは望ましくありません(比較的新しいgitで、今はもっと暗いコーナーを避けたい)。

git p4 cloneにオプションを追加すると、--followのようにファイルの履歴が統合されます。

これは私が常にP4を使用してリポジトリ内のファイルを移動したその質問とは異なりgit p4: migrate full history - including integration history

に非常に似ているのでPERFORCEので記録されたファイル履歴が途切れないで統合します。それは私の仕事を楽にするはずです。実際にそうするかどうかはわかりませんが。

+0

基本的に、Perforceは、gitの作業の詳細を記録します。 gitには表現する方法がないという行動があります。 Perforceサーバをオンラインにしておくだけで、新しい仕事がgitでコミットされた後でも、将来の履歴分析のために相談できるのはなぜですか? –

+0

gitはファイルへのデルタを表すことができ、ファイルの場所だけが必要です。場所がgitリポジトリに存在しないツリー内にある場合は正しいとは限りませんが、おそらくファイルが(たとえばブランチ内の)場所にあると見せかけることができます。 –

+0

いくつかのコードをgitに移動する目的は、ソースをオープンしてPERFORCEレポを閉じたソースを残すことです。したがって、外部のgitユーザーはアクセスできません。 –

答えて

1

GitはPerforceとは違って動作し、ファイルのコピーと名前の変更を追跡しないので、その情報をgit p4からインポートする方法はありません。代わりに、Gitはコミットを解析している間に自動的にファイルの名前の変更やコピーを識別することができます。明らかに、これにはより多くの処理が必要なので、デフォルトでは有効になっていません。

あなたが探しているのは、引数-M-Cおよび--find-copies-harderです。一般的に、最初の2つの引数を-M85の形式で使用する場合、数字85は、ファイルが同じであるとみなされるコードの量を表します。これにより、名前が変更され、同じコミットで変更されたファイルを検出することができます。 -Cを有効にした場合、-Mを有効にする必要はありません。

GitのP4はこれを検出し、その代わりp4 delete及び/又はp4 addp4 integrateを使用して変更を送信するために、detectCopiesdetectCopiesHarder構成パラメータを提供します。

+0

gitからperforceに、またはperforceからgitにデータを転送することについて話していますか?あなたの最後のコメント「p4 integrateを使って送信する」は、gitからperforceへと示唆していますが、私は逆に進んでいます。 –

+0

追加情報を追加するだけです。その部分はあなたの目的には関係ありません。 – Vitor