2015-06-01 3 views
2

Наша команда стремится перенести наш сервер perforce на Git. Есть ли способ синхронизировать проверки из ветки на нашем сервере Github обратно в Perforce, чтобы синхронизировать их? Я смотрю на git-p4, и, похоже, есть много документации о том, как синхронизировать Perforce -> Git, но не наоборот. Я бы идеально хотел, чтобы он синхронизировал оба пути: < -> git, возможно ли это с p4-git?Ищет способ синхронизации Perforce <-> Git

ответ

0

Git-p4 разработан таким образом, что репозиторий git инициализируется данными, импортированными из Perforce. После этого первоначальный импорт двунаправленной связи между репозиториями git и Perforce полностью поддерживается, за исключением филиалов/объединений, которые имеют ограниченную поддержку.

Чтобы импортировать обновления из неволи мерзавца:

git p4 sync 

Чтобы отправить изменения от мерзавца до Perforce:

git p4 submit 

Для получения более подробной информации о конфигурации ГИТА-p4 обратитесь к его documentation.

Обновление: Я бы всегда советовал протестировать любые потоки во временных хранилищах перед развертыванием.

+0

ОК, так что я действительно ищу, чтобы синхронизировать ветви между внешней веткой, расположенной на сервере предприятия github, и внешней веткой на нашем сервере perforce. Мне нужно, чтобы внешние разработчики проверяли внешний репозиторий github. Я предполагаю, что git-p4 допускает только внешние внешние и локальные реплики git? – bobster

+0

Это было бы возможно, если репозиторий github все еще не был инициализирован, потому что SHA Commits не будет соответствовать другому. – Vitor

0

Perforce GitFusion может это сделать, но разработчику придется вводить изменения в сервер GitFusion вместо сервера github.

0

В прошлом я настраивал что-то вроде этого. У меня было gitolite repo и p4-сервер. Изменения, перенесенные в репозиторий gitolite, будут подхватываться заданием cron и превращаться в P4-коммиты (через git-p4 submit). Аналогично, изменения, представленные в p4, будут подхвачены одним и тем же заданием cron и синхронизированы с git (через git p4 rebase).

Были задействованы два репозитория git: репозиторий gitolite, на который были направлены обычные разработчики git, и отдельное репо на git-p4, где выполнялись операции git-p4.

У меня был довольно небольшой сценарий оболочки, чтобы координировать все. Основные хитрые области были:

  • замка: вы должны принудительно перебазироваться в gitolite репо, так что вам нужно каким-то образом, чтобы обеспечить разработчик не потерять изменения, когда это происходит (я использовал файл блокировки).

  • Объединить конфликты. Очень часто два человека редактировали один и тот же раздел файла в P4 и git одновременно.

0

Я столкнулся с этой проблемой сам, и насколько я знаю, в этом нет ничего подобного.

В моем случае я должен в принципе:

  • Создать патч для изменения в Git: git diff sha1..sha2 > mypatch.diff
  • Составьте список обнаруженных файлов: git diff --name-only sha1..sha2 > files.list
  • Применить патч в P4 репо : git apply mypatch.diff
  • Reconcile изменения в P4: for each file in files.list; p4 reconcile $file; done
  • Редактируйте список изменений P4, а затем отправить его (я уверен, что это са n быть автоматизированным, но у меня не было необходимости в нем).

У меня есть несколько сценариев, которые помогают мне с этим, вы можете найти их здесь: https://github.com/pgpbpadilla/git-p4-helpers#sharing-changes-git-p4

Я использую этот рабочий процесс для ~ 6MO и он работает в большинстве случаев.

Предостережения

  • Это создает единый список изменений для всех фиксаций в диапазоне ша (a..b).
Смежные вопросы