Получение всей истории файлов с помощью git-p4 - PullRequest
14 голосов
/ 24 апреля 2009

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

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

Ответы [ 4 ]

19 голосов
/ 29 апреля 2009

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

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

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 /глав / мастер» отражать «refs / remotes / p4 / trunk», «refs / head / r1.0» отражать «refs / remotes / p4 / release / 1.0» и т.д. как способ позволить мне выбирать только определенные ветви из тех, которые были реплицированы для распространения в клонах.

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

После первоначального клона запуск p4-git-xfer fetch из реплики git будет выполнять постепенное обновление. Список изменений верхнего уровня взят из marks/p4 в репозитории git. Это файл меток, который загружает при быстром импорте, поэтому, если вы делаете какую-то сложную работу, такую ​​как использование filter-branch для перезаписи, будьте осторожны, возможно, вам придется обновить это тоже.

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

0 голосов
/ 31 марта 2016
  1. установить git bash (cli)
  2. установка p4 cli
  3. установить Python 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 clone depo / path / @ all repo / path

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

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

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

man git-p4

В Ubuntu 12.04 он входит в пакет git-man.

0 голосов
/ 29 апреля 2009

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

...