Как быстро и безопасно синхронизироваться?

Если вы выполняете sync в perforce, это может произойти очень часто, чтобы ничего не делать, даже если это необходимо. Если вы выполните принудительную синхронизацию (sync -f), она будет точно синхронизировать все файлы с сервера вслепую, и это неприемлемо, если у вас большой проект.

Вопрос в том, как вы можете выполнить быструю синхронизацию?

Ответ 1

Ключевой частью вашего вопроса является "даже если это необходимо". Вне всякого сомнения, во всем моем (тоже) многолетнем опыте работы с Perforce пользователи, которые обычно вынуждены принудительно синхронизировать, поскольку обычная синхронизация не делает то, что они ожидают, не использует Perforce правильно.

Вы должны позволить Perforce управлять вашим жестким диском для вас - сервер знает, какие версии файлов у вас есть, и поэтому обычная синхронизация просто получает то, что ему нужно. Если это не удается, то это почти без исключения признак того, что пользователь модифицирует, удаляет, добавляет, переименовывает файлы вне Perforce (например, в проводнике).

Иногда вы можете получить смешную систему (то есть ошибку ПК), которая вызывает это, поэтому это не обязательно ошибка пользователей. Но это очень редко - отсюда мой "привычный" квалификатор выше.

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

Надеюсь, что это поможет.

Ответ 2

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

Если вы хотите принудительно синхронизировать только те файлы, которые были изменены из хранилища:

p4 diff -se ... | p4 -x - sync -f
p4 diff -sd ... | p4 -x - sync -f

Предупреждение: это будет перезаписывать любые локально измененные файлы (в текущем каталоге и подкаталогах).

Если вместо этого вы отредактировали некоторые файлы и забыли сначала открыть их для редактирования, вы можете сделать это:

p4 diff -se ... | p4 -x - edit

который откроет для редактирования любой файл, отличный от депо.

И это:

p4 diff -sd ... | p4 -x - delete

откроется для удаления любого файла, который был удален локально.

Ответ 3

Если вы создаете несогласованность, когда perforce теряет отслеживание того, что происходит в вашей рабочей области, вы должны использовать функцию "Reconcile offline work..." (в P4V).

Это приведет к разрыву папки и скажет вам, какие параметры вам необходимо устранить несоответствия.

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

Ответ 4

Я считаю, что команда, которую вы ищете, p4 чиста.

От: http://www.perforce.com/perforce/r14.2/manuals/cmdref/p4_clean.html

"Файлы, присутствующие в рабочей области, но отсутствующие в хранилище удаляются из рабочей области. Файлы, присутствующие на складе, но отсутствующие в вашем рабочем пространстве. Версия файлов, синхронизированных с депо, добавляется в рабочую область. Файлы, измененные в рабочей области, которые не были проверены, восстанавливаются до последней версии, синхронизированной с депо. "