Как эффективно работать с потоком задач?

Отказ от ответственности: я оставил вопрос открытым, но моя проблема с медленным ветвлением возникла из-за перегрузки сервера. Так что это не обычное поведение Perforce. Теперь мне требуется около 30 секунд, чтобы разветвить 10 КБ файлов.

Я новый пользователь Perforce 2014. Я создал хранилище потоков и поместил устаревшее приложение (около 10 000 файлов cpp) в ветку разработки. Это было относительно быстро для первоначального импорта, около 1 часа, чтобы загрузить все.

Теперь я хочу создать «облегченный» поток задач для работы над новой функцией. Я использую меню по умолчанию> новый поток> введите задачу ... Я выбираю «Отправить файл от родителя при создании потока»

К моему удивлению, для создания новой задачи требуется много времени (около 1 часа), потому что она разветвляется индивидуально для каждого файла. Я ожидаю, что процесс будет почти мгновенным из других инструментов SCM. (git, SVN,...)

Теперь мой вопрос:

  • это ожидаемое поведение?
  • В качестве альтернативы, есть ли способ быстрее создать задачу и разветвить только файл, который я собираюсь изменить?

person Xavier T.    schedule 21.09.2015    source источник


Ответы (2)


Создание нового потока задач из 10 КБ файлов ДОЛЖНО быть очень быстрой операцией (порядка секунды или двух?), поскольку фактическое содержимое файла не передается, если вы начинаете с синхронизированной рабочей области. Если вы создаете совершенно новую рабочую область для нового потока, то частью создания новой рабочей области будет синхронизация файлов; Я ожидаю, что это займет примерно столько же времени, сколько и отправка, поскольку передается тот же объем данных.

Убедитесь, что при создании нового потока вы не создаете новую рабочую область. В визуальном клиенте есть возможность "создать рабочее пространство"; обязательно снимите этот флажок, иначе будет создана новая рабочая область, а затем синхронизирована, что займет час.

Из командной строки, начиная с рабочей области //stream/parent, вот что вы должны сделать, чтобы создать новый поток задач:

p4 stream -t task -P //stream/parent //stream/mynewtask01
p4 populate -r -S //stream/mynewtask01
p4 client -s -S //stream/mynewtask01
p4 sync

Команды «stream» и «client» на самом деле не работают с какими-либо файлами, поэтому они будут очень быстрыми, несмотря ни на что. «Заполнение» разветвит все 10 000 файлов, но сделает это на серверной части без фактического перемещения какого-либо содержимого, так что это также будет очень быстро (если вы добрались до миллионов или миллиардов, это может занять заметное количество времени). время зависит от аппаратного обеспечения сервера, но 10k это ничто). «Синхронизация» будет очень быстрой, если вы уже были синхронизированы с //stream/parent, потому что все файлы уже там; опять же, это просто перемещение указателей на стороне сервера, а не передача содержимого файла.

person Samwise    schedule 21.09.2015
comment
Это определенно проблема с командой заполнения, а не с синхронизацией. Обычно синхронизация составляет 1 или 2 минуты. Я нашел обходной путь на данный момент, я буду продолжать исследовать дальше. Спасибо, что позволили мне сейчас, это не обычное поведение. - person Xavier T.; 22.09.2015
comment
Первое, что я бы исследовал, это триггеры предварительной отправки, если таковые имеются — заполнение должно быть очень быстрым, но оно запускает триггеры, и если у вас есть, скажем, средство проверки кода, которое срабатывает как триггер, то, вероятно, извлечение всех файлов для запуска тестов, прежде чем он позволит продолжить заполнение. Другими вещами, которые следует проверить, могут быть необычные параметры типа файла, такие как +S (что приводит к физическому копированию) или +k (что приводит к пересчету дайджеста). - person Samwise; 22.09.2015
comment
Теперь я понял, что синхронизация выполнялась локально с пограничным сервером, а ветвление/заполнение — на главном сервере. Возможно, главный сервер был перегружен, что объясняет, почему ветвление было медленным, а другая синхронизация была довольно быстрой. - person Xavier T.; 08.10.2015
comment
Я работал с сервером немного дольше, это определенно была временная проблема на стороне сервера. Теперь для разветвления 10K файлов требуется около 1 минуты. Спасибо за вашу помощь. - person Xavier T.; 16.10.2015
comment
@Samwise, ваш подход работает и очень быстр. Теперь сравните с p4 switch. Какую команду рекомендуется использовать? p4 switch действительно медленный. - person haxpor; 12.11.2020
comment
p4 switch теперь является рекомендуемой командой; Я не думаю, что он еще существовал, когда я опубликовал этот ответ. По сути, это просто ярлык для вышеуказанных операций плюс несколько других вещей. - person Samwise; 12.11.2020

Я нашел обходной путь, который немного ускоряет работу и на самом деле ближе к тому, что я собираюсь сделать:

Потоки задач создаются по умолчанию со следующим «представлением потока»

share ...

я заменил его на

import ...
share /directory/I/actually/want/to/modify/...

Поэтому я пропускаю ветвление большей части файла, и он работает нормально.

person Xavier T.    schedule 22.09.2015