Подтвердить что ты не робот

Получение всей истории файлов с помощью git -p4

Как я уже упоминал в предыдущем вопросе, я изучаю миграцию исходного элемента управления с Perforce на git.
Оглядываясь, я нашел git -p4 (вам нужно копать немного больше, поскольку это даже не в репозитории, на который указывает ссылка. git -p4 script сложнее найти).

Теперь я запускаю этот script, и он импортирует текущую версию файлов в новый репозиторий git, но мне не удается получить историю, независимо от того, что я делаю.

Здесь используется текущая командная строка:

P4CLIENT=my-p4-clientspec git-p4 clone --max-changes=1000 --use-client-spec //p4/path/to/be/imported/...

Итак, реальный вопрос: если кому-то удалось импортировать хранилище P4, включая историю, я хотел бы знать, как вы это сделали.

Спасибо!

Джос.

4b9b3361

Ответ 1

Попробуйте добавить "@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/[email protected]

Я попытался использовать пример git -p4, но отказался по нескольким причинам и написал свой собственный быстрый импортный насос. Это было некоторое время назад, поэтому некоторые из проблем, возможно, были исправлены сейчас: но git -p4 имел проблемы с большими списками изменений (такими как начальное создание ветки) (хотя использование спецификации клиента могло помочь, я не Думаю, я это пробовал) и файлы с модификатором типа "+ S" (который является "Плохим и злым", но мы использовали его). И мой Python-fu не позволил мне исправить проблемы, которые у меня были.

EDIT: так как кто-то спросил об этом, вот оно.

https://github.com/araqnid/p4utils имеет несколько вещей p4, из которых p4- git -xfer - это p4 → git (one- ) репликатор. У этого есть довольно много проблем, хотя, из-за того, что в основном это личный инструмент, а не реальная часть инфраструктуры.

Начало работы:

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 fetch из реплики git будет выполнять инкрементное обновление. Список изменений с водяными знаками берется из marks/p4 в репо git. Это файл меток, который быстро импортирует нагрузки, поэтому, если вы делаете какие-либо причудливые работы, например, используя фильтр-ветвь для перезаписи, будьте осторожны, вам, возможно, придется это обновить.

Это некрасиво и имеет некоторые средние и серьезные проблемы; Я использую его в основном для собственного удобства, чтобы изолировать себя от проблем Perforce, а не как изо дня в день критически важной составляющей инфраструктуры. Это одностороннее: я обычно использую p4-am script для применения исправлений, созданных git format-patch. Это само по себе работает только в основном с общей разборчивостью гадости, проблемами с концами конца строки, двоичными изменениями и т.д.

Ответ 2

Я также пытаюсь выяснить git -p4. К сожалению, не так много документации. Я хотел бы связаться с вами, поскольку мы, вероятно, можем помочь друг другу.

Ответ 3

  • установить git bash (cli)
  • установить p4 cli
  • установить python 2.7
  • get git -p4 script → http://git.kernel.org/cgit/git/git.git/plain/git-p4.py
  • поместите этот script в c/program/files/git/bin/
  • теперь откройте git bash или cmd check, набрав python done, p4 done, git done, git p4,
  • создать рабочее пространство клиента с именем git.
  • git p4 clone depo/path/@all repo/path

на всякий случай не работает set path в переменных среды для python, если python создает проблему set P4CLIENT = git

Ответ 4

Справка git -p4 на самом деле довольно хороша:

man git-p4

В Ubuntu 12.04 он включается в пакет git-man.