Могу ли я интегрировать извлеченные файлы в другую ветку при выполнении

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

6 ответов

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

Начиная с выпуска 2013.1, путь к ветвящейся работе заключается в shelve работа и unshelve это на ветке. В деталях:

  1. Отложите ваши выдающиеся изменения:

    $ p4 shelve ...
    Change 182535 created with 10 open file(s).
    Shelving files for change 182535.
    edit //info.ravenbrook.com/project/mps/master/code/arenavm.c#26
    # etc.
    
  2. Расстелить их на ветке (используя -b опция, которая отображает имя файла через спецификацию ветки):

    $ p4 unshelve -b mps/branch/2013-06-05/diag -s 182535
    ... //info.ravenbrook.com/project/mps/branch/2013-06-05/diag/code/arenavm.c - must resolve //info.ravenbrook.com/project/mps/master/code/arenavm.c@=182535 before submitting
    # etc.
    
  3. Разрешить любые слияния, возникающие в результате unshelve, с помощью p4 resolve -as быстро сделать "безопасные", а затем делать остальное с p4 resolve по-прежнему.

    $ p4 resolve -as
    //gdr-peewit/info.ravenbrook.com/project/mps/branch/2013-06-05/diag/code/arenavm.c - copy from //info.ravenbrook.com/project/mps/master/code/arenavm.c
    # etc.
    $ p4 resolve
    No file(s) to resolve.
    

(Пример вывода взят из реального сценария использования, который я запускал только сейчас.)

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

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

Это не лучшее решение (без автоматической проверки / добавления / удаления файлов в новой ветке), но это был самый быстрый способ, который я нашел.

Чтобы перефразировать ответ Гарета Риса выше в простых терминах,

p4 unshelve -b target_branchspec -s changelist

:)

На самом деле, нет.

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

Вот несколько сценариев, которые могут быть полезны, если задействовано большее количество файлов. Например, с помощью скрипта P4Shelf вы можете создать архив всех ваших измененных файлов, а затем автоматически открывать их в любой ветке с восстановленными изменениями.

Кроме того, посмотрите некоторые другие изящные сценарии для Perforce Джима Тиландера.

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

Сделайте резервную копию, создайте новую рабочую область в новой ветке и повторно примените ваши изменения, возможно, используя стратегию diff / merge, изложенную в ответе Herms.

Другие вопросы по тегам