Как отследить изменения в списке изменений Perforce, не изменяя локальные файлы (P4V 2015.2)?

Примечание: этот вопрос связан с 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

TL; DR:

Как я могу «вернуть» свой список изменений / рабочее пространство, чтобы больше не отслеживать изменения, если файл в моей локальной файловой системе не был возвращен или изменен каким-либо образом?

Я использую P4V v2015.2


4
392
1

Ответ:

Решено

Обзор

Невозможно использовать только пользовательский интерфейс 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, поэтому я пишу более подробное объяснение ниже на случай, если это кому-то принесет пользу.

Как удалить ожидающие изменения из списка изменений Perforce, не изменяя локальные файлы

  1. Щелкните правой кнопкой мыши в любом месте рабочего пространства и выберите Open Command Window Here.

    • текущий рабочий каталог фактически не используется командой, поэтому не имеет значения, в какой папке вы находитесь.
    • Нам это нужно для настройки переменных среды, поэтому запуск команды в чистом окне командной строки может не сработать, если вы их не настроили.
  2. Введите следующую команду: p4 revert -k -c default //...

    • Флаг -k означает запрет на изменение локальных файлов при возврате списка изменений.
    • Флаг -c указывает нужный список изменений. Используйте default или точный номер списка изменений, в котором вы хотите отследить файлы.
    • Последний аргумент указывает, где (относительно корня вашей рабочей области) он должен искать файлы, которые нужно очистить от списка изменений. //... означает все файлы в рабочей области. Обратите внимание, что это всегда по-прежнему ограничено файлами в списке изменений, который вы указали с помощью -c!
  3. После того, как вы запустите эту команду, она перечислит все ожидающие изменения, которые были удалены из списка изменений.

    • Клиент Perforce на самом деле не отразит это изменение, если вы не нажмете f5 или не нажмете кнопку обновления, после чего вы снова увидите, что ваш список изменений очищен.

Зачем тебе это делать?

Следует ли выполнять такое действие, остается на усмотрение читателя, и следует принять во внимание предупреждение в другой ответ.

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

Да, в идеале эти изменения должен отслеживаются, и мне, вероятно, придется изучить свой рабочий процесс, чтобы избежать этого в будущем. Тем не менее, попытка отправить список изменений в этом состоянии может вызвать ошибки, поскольку эти «ожидающие изменения» технически больше не существуют.

Чтобы избежать этого, я обнаружил, что проще всего очистить список изменений с помощью флага -k, как описано выше, удалив старые изменения, которые больше не являются репрезентативными для локальной файловой системы, а затем запустить Reconcile Offline Work... во всех соответствующих каталогах, чтобы получить просто текущее последнее состояние. в список изменений, а затем отправьте это.