Есть ли простой способ вернуть весь список изменений P4?

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

В настоящее время я делаю что-то подобное для каждого файла в списке изменений:

  • p4 sync//path/to/file # n (где "n" - это предыдущая версия файла)
  • cp file file # n
  • p4 sync//путь/в/файл
  • p4 edit//путь/в/файл
  • cp file # n file
  • rm file # n

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

6 ответов

Отправленные ответы содержат правильные ответы, но обратите внимание также, что в P4V есть реальная опция меню, чтобы сделать это для вас сейчас. Это в последней версии бета-версии 2008.2 и поэтому должно быть официально выпущено на следующей неделе или три.

Эта ссылка дает подробности.

Это должно быть намного проще использовать, чем предыдущие ответы, но у меня еще не было возможности попробовать его сам.

Обновить. Это теперь полностью выпущено. См. Перфорированные загрузки.


Официальный ответ Perforce находится на http://kb.perforce.com/UserTasks/ManagingFile..Changelists/RevertingSub..Changelists, но процедура не так уж удобна, чем та, которую вы предлагаете. script, предложенный @ya23, выглядит лучше.


По какой-то причине, шаг awk не работает для меня. Я запускаюсь из среды Windows с эмуляцией инструментов командной строки Unix. Однако работает следующее:

p4 describe -s [changelist_number] | grep // | sed "s/\.\.\. //" | sed "s/#.*//" | p4 -ztag -x - where | grep "... path " | sed "s/\.\.\. path //"

Ниже приведены возможные места для получения команд командной строки Unix в среде Windows:

http://sourceforge.net/projects/getgnuwin32/?source=typ_redirect http://unxutils.sourceforge.net/


Проблема начинается, когда вы хотите вернуть весь список изменений (как объемный), который вы только что отправили, и вам нужно быстро начать регенерировать файлы # n-1 быстро (потому что это производство)...

Требуется поддержка ya23 answer - ссылка Python script - это действительно очень просто использовать (и очень легко пропустить его комментарий)

Вы даете ему ревизию, которую хотите откат, и она автоматически подготавливает все (каждый файл # n-1 и слияние и все)... вы просто отправляете.


У меня такая же проблема, когда я хочу удалить весь список изменений. поэтому я использую следующий script (заметьте, что он также удаляет полку списка изменений и сам список изменений, если вы хотите только вернуться, скопируйте соответствующие строки). Кроме того, убедитесь, что sed применяется к вашей версии p4.

#!/bin/bash
set -e
if [[ $# -ne 1 ]]; then
echo "usage: $(basename $0) changelist"
 exit 1
fi
CHANGELIST=$1
#make sure changelist exist.
p4 describe -s $CHANGELIST > /dev/null # set -e will exit automatically if fails
p4 shelve -d -c $CHANGELIST 2> /dev/null || true # changelist can be shelveless
files_to_revert=$(p4 opened 2> /dev/null | grep "change $CHANGELIST" | sed "s/#.*//g")
if [[ -n "$files_to_revert" ]]; then
 p4 revert $files_to_revert
fi
p4 change -d $CHANGELIST

licensed under cc by-sa 3.0 with attribution.