Вернуть из ревизии - PullRequest
       4

Вернуть из ревизии

1 голос
/ 30 октября 2009

Я использую Черепаха SVN.

Я недавно проверил дерьмо кода (один коммит). На 3-х часовой встрече они решили отказаться от моего кода и этой функции. Мой начальник хочет, чтобы я вернул Subversion со старым кодом для этой области приложения.

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

Итак, я не совсем понимаю, что делает Revert Back to Revision. Я пошел дальше и нашел самую последнюю версию этих файлов в последних коммитах в журнале, щелкнул правой кнопкой мыши эти файлы в журнале и сделал это, чтобы вернуться к ревизии.

Теперь это полностью заменяет мою локальную копию более старой версией? Правильно ли я сделал это, если хотел вернуться только к подмножеству функций, которые я проверял в прошлый раз?

Так я теряю все изменения, когда возвращаюсь к своей локальной версии этого файла? Похоже, он сливается со старым с моим локальным, который имеет более новый код ... эм, не совсем то, что я ожидал.

(да, я прочитал страницу на ней из документации Subversion, и не очень ясно или подробно о том, что это означает за пределами технического подхода, они кратко излагают это, что находится на очень высоком уровне и пропускает основы того, что на самом деле происходит локально в вашей рабочей копии)

Итак, подведем итоги того, что я сделал:

  1. Я зарегистрировал кучу изменений в одной точке.
  2. collegue получает это обновление через svn update
  3. У нас есть встреча, босс говорит, что мы избавляемся от этой функции
  4. Эта функция составляла около 3-4 файлов из списка файлов, которые были зафиксированы в этой ревизии
  5. Я хочу поместить эти конкретные файлы в состояние, в котором они были раньше ... некоторые из них будут возвращены в редакцию x, некоторые в y и т. Д., Поскольку последние изменения в некоторых из этих файлов были сделаны с разными номерами редакций. .
  6. Итак, я начну с журнала. Я ищу первый файл. Давайте назовем это somefile1.aspx. Я обнаружил, что последний из этого файла был зарегистрирован в Revision X. Поэтому я щелкаю его правой кнопкой мыши в наборе изменений этой ревизии и выполняю команду «Вернуться к ревизии»
  7. Я заметил, что казалось, что фактически код этой ревизии сливается с моей локальной копией ?? Я думаю ... не уверен, поэтому я позирую, потому что я не понимаю этого.
  8. Я делаю то же самое для еще 3 файлов ... посмотрите, когда они в последний раз были зафиксированы, щелкните их правой кнопкой мыши в конкретной ревизии и вернитесь к ревизии на них ... при условии, что это поместит мою локальную версию в этом состоянии, и в значительной степени уничтожить даже мои изменения для этого файла локально

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

Ответы [ 3 ]

2 голосов
/ 30 октября 2009

Предполагая, что вы хотите отменить изменения, внесенные вами в ревизию 1234: просто объедините различия от 1234 до 1234-1.

В CLI это будет: svn merge -r 1234:1233 http://your-repo/ && svn ci

В TortoiseSVN, получите диалоговое окно слияния «Объединить диапазон ревизий», введите 1234 как ревизию для слияния и нажмите «Обратное слияние». Затем проверьте, не возникли ли у вас конфликты (с изменениями, внесенными другими людьми после 1234 года), и выполните проверку. Тогда в вашей редакции HEAD этот код не будет.

Я не уверен, что вы можете сделать это для определенных файлов в TortoiseSVN. Я сделал это в CLI, и вы тоже можете попробовать (инструмент CLI, TortoiseSVN, AnkhSVN, все они используют метаданные).

SVN по-прежнему будет помнить, что вы написали этот код, и для этого он и предназначен. Если нет реальных причин удалить этот код из SVN (например, юридический или шантаж или что-то еще), сохраните его.

2 голосов
/ 30 октября 2009

coffeeaddict & mdash;

revert и update являются здесь вводящими в заблуждение терминами. Вы не делаете ничего из этого. Вы выполняете «обратное слияние» изменений.

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

В TortoiseSVN способ, которым вы это делаете:

  1. Начните с обновленной рабочей копии
  2. Поднимите бревно
  3. Нажмите на ревизию, содержащую изменения, которые вы хотите откатить
  4. Щелкните правой кнопкой мыши файл, который вы хотите откатить, и выберите «Отменить изменения из этой ревизии»
  5. Повторите шаг 4 для каждого файла для отката
  6. Вы увидите, что это привело к локальным изменениям этих файлов в вашей рабочей копии. Это то, что вы хотите; это как если бы вы отменили изменения, редактируя файлы вручную. Но вы не потеряете никаких изменений от изменений, которые произошли после того, как вы откатились.
  7. Разрешение любых возникших конфликтов
  8. Commit

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

1 голос
/ 30 октября 2009

Возможно, вас заинтересует мой ответ на очень похожий вопрос:

Как удалить 1 ревизию папки в Subversion

По сути, ваш лучший план действий - это, вероятно, повторно проверить код в предыдущей редакции , а затем зафиксировать этот код в качестве последней редакции.

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

...