#stream #perforce
#поток #Волей-неволей
Вопрос:
Я использую принудительное слияние родительского потока с потоком дочерним. Дочерний поток содержит файлы, которых нет в родительском потоке (и пока не должно быть). Когда я объединяюсь, он говорит мне удалить эти файлы в дочернем потоке (предположительно, потому что они не существуют в родительском потоке).
Как я могу сказать ему, чтобы он прекратил это делать? В прошлых слияниях я просто возвращал удаления, но теперь это становится проблемой, потому что я пытаюсь скопировать резервную копию из дочернего элемента в родительский, он выдает мне предупреждение о том, что в целевом объекте произошли изменения.
Ответ №1:
Я использую принудительное слияние родительского потока с потоком дочерним. Дочерний поток содержит файлы, которых нет в родительском потоке (и пока не должно быть). Когда я объединяюсь, он говорит мне удалить эти файлы в дочернем потоке (предположительно, потому что они не существуют в родительском потоке).
Файлы не могут быть объединены из несуществующих источников. Включите опцию «показывать удаленные файлы», и я подозреваю, что вы увидите, что файлы существуют (редактируются) в родительском файле и были удалены. (Возможно, они были ошибочно добавлены и впоследствии delete
удалены вместо того, чтобы быть obliterate
d или exclude
удалены из потока?) Операция слияния хочет распространить это удаление на дочерний файл.
Как я могу сказать ему, чтобы он прекратил это делать?
Если вы хотите оставить цель неизменной во время разрешения вместо того, чтобы принимать изменения из источника, выберите опцию «оставить цель без изменений». (Это соответствует опции «принять ваши» в командной строке.) Это пометит источник (в данном случае удаленную ревизию) как «проигнорированный», и после того, как вы submit
проигнорируете ревизию (т. Е. inte&rate
ревизию с i&nored
действием разрешения), она больше никогда не появится для слияния, пока в источник не будет отправлена новая ревизия. Если вы просто вернете файл, ничего не будет записано, и поэтому исходная редакция останется невыполненной в следующий раз.
Если эти файлы просто не должны существовать в родительском потоке, спецификации потока следует обновить, чтобы отразить это — exclude
их из родительского потока или isolate
их в дочернем потоке.
Комментарии:
1. Вы правы. Похоже, что при первоначальном создании родительского потока эти файлы действительно существовали и позже были удалены. Спасибо, что уловили это. Я попытался использовать
Accept tar&et
при выполнении разрешения, и вместо того, чтобы удалять файлы, похоже, он хочет их обновить (написано «помечено для интеграции»). Когда я их различаю, он говорит «Файлы идентичны». Итак, есть ли более постоянное исправление для этого? У меня нет никакого опыта работы сobliterate
командой, но если мы удалим удаленные файлы с сервера (предполагая, что это возможно), удастся ли это обойти?2. Вы почти на месте! Просто отправьте эти интеграции, и теперь это постоянное исправление.
Ответ №2:
Это один из нескольких фундаментальных недостатков в модели данных Core Helix / Perforce source control, который во многих случаях приводил к значительной потере данных.
Похоже, что вы должны объединить или скопировать все записи «удалить файл», прежде чем можно будет безопасно добавлять файлы с таким же именем. Это означает, что во все потоки должны быть объединены / скопированы изменения удаления (или переименования), прежде чем любой поток сможет безопасно добавлять (или переименовывать) файл со старым именем.
Версия P4V 2021.3 утверждает, что добавляет некоторую защиту, однако она ограничена и не распространяется на ситуацию с операционной системой.
Кроме того, если ваш сервер Helix работает на Windows, то это не зависит от регистра (даже если регистр имени файла сохранен)