Почему "локальное удаление, входящее удаление при обновлении" в каталоге является конфликтом?

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

Ответ 1

Я начал копаться в этом, и я думаю, что это может произойти из-за того, что SVN не совсем уверен, является ли delete простым удалением или фактически move (a copy и a delete). В документации говорится:

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

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

Одно потенциальное исправление заключается в том, чтобы локально изменить ваше изменение и разрешить удаление дескриптора входящего обновления.

Ответ 2

Конфликт деревьев появляется, когда вы запрашиваете SVN для включения изменения (слиянием или обновлением) в целевом файле или папке, которые не могут выполнить изменение. В вашем случае вы попросили SVN включить удаление папки, которая не существует в вашей локальной копии. Почему это необходимо? Это скорее предупреждение для вас, и для меня это было полезно, когда один парень пытался переместить каталог, когда другой попытался удалить его в другой ветке. Древовидный конфликт был так же, как вы описали, и это было реально. Ребятам пришлось решить эту проблему, решив, что делать с этой папкой.