Иногда возникает вопрос, как лучше всего определить список изменений, с которым вы в последний раз синхронизировались в Perforce. Это часто требуется для таких вещей, как вставка номера списка изменений в информацию о ревизии системой автоматической сборки.
117
p4 changes | head -1
кажется проще, чем большинство из этих решений.Ответы:
Для систем автоматической сборки я рекомендую обратное: сначала вы должны получить последний список изменений с сервера, используя:
затем синхронизируйте с этим изменением и запишите его в информации о редакции. Причина в следующем. Хотя Perforce рекомендует следующее, чтобы определить список изменений, с которым синхронизируется рабочая область:
они отмечают несколько ошибок:
и есть еще одна ошибка, о которой они не упоминают:
Если вам необходимо сначала выполнить синхронизацию, а потом записать, Perforce рекомендует выполнить следующую команду, чтобы определить, не повлияли ли вы на указанные выше ошибки; он должен указывать, что ничего не было синхронизировано или удалено:
источник
#have
вместо@clientname
, что избавляет вас от необходимости искать имя клиентской рабочей области.Просто чтобы сам ответить на этот вопрос в соответствии с предложением Джеффа использовать Stackoverflow в качестве места для хранения технических фрагментов ...
В командной строке используйте:
И просто замените на имя вашей спецификации клиента. Это приведет к выводу формы:
Что легко проанализировать, чтобы извлечь номер списка изменений.
источник
Вы можете попробовать найти максимальное количество изменений в выводе команды «p4 files». Однако рабочий каталог не должен содержать коммитов после синхронизации. Это чуть лучше, чем
поскольку последний, похоже, работает на сервере и может дать сбой на больших исходных деревьях из-за ограничений «MaxResults».
где p4lastchange.py основан на коде из презентации Использование P4G.py из командной строки JTGoldstone, Kodak Information Network / Ofoto, 15 апреля 2005 г.
источник
Если вы используете P4V, вы можете сделать это графически:
источник
p4 changes -m1 @clientname
который является «рекомендуемым» способом сделать это для моего клиента, занимает около 10 минутвот что я использую:
для того же клиента занимает 2,1 секунды
источник
p4 changes -m1 @clientname
бегать бесконечно ...p4 cstat ...#have | grep change | awk '$3 > x { x = $3 };END { print x }'
действительно работает! Спасибо!Вы также можете использовать команду cstat:
p4 справка cstat
источник
Для серьезной сборки (той, которая готовится к тестированию) явно укажите желаемую метку или номер списка изменений , синхронизируйте с меткой и вставьте ее в артефакты сборки.
Если список изменений (или метка) не указан, используйте,
p4 counter change
чтобы получить текущий номер изменения и записать его. Но вам все равно нужно синхронизировать все, используя этот номер изменения.Я не думаю, что вы можете добиться именно того, чего хотите, потому что, как правило, все рабочее пространство не синхронизируется с конкретным номером списка изменений. Можно явно синхронизировать некоторые файлы со старыми версиями, и тогда один номер списка изменений не имеет смысла. Вот почему требуется свежий
sync
код, чтобы гарантировать, что один номер списка изменений точно представляет версию кода.Что касается комментариев: да, мой ответ предназначен для использования менеджерами конфигурации, которые готовят сборку для передачи в QA. Наши разработчики обычно не синхронизируются как часть сборки; они выполняют сборку перед отправкой, чтобы убедиться, что их изменения не нарушают сборку или тесты. В этом контексте мы не пытаемся встроить метку репозитория.
С вашим подходом вы делаете предположение, что все ваше рабочее пространство было синхронизировано с головой во время последней отправки списка изменений, и этот список изменений включал все ваши открытые файлы. Слишком легко ошибиться в этих предположениях, сложно обнаружить и ужасно дорого с точки зрения потерянного времени. С другой стороны, решить проблему легко, без недостатков. А поскольку номер списка изменений может быть указан явно, не имеет значения, какая ревизия вам нужна или как быстро меняется кодовая база.
источник
Для всего депо (а не только для вашего рабочего места / клиента)
выполняет свою работу, просто сообщая последний список изменений.
источник
Лучшее, что я нашел до сих пор, - это выполнить синхронизацию с любым списком изменений, который вы хотите создать, а затем использовать changes -m1 //...#have для получения текущего локального списка изменений (ревизии).
p4 sync @CHANGELIST_NUM p4 changes -m1 //...#have | awk '{print $ 2}'
Предоставляет вам номер списка изменений, который вы можете использовать где угодно. В настоящее время я ищу более простой способ, чем изменение p4 -m1 //...#have.
источник
Я не уверен, что вы получили нужный ответ, но у меня была аналогичная проблема. Целью было записать в наш логгер конкретную версию проекта. Проблема заключалась в том, что пока мы создаем собственный make-файл, вся система сборки контролируется нашим управлением конфигурацией. Это означает, что все решения, в которых говорится «синхронизируйте с чем-то, а затем делайте что-нибудь», на самом деле не работают, и я не хотел вручную изменять версию всякий раз, когда мы фиксируем (верный источник ошибок). Решение (на которое на самом деле намекают в некоторых из приведенных выше ответов) следующее: в нашем make-файле я делаю p4 changes -m1 "./...#have" Результатом является изменение change_number на дату пользователем @ client ' сообщ» Я просто создаю сообщение в виде строки, которая печатается регистратором (номер изменения является важным элементом, но другой также полезен, чтобы быстро решить, содержит ли определенная версия изменения, которые, как вы знаете, вы сделали самостоятельно, без необходимости принудительной проверки). Надеюсь это поможет.
источник