Как эффективно работать с потоком задач?
Отказ от ответственности: я позволил открыть вопрос, но моя медленная проблема ветвления была из-за перегрузки сервера. Так что это не обычное поведение 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/...
Поэтому я пропускаю разветвление большей части файла, и оно работает нормально.