p4 syn c -p не работает при определенных условиях в Perforce - PullRequest
1 голос
/ 16 февраля 2020

У меня есть хранилище Perforce и я подключаюсь к серверу реплик. Поэтому я использую p4 sync с флагом -p, поскольку у реплик нет «списка» клиентских рабочих пространств. Пример:

$ p4 sync -p //depot/path/to/branch/...@12345,12345

Поскольку я хотел бы применить все изменения из этого списка изменений к моей текущей рабочей области, я добавляю выражение ...@CHANGELISTID,CHANGELISTID в конец.

Это работает для всех syn c операций и все ветви, но если в списке изменений есть файл, который удаляется, я получаю эту ошибку:

//depot/path/to/branch/foo - can't sync -p a file that's synced

Но я хочу удалить ее. Почему это не работает?

Из документации о p4 sync:

-p

Заполните рабочее пространство клиента, но выполните не обновлять список. Любой файл, который уже синхронизирован или открыт, обходит предупреждающее сообщение.

Этот параметр обычно используется для рабочих пространств, используемых в процессах (например, в определенных средах сборки или публикации), где нет необходимости отслеживать состояние рабочая область после первой синхронизации.

Я понимаю, что файл уже синхронизирован, но в данном списке изменений его состояние фактически переключено на "удалено". Для справки вот вывод p4 describe:

$ p4 describe -s 12345
Change 12345 by daniel@my_workspace on 2020/02/15 23:09:38

    delete test

Affected files ...

... //depot/path/to/branch/foo#2 delete

1 Ответ

2 голосов
/ 16 февраля 2020

Если вы используете p4 sync -p, вам нужно использовать его последовательно - состояние не отслеживается sync -p, и поэтому, если вы попытаетесь sync -p рабочее пространство с существующим состоянием syn c, это, вероятно, означает что вы находитесь в плохом месте, и sync -p просто откажется что-либо делать (выдав сообщение об ошибке, которое вы видели).

Если сообщение об ошибке является точным, вы не использовали p4 sync -p последовательно (может быть, вы использовали это рабочее пространство с основным сервером?). Вот как это сказать:

p4 have

Если вы когда-либо использовали p4 sync -p, это ничего не даст. Если он возвращает список синхронизированных файлов, это означает, что по крайней мере часть вашего рабочего пространства отслеживается, и когда sync -p видит его, он будет обеспокоен тем, что делает ваши локальные файлы несовместимыми с этим состоянием.

Чтобы отменить все рабочее состояние, вы можете сделать:

p4 revert -k //...
p4 flush #none

Если p4 have говорит, что у вас нет синхронизированных файлов, но p4 sync -p говорит, что вы это делаете, вы можете столкнуться с некоторой ошибкой, и следует связаться support@perforce.com.

...