git-p4 でファイル履歴全体を取得する
質問
で述べたように、 前の質問, ソース管理を Perforce から git に移行することを検討しています。
周りを見回すと、見つけました git-p4 (リンクが指すリポジトリにもないため、もう少し詳しく調べる必要があります。実際の git-p4 スクリプト 見つけるのが難しくなります)。
現在このスクリプトを実行しており、現在のバージョンのファイルが新しい git リポジトリにインポートされますが、何をしても履歴を取得できません。
私が現在使用しているコマンドラインは次のとおりです。
P4CLIENT=my-p4-clientspec git-p4 clone --max-changes=1000 --use-client-spec //p4/path/to/be/imported/...
したがって、本当の質問は次のとおりです。P4 デポをインポートできた人がいたら、 歴史も含めて, どうやってやったのか知りたいです。
解決
ファイルパスに「@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」ファイルタイプ修飾子(とが)とファイルをしようとしたと思うが、我々は)それを使用するために使用されます。そして、私は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/*
裸「dictionary.git」へのPERFORCEのパスを複製します。ベースパスの後の最初の引数は、ベースの下の枝を見つけるためレプリケータを伝える「ブランチ仕様」です。 (「=」記号付き)以降のものは輸入ものからローカルブランチを作成する方法レプリケータを伝える「ミラー仕様」です。 「レフリー/リモコン/ P4 /トランク」、「レフリー/リモコン/ P4 /リリース/ 1.0」などの原因ブランチ仕様を作成します。ミラースペック力「レフリー/ヘッド/マスターが」ミラーリングする「レフリー/リモコン/ P4 /トランク」、「レフリー/ヘッド/ R1.0を」ミラーリングする「レフリー/リモコン/ P4 /リリース/ 1.0」などそれは意図していました方法として私がクローンに伝播取得するに複製されたものからわずか特定の枝を選択することができるようにします。
これはブランチが作成されたかを検出しようとしますが、それはPERFORCEのでとにかく推測のビットです。それとは別に、それはまったくの枝の追跡をしようとしません:。でも、全体の分岐マージのような書き出されることはありません、申し訳ありません。
最初のクローン後、Gitのレプリカの内側からp4-git-xfer fetch
を実行すると、増分更新を行います。高ウォーターマークチェンジはgitのレポ内marks/p4
から取られています。これは、マークがその高速インポート負荷をファイルであるので、あなたは物事を書き換えるためにフィルタ分岐を使用してのような任意の軽快なフットワークをすれば、あなたもこれを更新する必要があります注意してください。
これはかなりありませんし、いくつかの中規模から重大な問題があります。私は、PERFORCEの問題からではなく、日々のcriticialインフラストラクチャコンポーネントとして自分自身を隔離するために、主に自分の便宜のためにそれを使用します。それは一方通行だ:私は、一般的にgit format-patch
によって作成されたパッチを適用するP4-午前スクリプトを使用します。自身のみなどの一般的な構文解析意地の悪さ、ファイルの終端改行に問題、バイナリ変更で、ほとんど機能しています。
他のヒント
私はまたのgit-P4を把握しようとしています。そこではないくらいのドキュメント、残念ながら。私たちは、おそらくお互いを助けることができるようにあなたと連絡を取るしたいと思います。
- git bash (cli) をインストールする
- P4 CLIをインストールする
- Python2.7をインストールする
- git-p4 スクリプトを入手>> http://git.kernel.org/cgit/git/git.git/plain/git-p4.py
- このスクリプトを c/program/files/git/bin/ に置きます
- 次に、「python done」、「p4 done」、「git done」、「git p4」と入力して、git bash または cmd check を開きます。
- git という名前のクライアント ワークスペースを作成します。
- git p4 clone depo/path/@all repo/path
Pythonが問題を作成する場合、Pythonの環境変数でパスを設定しない場合に備えて、p4client = git
のgit-P4のヘルプは、実際にはかなり良いです。
man git-p4
は、Ubuntuの12.04で、それはgit-man
パッケージに含まれています。