Как использовать Svn и Perforce одновременно - PullRequest
2 голосов
/ 08 июня 2009

У меня есть проект, написанный на python, и я использую svn для контроля версий. Но теперь у меня есть часть этого кода, которую я должен зафиксировать в Perforce. Поскольку исходное дерево довольно большое и содержит множество файлов, я не хочу дублировать файлы на разных компьютерах. Поэтому я хочу продолжать работать с SVN и иногда вставлять код в Perforce.

Но у меня есть некоторые проблемы, чтобы сделать это:

  • когда файл перемещается или удаляется в SVN, отправка кода в Perforce приводит к ошибке с сообщением о том, что файл отсутствует и не может быть зафиксирован. Так что ничего не совершено.

    • Можно ли при оформлении заказа или отправить команду Perforce удалить файлы с сервера, если они отсутствуют на локальном компьютере?
  • Мне не нужен весь мой код на Perforce, поэтому я отметил только некоторые каталоги, которые нужно добавить. Нет проблем там. Но чтобы получить модификации и новые файлы, нужно сделать «оформление» Perforce. И если я сделаю это в корневом каталоге моего дерева разработки, он помечает для добавления все файлы в моем дереве разработки. Поэтому я прекратил проверку всех ранее добавленных каталогов, что довольно раздражает и отнимает много времени.

    • Есть ли способ заставить Perforce заботиться только о некоторых каталогах? (Я знаю, что можно сказать, чтобы он не заботился о некоторых шаблонах. Но у меня есть много каталогов, которые не заботятся, и только несколько, чтобы заботиться о них, так что другой способ был бы лучше здесь.)

Если у кого-то есть совет, он / она станет моим героем ;-). Спасибо!

Ответы [ 3 ]

2 голосов
/ 08 июня 2009

Мой совет - не смешивать рабочие пространства двух разных инструментов контроля версий. Это все равно что играть с заряженным ружьем, направленным к вашим ногам. Это пройдет, однажды.

Прошло несколько лет с тех пор, как я последний раз использовал Perforce, но я помню, что, конечно же, никто не возился с его рабочими пространствами. Свн это тоже не нравится.

Вместо этого держите рабочие пространства отдельно. Дисковое пространство дешево. Трудно представить настолько большую кодовую базу, чтобы это было невозможно. В идеале, версия вещи только в одном хранилище. Если вам по-прежнему нужно создавать версии файлов в двух местах, настройте инструмент слияния для синхронизации изменений между рабочими пространствами. В среде Windows / Linux Beyond Compare - отличный инструмент для ручного слияния. Для автоматических слияний может потребоваться использование некоторых сценариев для извлечения исправлений из одного репозитория и применения их к другому.

0 голосов
/ 19 марта 2011

Прежде всего, вы должны сделать все возможное, чтобы убедить того, кто бы ни настраивал эту систему, в том, что смешивание различных репозиториев с исходным кодом очень плохо сказывается на производительности.

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

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

-//depot/path/to/SVNfiles/folder-I-dont-want/... //client/local/path/to/folder-I-dont-want/...`
-//depot/path/to/SVNfiles/file-I-dont-want //client/local/path/to/file-I-dont-want`

и т.д.

Как и было предложено выше, выполните следующие команды Perforce (с http://kb.perforce.com/UserTasks/WorkingDisconnected):

p4 diff -sd //myclient/... | p4 -x - delete
p4 diff -se //myclient/... | p4 -x - edit
find . -type f -print | p4 -x - add

Затем выполните p4 submit, просмотрите вручную список добавленных / удаленных / отредактированных файлов, удалите те, которых там не должно быть, и исправьте приведенный выше список, а затем, когда вы будете удовлетворены, подтвердите отправку.

Не забудьте обновить спецификацию клиента, как только будут добавлены новые файлы / папки, которые вам не нужны.

Но правильное решение - это не делать это, вы столкнетесь с проблемами, как только начнете перемещать файлы между папками, у вас будут проблемы слияния и т. Д.

Вы можете обойти конфликты слияния, поместив файлы SVN в их выделенную ветвь внутри папки Perforce, а затем интегрировать / объединить конфликты с их фактическим назначением, но это только приносит дополнительную работу для решения проблемы, которой не должно быть во-первых.

0 голосов
/ 08 июня 2009

Похоже, у вас есть весь сервер в вашей спецификации клиента, и вы проверяете ситуацию, возможно, используя P4V. Не делай этого. Измените спецификацию вашего клиента только с нужными вам каталогами в нужных вам местах. Затем используйте синхронизацию p4, чтобы держать их в курсе изменений, которые делают другие люди.

Ваше описание проблемы довольно странное. Почему вы хотите, чтобы некоторые файлы исполнялись? Файлы в перфоманс тоже в svn?

EDIT:

Я подозреваю, что http://kb.perforce.com/UserTasks/WorkingDisconnected может использоваться для синхронизации изменений из SVN в Performance.

Настройте ваше рабочее пространство Perforce / Client-Spec для сопоставления общих расположений с их местоположениями извлечения Subversion.

EDIT2:

Из вашего комментария, возможно, вам нужен хук фиксации на вашем сервере Subversion, который фиксирует изменения определенных файлов на сервере перформанса?

В каком случае на сервере Subversion может быть клиент перформанса, и перед отправкой изменения выполняются правильные вызовы редактирования / добавления / удаления p4?

...