Примечание: этот вопрос связан с How do you clear the default changelist without altering your worktree in Perforce
, но не является его дубликатом. Мой аргумент заключается в том, что этот вопрос, хотя и похож, конкретно в отношении клиента P4V.
Предположим, я использую принудительное отслеживание файла. Текущее состояние файла (file1
) идентично на сервере Depot
и локальном Filesystem
. В целях иллюстрации я также покажу текущее «состояние» списка изменений по умолчанию:
| Depot | Filesystem | Changelist |
|-------+------------+----------------|
| file1 | file1 | <empty> |
Если я внесу изменение в автономном режиме (file1
теперь file2
), по необходимости, я еще не узнаю об этом (я знаю, что в идеале этого не должно происходить, и что все изменения всегда должны отслеживаться, и что файл должен быть защищен от записи , но может, если по воле случая не работает, луна находится не в той четверти и т. д., поэтому в качестве аргумента предположим, что это действительно произошло):
| Depot | Filesystem | Changelist |
|-------+------------+----------------|
| file1 | file2 | <empty> |
Если я использую Reconcile Offline Work...
или добавляю файл вручную в список изменений, список изменений теперь знает об этом изменении:
| Depot | Filesystem | Changelist |
|-------+------------+----------------|
| file1 | file2 | file1 -> file2 |
Если я затем отправлю список изменений, то изменение, которое он в настоящее время отслеживает, будет применено на сервере, и список изменений снова станет пустым:
| Depot | Filesystem | Changelist |
|-------+------------+----------------|
| file2 | file2 | <empty> |
Предположим, я внес изменение и отследил его. Изменена локальная файловая система (file2
теперь file3
), и список изменений отражает это:
| Depot | Filesystem | Changelist |
|-------+------------+----------------|
| file2 | file3 | file2 -> file3 |
Предположим, что теперь я хочу вернуться к состоянию, когда рабочая область / список изменений не знает, что file2
был изменен на file3
, но без фактического изменения файла на диске:
| Depot | Filesystem | Changelist |
|-------+------------+----------------|
| file2 | file3 | <empty> |
обратите внимание, что файловая система все еще находится в состоянии file3
, а не file2
Что для этого нужно? Есть ли способ выполнить это действие без резервного копирования изменения из рабочей области и полного возврата или запуска «очистки» с последующим повторным применением изменения в автономном режиме?
Я знаю, что не хочу просто «отменить» изменение, потому что это восстанавливает не только состояние списка изменений, но и локально файл:
| Depot | Filesystem | Changelist |
|-------+------------+----------------|
| file2 | file2 | <empty> |
обратите внимание, как файловая система потеряла состояние file3
, а также была возвращена в file2
Как я могу «вернуть» свой список изменений / рабочее пространство, чтобы больше не отслеживать изменения, если файл в моей локальной файловой системе не был возвращен или изменен каким-либо образом?
Я использую P4V v2015.2
Невозможно использовать только пользовательский интерфейс P4V (по крайней мере, в версии 2015.2).
Однако это возможно через командную строку, где команда 'revert' имеет флаг -k
, который p4 help revert
объясняет как:
The -k flag marks the file as reverted in server metadata without altering files in the client workspace.
Я знаю, что это обсуждалось в аналогичном вопросе здесь: Как очистить список изменений по умолчанию без изменения рабочего дерева в Perforce, но ни в вопросе, ни в выбранном ответе не упоминается клиент P4V, поэтому я пишу более подробное объяснение ниже на случай, если это кому-то принесет пользу.
Щелкните правой кнопкой мыши в любом месте рабочего пространства и выберите Open Command Window Here
.
Введите следующую команду: p4 revert -k -c default //...
-k
означает запрет на изменение локальных файлов при возврате списка изменений.-c
указывает нужный список изменений. Используйте default
или точный номер списка изменений, в котором вы хотите отследить файлы.//...
означает все файлы в рабочей области. Обратите внимание, что это всегда по-прежнему ограничено файлами в списке изменений, который вы указали с помощью -c
!После того, как вы запустите эту команду, она перечислит все ожидающие изменения, которые были удалены из списка изменений.
Следует ли выполнять такое действие, остается на усмотрение читателя, и следует принять во внимание предупреждение в другой ответ.
Мой основной вариант использования заключался в том, что файлы, уже находящиеся в списке изменений, по какой-то причине были удалены, перемещены или переименованы без отслеживания этих действий.
Да, в идеале эти изменения должен отслеживаются, и мне, вероятно, придется изучить свой рабочий процесс, чтобы избежать этого в будущем. Тем не менее, попытка отправить список изменений в этом состоянии может вызвать ошибки, поскольку эти «ожидающие изменения» технически больше не существуют.
Чтобы избежать этого, я обнаружил, что проще всего очистить список изменений с помощью флага -k
, как описано выше, удалив старые изменения, которые больше не являются репрезентативными для локальной файловой системы, а затем запустить Reconcile Offline Work...
во всех соответствующих каталогах, чтобы получить просто текущее последнее состояние. в список изменений, а затем отправьте это.