Как заставить --detect-branch работать с git-p4? - PullRequest
9 голосов
/ 29 апреля 2010

Мой репозиторий p4 имеет структуру, похожую на:

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

Однако, когда я использую git-p4 для клонирования «проекта», все 3 ветви не рассматриваются как ветви, и все они клонируются в одну главную ветвь.

Вот как я вызываю git-p4:

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

Я ожидал, что git-p4 создаст базу данных git для "project" с тремя ветвями, и корень проекта будет сопоставлен с частью пути после имени ветви (например, если //depot/project/branch1 имеет подкаталог с именем "lib" (//depot/project/branch1/lib), тогда моя локальная файловая система должна выглядеть примерно так: /git_project/lib с 3 ветками git).

Что я ожидаю неправильно? Я неправильно вызываю git-p4? 1020 *

Ответы [ 2 ]

1 голос
/ 29 апреля 2010

Если вы посмотрите на код 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 будет в порядке (с @all, как в этом SO ответе и параметром --detect-branches после пути репо)?

При этом, если сценарий недостаточно умен, чтобы управлять этим, может оказаться более простым решением - запустить его 3 раза, по одному на ветку, и импортировать результат в одном репозитории Git.

0 голосов
/ 18 августа 2012

Я только что работал над связанной ошибкой с --detect-branches. Скрипт делает несколько вещей:

  1. определить имена ветвей, используя данные p4
  2. создать карту родителя каждой ветви
  3. сопоставить файлы с определенной веткой
  4. удалить префикс ветки перед фиксацией в git

Вы должны будете следовать коду, чтобы убедиться, что каждый шаг выполняется правильно. Использование pdb для этого достаточно хорошо работает.

Шаг 1 и 2 выполняется в P4Sync.getBranchMapping

Шаг 3 выполняется в P4Sync.splitFilesIntoBranches

Для шага 4. это делается с P4Sync.stripRepoPath. Установите точку останова, и вы увидите, были ли обнаружены ветви и правильно ли переименованы файлы.

...