2009-04-24 3 views
12

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

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

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

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

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

Спасибо!

joce.

ответ

19

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

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

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

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

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

+0

Является ли ваш сценарий импорта p4 общедоступным? Если да, не могли бы вы поделиться им? – joce

0

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

+0

Эй Карл. Вы можете связаться со мной в jocelynlegault с помощью gmail.com. – joce

-1

мерзавец-p4 помощь на самом деле очень хорошо:

man git-p4 

В Ubuntu 12.04 это включить в пакет git-man.

0
  1. установить Git Баш (CLI)
  2. установки p4 кли
  3. установить Python 2.7
  4. прибудете ГИТ-p4 сценарий >>http://git.kernel.org/cgit/git/git.git/plain/git-p4.py
  5. поместить этот скрипт в с/программы/файлы/мерзавца/bin/
  6. сейчас открыта git bash или cmd check, набрав python done, p4 done, git done, git p4,
  7. создать клиентское рабочее пространство с именем git.
  8. мерзавец p4 клон Депо/путь/@ все репо/путь

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

Смежные вопросы