Вопрос

Допустим, я волей-неволей создал ветку в нашей кодовой базе.Вот спецификация ветки:

//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 - есть ли какой-либо способ, чтобы изменения, внесенные в main, отображались в переименованном файле?

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

Спасибо!Сэм

Это было полезно?

Решение

В 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.

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

Другие советы

Вы можете добавить переключатель "-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.

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

Вы можете создать сценарий создания спецификации ветки для обработки перемещенных файлов, используя выходные данные 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 или более поздней версии

Для нас результат этого выглядит так:

//депо/книги/bar.txt //депо/книги/foo.txt

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top