возврат файла и повторный коммит не показывают изменений

Вопрос или проблема

У меня есть файл, который в данный момент находится в редакции X. Я хотел бы вернуть его к редакции X-1 и зафиксировать как X-1. Однако, когда я просматриваю фиксацию для X-1, SVN (я использую Tortoise в данном случае) сообщает, что изменений нет. Как такое может быть? И как мне зафиксировать возвращённый файл?

Я не уверен, правильно ли я понимаю суть вашего вопроса, но, возможно, у вас есть недопонимание того, как работает SVN, а также что такое команда “отменить”.

Во-первых, команда “отменить” предназначена только для избавления от изменений, которые вы ещё не зафиксировали. Она отменяет любые изменения, которые вы видите с помощью svn статус или в TortoiseSVN с помощью “проверить модификации”. Не больше того.

Во-вторых, невозможно зафиксировать редакцию ниже текущей редакции. В SVN файлы не имеют редакций. Редакции имеют файлы. И номера редакций всегда увеличиваются, никогда не уменьшаются. Думайте о редакции в SVN как о моментальном снимке всего в репозитории. Технически, вы должны говорить “файл foo как он существовал в редакции 123”, вместо “редакция 123 файла foo”. Последнее не совсем корректно и может привести к ошибкам в некоторых случаях.

Наконец, то, что вы, КАЖЕТСЯ, хотите сделать, это удалить некоторые изменения в файле. Вы делаете это, создавая НОВУЮ редакцию файла, используя концепцию “обратного слияния”. С командной строки вы делаете слияние файла, указывая отрицательную редакцию или обратный диапазон редакций, чтобы отменить изменения в этих редакциях. Затем вы можете зафиксировать, чтобы получить новую редакцию, содержащую ваш файл с этими изменениями в обратном порядке. TortoiseSVN делает это легко: просто откройте диалог “показать журнал”, щелкните правой кнопкой мыши на редакции, которую хотите вернуть, и выберите “отменить изменения из этой редакции”. Затем вам нужно будет зафиксировать, как обычно.

В любом случае, сделайте этот шаг “обратного слияния” из рабочей копии, указывающей на HEAD. Ваша новая редакция всегда будет следовать за HEAD, поскольку так работает SVN.

.

Ответ или решение

Теория

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

Команда revert в SVN используется для отмены изменений, которые еще не были зафиксированы коммитом, и не возвращает файл к предыдущей ревизии. Это командование просто возвращает файл к состоянию последнего коммита в вашей рабочей копии.

Пример

Рассмотрим следующий сценарий: у вас есть файл в ревизии X, и вы хотите откатить его состояние к ревизии X-1, чтобы затем закоммитить эти изменения. Попробуем провести пример с помощью команды "обратного слияния" (reverse merge), что позволяет "отменить" изменения между ревизиями.

Предположим, что мы работаем с файлом file.txt. Вы хотите отменить изменения из ревизии 5. Это можно сделать следующим образом:

  1. Открытие лога в TortoiseSVN:

    • Нажмите правой кнопкой мыши на рабочей копии проекта.
    • Выберите "Show log".
  2. Выбор нужной ревизии:

    • Найдите в списке ревизию 5.
    • Щелкните правой кнопкой мыши по этой ревизии.
    • Выберите "Revert changes from this revision".

Это действие приведет к тому, что все изменения, внесенные в этой ревизии, будут отменены в вашей рабочей копии. Затем вы можете закоммитить эти изменения, создав новую ревизию, описывающую откат.

Применение

Теперь, когда у вас есть понимание, как работает процесс revert и как выполнять обратное слияние, рассмотрим детально процесс. Команда для обратного слияния на командной строке будет следующей:

svn merge -c -5 URL_репозитория@HEAD

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

svn commit -m "Cancel changes from revision 5"

Это создаст новую ревизию, в которой изменения из ревизии 5 будут отменены. Помните, что SVN не позволяет "удалять" ревизии или фактически откатываться к предыдущей ревизии. Все изменения фиксируются и сохраняются в репозитории в порядке их поступления.

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

Оцените материал
Добавить комментарий

Капча загружается...