Интеграция перемещенных файлов в perforce

Скажем, я создал ветвь в нашей кодовой базе. Вот спецификация отрасли:

//depot/code/main/... //depot/code/branch/...

Затем, в ветке, скажем, я перемещаю разветвленный файл a.txt → b.txt, используя

p4 integrate //depot/code/branch/a.txt //depot/code/branch/b.txt
p4 delete //depot/code/branch/a.txt

Теперь скажем, что некоторые изменения внесены в a.txt в main, который я хотел бы интегрировать в b.txt в ветке

Когда я пытаюсь интегрироваться с использованием исходной спецификации ветки, она не отражает изменения, сделанные в a.txt в main на b.txt, - есть ли способ сделать изменения, сделанные в основном, отображаемыми в переименованном файле

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

Спасибо! Сэм

Ответы

Ответ 1

Perforce 2009.1 имеет собственные переименования, что может помочь в этом - возможно, и в любом случае только для будущих переименований. См. Заметки о выпуске Perforce 2009.1, в частности:

#177023 * **
    The new 'p4 move' command allows for better support for
    renaming files.  A file must be already opened for 'edit'
    or 'add' in order to be moved.  Moved files can be synced,
    resolved and diffed against the repository just like files
    opened for 'edit'.  See 'p4 help move' for more info.

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

Ответ 2

Вы можете добавить переключатель "-3", чтобы использовать новый движок для интеграции, который будет обнаруживать целевые файлы, которые ранее были перемещены с помощью "p4 move", и автоматически "перенацеливать" себя, чтобы следовать эти операции перемещаются.

p4 integrate -3 //depot/code/main/... //depot/code/branch/...

будет интегрировать ваши изменения в //depot/code/main/a.txt в//depot/code/branch/b.txt.

Это функция "undoc" в текущем выпуске 2010.2, но будет работать по умолчанию в предстоящем 2011.1.

Ответ 3

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

Ответ 4

Вы могли бы script создать спецификацию ветки для обработки перемещенных файлов с помощью вывода p4 fstat.

В качестве отправной точки используйте следующее:

ROOT_PATH="//depot/books/..."
FIRST_CHANGE=91212

p4 fstat -Os -T headChange -F "headAction=move/* headChange>$FIRST_CHANGE" $ROOT_PATH|grep headChange | sort -u|while read DUMMY1 DUMMY2 change; do p4 describe $change; done|grep "moved from"|sed 's/\.\.\./\t/g; s/\#[0-9]*//g; s/ moved from//g;'

Здесь будут найдены все файлы в папке //depot/books/..., которые были перенесены в изменение 91212 или новее

Для нас вывод этого выглядит как

//depot/books/bar.txt//depot/books/foo.txt

Используйте его для создания спецификации ветки.

Ответ 5

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