Вопрос

Как я уже упоминал в предыдущий вопрос, Я рассматриваю возможность переноса нашей системы управления версиями с 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/...

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

Это было полезно?

Решение

Попробуйте добавить «@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-фу не позволял мне решать проблемы, которые у меня были.

РЕДАКТИРОВАТЬ:раз кто-то об этом просил, вот оно.

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/*

клонирует этот путь в пустой «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 для применения патчей, созданных git format-patch.Само по себе это работает только в основном, с общими неприятностями синтаксического анализа, проблемами с переводами строк в конце файла, двоичными изменениями и т. д.

Другие советы

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

  1. установить git bash (cli)
  2. установить P4 CLI
  3. установить питон 2.7
  4. получить скрипт git-p4>> http://git.kernel.org/cgit/git/git.git/plain/git-p4.py
  5. поместите этот скрипт в c/program/files/git/bin/
  6. теперь откройте git bash или cmd check, набрав python Done, P4 Done, git Done, git p4,
  7. создайте клиентское рабочее пространство с именем git.
  8. git p4 клон depo/path/@all repo/path

На случай, если не работает путь на установленном пути в переменных среды для Python, если Python создает проблемы, установите P4Client = git

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

man git-p4

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top