Можно ли создать патч с помощью набора списков изменений?
Проблема: 2 проекта разделяли соединительные линии и обновляли некоторые из тех же файлов. Теперь должен быть выпущен один проект, поэтому перед началом проекта был создан новый филиал с контрольно-пропускного пункта.
У меня есть список только моих списков изменений из основной линии. Используя это, я могу сгенерировать список измененных файлов и diff-выход с помощью script с помощью команды "p4 описать #".
Можно ли переформатировать этот вывод и каким-то образом применить его к новой ветке?
Ответы
Ответ 1
Ответ на заголовок: "Возможно ли создать патч с помощью набора списков изменений?"
Да.
p4 diff2 -u //path_to_your_sources/[email protected]_minus_1 //path_to_your_sources/[email protected] > /tmp/cln.patch.
Затем вы можете использовать /tmp/cln.patch в качестве входа в утилиту patch. Здесь "cln" - это номер списка внесенных изменений, для которого вы хотите создать патч для.
Ответ 2
Я только что потратил два часа на борьбу с этим. Используя cygwin patch
, мне пришлось проложить путь до тех пор, пока они не были распознаны.
В конце концов, магическое заклинание выглядело так (сломанные линии):
p4 diff2 -u //depot/foo/main/[email protected] //depot/foo/main/[email protected] |
sed '[email protected]//depot/@E:/Source/@g' |
sed '/^+++\|---/[email protected]/@\\@g' |
patch
То есть:
- Используйте
p4 diff2
, чтобы получить унифицированный diff (-u
) части хранилища между двумя версиями, которые меня волнуют. Второй список изменений - тот, который был до первого, который я хочу, иначе он не будет включен в diff.
- Используйте
sed
, чтобы изменить //depot/
на E:/Source/
, где находится мое рабочее пространство.
- Сменить косые черты на двойные обратные косые черты (это, похоже, заставляет работать).
- Произведите результаты с помощью
patch
.
Cygwin patch
достаточно умен, чтобы проверять файлы из Perforce, но я не уверен, как заставить его делать это тихо. Он запрашивает Get file 'e:\Source\foo\whatever' from Perforce with lock?
.
Это с p4
версия 2010.1, довольно недавняя установка Cygwin, работающая на PowerShell.
О, и после этого patch
выписал окончание строк в стиле Unix, поэтому я использовал u2d
, чтобы исправить их.
Ответ 3
Perforce позволит вам переименовывать списки изменений для интеграции, что может быть проще, чем пытаться создать и применить патч. Perforce будет отслеживать, какие изменения вы интегрировали, где это может облегчить будущую интеграцию.
Предположим, что у вас был один багажник:
//depot/mycode/trunk
И вы проверили все свои изменения там. В какой-то момент вы разветвлялись стволом:
//depot/mycode/rel
И у вас есть список списков изменений на соединительной линии для слияния. Из спецификации клиента, которая отображает rel, интегрируйте каждый список изменений:
p4 integrate //depot/mycode/trunk/[email protected],1234 //depot/mycode/rel/...
где 1234
- номер списка изменений. Решайте после каждой интеграции. Вы также можете создавать, тестировать и совершать свои интеграции на разных контрольно-пропускных пунктах во время вашей интеграции, если вы можете определить хорошие моменты для этого. (Perforce может обрабатывать несколько интеграций за фиксацию, но если вы допустили ошибку, вам нужно будет вернуться к последней проверенной версии и повторить промежуточную интеграцию и разрешить.)