Подтвердить что ты не робот

Perforce: Как я могу p4 интегрировать локальный список изменений?

Итак, вот мой сценарий:

У меня есть два проекта projectA и projectB. Филиал автоматически интегрирует projectA в projectB. Теперь у меня есть список изменений, который изменяет некоторые файлы в projectA - я еще не совершил/не отправил этот список изменений.

Я хочу, чтобы этот список изменений включался только в projectB.

Выполнение p4 интегрировать -b branchspec -c changelistNumber

показывает

"Все ревизии интегрированы".

Как я могу интегрировать незарегистрированный список изменений?

4b9b3361

Ответ 1

Решение Hack-ish:

  • Проверьте файлы в проекте B
  • Вручную скопировать файлы из проекта A в проект B (они не защищены от записи из-за шага 1)
  • Список изменений Shelve в проекте A
  • Отправить в B
  • Интегрируйте файлы из B в и разрешите
  • Удалите файлы с шага 3. При необходимости решите их.
  • Отправить в при готовности

Другой подход - создать отдельную ветку, где вы выполняете свою работу, а затем интегрировать в или B по мере необходимости.

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

Ответ 2

Perforce имеет гораздо более простой способ сделать это:

  • Поместите свой список изменений на branchA (обратите внимание на список изменений #, мы назовем его NUM для справки здесь)

  • Создайте отображение ветвей между ветвями и ветвью B (мы назовем это A_to_B)

  • Выполните следующую команду:

    p4 unshelve -s NUM -b A_to_B
    

Ответ 3

p4 diff -u your/branch/... | patch -p x -d your/otherbranch

Где x - int, вы должны попробовать от 0 до тех пор, пока он не будет работать, используйте -dry-run в патче для тестирования. (-p - это номер каталога, который нужно разбить, чтобы путь к файлу в вашем/ветке и ваши/другие символы совпадали, 2 в этом примере)

Ответ 4

Я просто столкнулся с одной и той же ситуацией, вот мое решение для нее (очень похожее на Джеффа, но в этом деле нет Submit), возможно, это когда-нибудь поможет кому-то:

  • Интегрируйте (и разрешите) связанные файлы из ProjectB в ProjectA, пока есть отредактированные, но не представленные файлы.
  • Откажитесь от связанных файлов в ProjectB.
  • Вручную скопировать связанные файлы из ProjectA в ProjectB.
  • Вернуть файлы в ProjectA.

Ответ 5

Вы можете использовать P4_Shelve, чтобы переместить изменения в новую ветку, которую вы могли бы затем интегрировать в projectB.

Ответ 6

Чтобы быстро сделать это, выполните следующие действия:

param([int]$changelistNum, [string]$destBranch)
$regex = "^\s+//[^/]+(/\S+)\s"
$sourceFiles = p4 change -o $changelistNum | select-string $regex | %{$_.matches[0]}

$sourceFiles | %{
    $sourcePath = (p4 where $_.groups[0].value.trim()).split(' ')[2];
    $destPath = (p4 where ($destBranch + $_.groups[1].value)).split(' ')[2];
    p4 edit $destPath;
    copy $sourcePath $destPath;
    p4 add $destPath;
}

(не знаю, почему отступ не работает выше - я префикс внутри блока script на 8 пробелов?)

script извлекает все файлы из описания списка изменений, и каждый пытается найти соответствующий путь в другой ветке. Он грубый - заставляет как редактировать p4 для каждого файла, так и добавить p4, а не пытаться угадать, какой из них прав. Это довольно многословно!

Чтобы скопировать список изменений 443 в ветвь myBranch:

Copy-PendingChangelistToBranch.ps1 443 "//myBranch"