16

以前の質問で述べたように、ソース管理を 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 デポをインポートできた人がいる場合、どのようにそれを行ったかを知りたいです。

4

3 に答える 3

20

ファイル パスに「@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 fetchgit レプリカ内から実行すると、増分更新が行われます。ハイウォーターマーク変更リストはmarks/p4、git リポジトリ内から取得されます。これは高速インポート ロードするマーク ファイルです。したがって、filter-branch を使用して何かを書き換えるなどの派手なフットワークを行う場合は、これも更新する必要があることに注意してください。

きれいではなく、中程度から深刻な問題がいくつかあります。私は主に、日常の重要なインフラストラクチャ コンポーネントとしてではなく、Perforce の問題から自分自身を切り離すために、自分の便宜のために使用しています。それは一方通行です。私は通常、p4-am スクリプトを使用して、 によって作成されたパッチを適用しますgit format-patch。それ自体は、一般的な解析の厄介さ、ファイルの終わりの改行の問題、バイナリの変更などで、ほとんどしか機能しません。

于 2009-04-29T13:08:48.830 に答える
0
  1. git bash (cli) をインストールします
  2. p4cliをインストール
  3. Python 2.7 をインストールします。
  4. git-p4 スクリプトを取得>> http://git.kernel.org/cgit/git/git.git/plain/git-p4.py
  5. このスクリプトを c/program/files/git/bin/ に入れます
  6. python done、p4 done、git done、git p4、と入力して git bash または cmd check を開きます。
  7. git という名前のクライアント ワークスペースを作成します。
  8. git p4 clone depo/path/@all repo/path

Python が問題を作成する場合は、Python の環境変数にパスを設定します set P4CLIENT=git

于 2016-03-31T19:39:22.383 に答える
-3

git-p4 ヘルプは、実際には非常に優れています。

man git-p4

Ubuntu 12.04 では、git-manパッケージに含まれています。

于 2012-08-08T03:37:57.343 に答える