ファイル パスに「@all」を追加してみてください。たとえば、これにより、単一リビジョンのリポジトリが生成されます。
python /usr/share/doc/git-core/contrib/fast-import/git-p4 clone --destination=master-pom \
//depot/services/master-pom/trunk/...
このコマンドは完全な履歴をインポートしました:
python /usr/share/doc/git-core/contrib/fast-import/git-p4 clone --destination=master-pom \
//depot/services/master-pom/trunk/...@all
サンプルの git-p4 を使用してみましたが、いくつかの理由で断念し、独自の高速インポート ポンプを作成しました。しばらく前のことなので、いくつかの問題は現在修正されている可能性があります: しかし、git-p4 は大きな変更リスト (ブランチの最初の作成など) で問題がありました (クライアント仕様を使用したことは役に立ったかもしれませんが、私はしません)。試してみたと思います) と "+S" ファイルタイプ修飾子 (これは Bad And Evil ですが、私たちはそれを使用していました) を持つファイルです。そして、私のPython-fuは、私が抱えていた問題を修正することができませんでした.
編集:誰かがそれを求めたので、ここにあります。
https://github.com/araqnid/p4utilsにはいくつかの p4 のものがありますが、そのうちの p4-git-xfer は p4->git (一方向) レプリケーターです。ただし、実際のインフラストラクチャではなく、主に個人用の便利なツールであるため、かなりの問題があります。
入門:
p4-git-xfer clone -d $PWD/dictionary.git -n //depot/services/midoffice/dictionary/... \
trunk 'release/*' 'branch/*' \
trunk=master release/*=r* branch/*=dev/*
そのperforceパスを裸の「dictionary.git」に複製します。ベース パスの後の最初の引数は、レプリケータにベースの下のブランチの場所を伝える「ブランチ スペック」です。後のもの ('=' 記号付き) は、レプリケーターにインポートされたものからローカル ブランチを作成する方法を指示する "ミラー スペック" です。ブランチ仕様により、「refs/remotes/p4/trunk」、「refs/remotes/p4/release/1.0」などが作成されます。ミラー仕様は、「refs/heads/master」が「refs/remotes/p4/trunk」をミラーリングすること、「refs/heads/r1.0」が「refs/remotes/p4/release/1.0」をミラーリングすることなどを強制します。複製されたブランチから特定のブランチだけを選択してクローンに伝播できるようにする方法として。
ブランチがどのように作成されたかを検出しようとしますが、とにかく Perforce ではちょっとした推測です。それとは別に、ブランチの追跡をまったく試みません。ブランチ全体のマージでさえ、そのように書き出されることはありません。申し訳ありません。
最初のクローンの後、p4-git-xfer fetch
git レプリカ内から実行すると、増分更新が行われます。ハイウォーターマーク変更リストはmarks/p4
、git リポジトリ内から取得されます。これは高速インポート ロードするマーク ファイルです。したがって、filter-branch を使用して何かを書き換えるなどの派手なフットワークを行う場合は、これも更新する必要があることに注意してください。
きれいではなく、中程度から深刻な問題がいくつかあります。私は主に、日常の重要なインフラストラクチャ コンポーネントとしてではなく、Perforce の問題から自分自身を切り離すために、自分の便宜のために使用しています。それは一方通行です。私は通常、p4-am スクリプトを使用して、 によって作成されたパッチを適用しますgit format-patch
。それ自体は、一般的な解析の厄介さ、ファイルの終わりの改行の問題、バイナリの変更などで、ほとんどしか機能しません。