10

私の p4 リポジトリの構造は次のようになります。

//depot/project/branch1
//depot/project/branch2
//depot/project/branch3
... etc

ただし、git-p4「プロジェクト」のクローンを使用すると、3 つのブランチすべてがブランチとは見なされず、すべてが単一のマスター ブランチにクローンされます。

これは私が呼び出す方法ですgit-p4

git-p4 clone --detect-branches //depot/project

git-p43 つのブランチを持つ" " の git データベースを作成することを期待していましprojectた。プロジェクトのルートは、ブランチ名の後のパスの部分にマップされます (たとえば、" " ( )//depot/project/branch1というサブディレクトリがある場合、私のローカルファイル システムは3 つの git ブランチのようなものにする必要があります)。lib//depot/project/branch1/lib/git_project/lib

私が期待していることは間違っていますか?私はgit-p4間違って呼び出していますか?

4

2 に答える 2

1

git-p4 コード(元々はこちら) を見ると、次のように表示されます。

if self.detectBranches:
  branches = self.splitFilesIntoBranches(description)
  for branch in branches.keys():
    ## HACK  --hwn
    branchPrefix = self.depotPaths[0] + branch + "/"

splitFilesIntoBranchesブランチの p4 リポジトリを探索します。

だから多分git-p4 clone //depot/project@all --detect-branches大丈夫でしょう(このSO answerのように@all 、およびレポパスの--detect-branches後のオプションで)?

そうは言っても、スクリプトがそれを管理するほどスマートでない場合、より簡単な解決策は、ブランチごとに 1 回ずつ 3 回実行し、結果を 1 つの Git リポジトリにインポートすることです。

于 2010-04-29T17:10:49.487 に答える
0

で関連するバグに取り組んだばかり--detect-branchesです。スクリプトはいくつかのことを行います。

  1. p4データを使用してブランチ名を検出する
  2. 各ブランチの親のマップを作成します
  3. ファイルを特定のブランチにマップします
  4. gitにコミットする前にブランチプレフィックスを削除してください

各ステップが正しく実行されていることを確認するには、コードに従う必要があります。これを行うために使用pdbすると、十分に機能します。

ステップ1と2はで行われますP4Sync.getBranchMapping

ステップ3はで行われますP4Sync.splitFilesIntoBranches

ステップ4の場合、これは。で実行されP4Sync.stripRepoPathます。そこにブレークポイントを設定すると、ブランチが検出され、ファイルの名前が適切に変更されているかどうかを確認できます。

于 2012-08-18T04:43:46.420 に答える