Как работает нерекурсивная фиксация Tortoise?

110

Я проверил копию ветки SVN (моя ветка) локально, с которой я слился из другой ветки (которая имеет совершенно другую структуру папок). Так что в основном происходит много удалений (старых файлов) и добавлений (новых файлов).

Когда я пытаюсь зафиксировать слияние в репозитории (в моей ветке), Черепаха говорит

Эта фиксация не является рекурсивной, и для фиксации выбраны перемещенные / переименованные папки. Такие перемещения / переименования всегда выполняются рекурсивно в репозитории. Вы все равно хотите совершить?

Можно ли продолжить эту фиксацию? Если нет, что мне делать, чтобы не было проблем?

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

user1447725
источник

Ответы:

129

Нашел в гугле, как исправить: нажмите F5 в окне фиксации (не во "всплывающем окне предупреждения")

Подробнее см. Http://tortoisesvn.tigris.org/ds/viewMessage.do?dsForumId=757&dsMessageId=2831045 .

26.08.2011 22:39 Райан Дж. Олос написал:

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

Однако в последнее время я заметил, что если я отменяю, а затем вручную обновляю список файлов (F5), я больше не вижу это сообщение при запуске фиксации во второй раз. Кажется, что фиксация прошла успешно и без дальнейших проблем.

Диалог фиксации отслеживает рабочую копию в фоновом потоке на предмет уведомлений об изменениях. Такие уведомления отправляются ОС в случае изменения / перемещения / переименования файлов / ... Если такое уведомление получено, диалоговое окно фиксации сначала выполняет несколько проверок, чтобы можно было удалить большинство из них. Если в уведомлении указано, что файл, который не проверен и не отображается в диалоговом окне фиксации, каким-то образом изменился, он переключается обратно на нерекурсивную фиксацию. Это потому, что, например, если у вас есть файл, открытый в другом редакторе, и вы сохраняете свои изменения, пока открыто диалоговое окно фиксации, этот файл также будет зафиксирован, даже если вы не проверили его в диалоговом окне фиксации (он не отображается пока вы не обновите диалоговое окно с помощью F5).

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

И как вы заметили: если вы нажмете F5, этот «нерекурсивный флаг» будет сброшен, потому что после обновления вы снова увидите все файлы - даже те, которые вы изменили после запуска диалога.

Стефан

ichaki5748
источник
1
Ссылка в ответе вроде мертвая. Вот действующий из Интернет-архива web.archive.org/web/20150306224932/http://…
buzz3791
2
Я просто попробовал нажать F5. Эффект заключается в том, что теперь список файлов диалогового окна фиксации показывает большую часть моих файлов дважды (с точно таким же путем и именем), и предупреждающее сообщение все еще появляется, когда я пытаюсь выполнить фиксацию.
OR Mapper
26

У меня была такая же проблема, но я решил ее, отменив изменения в файлах, которые я пометил как «игнорировать при фиксации».

Как только я вернул эти файлы, tortoisesvn смог зафиксировать все остальные файлы из слияния.

Кевин Брэди
источник
какова настоящая причина? почему и как эти файлы вызывают проблему?
Манной,
5

Хорошо, если я продолжу эту фиксацию?

Нет, ваша фиксация проигнорирует все изменения в WC-дереве и отразит только изменения корневого уровня (прерванное слияние).

Вы сделали ошибку при первоначальной проверке нерекурсивности. Вы можете попытаться выполнить полную фиксацию с помощью --depth infinityпараметра в интерфейсе командной строки или найти этот переключатель в графическом интерфейсе TortoiseSVN.

svn commit --depth infinity . -m "Merge"
Ленивый барсук
источник
1
«Вы сделали ошибку при первоначальной проверке нерекурсивности». Нет, не обязательно. Я проверил свой туалет так же, как и всегда, но внезапно у меня все еще возникла проблема. На самом деле, похоже, что это вообще не относится ни к одному из альтернативных решений ниже.
Keith M
Это совершенно неверно. Время от времени я получаю это сообщение, и я рекурсивно проверял свою рабочую копию так же, как и всегда
ИНФОРМАЦИЯ
1

Также для некоторых файлов, которые я добавил SVN, я внес изменения после добавления (если это влияет на характер).

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

Уродливое решение, которое безопасно работает только в том случае, если затронуты всего несколько файлов:

  1. Создайте копию измененных файлов
  2. Вернуть измененные файлы
  3. Зафиксируйте слияние / реинтеграцию
  4. Скопируйте измененные файлы обратно в исходное место

Напоминание самому себе: реинтегрируйте ветку, только если цель (ствол) чистая.

Томас Веллер
источник
1

Похоже, TortoiseSVN выполняет некоторую проверку действительности перед вызовом фиксации. Хорошо, но сообщение об ошибке очень нечеткое.

Когда я столкнулся с этой проблемой, я вернулся к использованию командной строки svn для фиксации. Ошибка фиксации из-за того, что одна из папок не обновлена. После обновления только этой папки я снова выполнил команду «svn commit», и она прошла.

Изменить: PS: Перед использованием попробуйте это, убедитесь, что у вас нет файлов, помеченных как «игнорировать при фиксации». «Игнорировать при фиксации» специфична для черепахи, и SVN-фиксация также выбирает эти изменения.

sgowd
источник
1

Просто подумал, что выложу это, потому что это сработало для меня ...

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

После того, как я удалил проект и папку (которые SVN поставил галочкой) и снова поместил в качестве нового проекта, внезапно все «Отсутствующие» превратились в «Добавленные», и фиксация прошла нормально, не предупредив меня ни о чем. .

Надеюсь это поможет!

Дэнни Лагер
источник
1

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

Это не имело ничего общего с игнорированием при фиксации, как в другом ответе, это просто казалось ошибкой в ​​TortoiseSVN.

Крис
источник
Насколько я могу судить, TortoiseSVN не перемещает файлы рекурсивно. При перемещении папки изменяется история папки, но не файлы в ней. Это означает, что для перемещения папок с помощью TortoiseSVN вам необходимо воссоздать папку в желаемом месте назначения, добавить папку, а затем переместить содержимое исходной папки в новую. Или просто используйте командную строку.
Брэдли Сингер
Я считаю, что это было результатом слияния, а не переезда. Если это не аналогичные операции, я не слежу.
Крис
0

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

Таким образом, возврат этих файлов и их повторное изменение может сработать, но вы не должны просто фиксировать изменения.

никола
источник
0

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

Бруно Миланез
источник
-4

Я не знаю варианта tortoisesvn, но вы можете использовать командную строку

svn commit --non-recursive [folder]

это должно работать так же, как и вам нравится работать, приветствия

Yellowsir
источник
Другие ответы говорят, что это не приведет к фиксации того, что вы действительно хотите зафиксировать.
Keith M