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

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

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

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

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

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

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

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" фактически не работают ни с какими файлами, поэтому они будут очень быстрыми, несмотря ни на что. "Заполнить" будет разветвлять все файлы 10k, но он делает это на бэк-энде, фактически не перемещая контент, поэтому он также будет очень быстрым (если вы наберете миллионы или миллиарды, это может занять значительное количество время зависит от аппаратного обеспечения сервера, но 10к - ничто). Синхронизация будет очень быстрой, если вы уже синхронизированы с //stream/parent, потому что все файлы уже есть; опять же, это просто перемещение указателей на стороне сервера, а не передача содержимого файла.

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

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

share ...

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

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

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

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