Каков наилучший способ отката набора изменений с помощью Subversion? - PullRequest
15 голосов
/ 17 октября 2008

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

Сценарий

  • Учитывая, что ошибка была введена в ревизии # 5
  • И 3 файла были изменены в ревизии # 5
  • И изменения в 2 файлах были ответственны за ошибку
  • Когда клиент обнаруживает ошибку в выпуске ревизии № 9 (HEAD)
  • Затем 2 файла, вызывающих ошибку в редакции № 5, должны быть возвращены в редакцию № 4
  • И изменения от редакции № 6 к HEAD должны быть применены к двум файлам

Я предполагаю, что должен быть способ сравнить ревизии № 4 и № 5 двух файлов и создать исправление, отменяющее изменения в редакции № 5, которые затем можно применить к ревизии HEAD для отката дефекта. .

Ответы [ 8 ]

15 голосов
/ 17 октября 2008

Обычно обратного слияния достаточно для отката зафиксированных изменений ...

7 голосов
/ 30 октября 2008

Чтобы прочитать подробности, смотрите: svn manual - Отмена изменений

Как описано знаком, вы хотите сделать:
svn merge -r 5: 4 файл1 файл2
Это означает слияние при изменении от 4 до 5 назад, т.е. отменить изменения

Вы также можете ввести:
svn merge -c -5 file1 file2
Это означает применить изменение, которое имело место при совершении ревизии 5 в обратном направлении.

Далее вы должны вручную просмотреть изменения.

Наконец, вы должны зафиксировать изменения (вышеуказанные слияния изменили только вашу рабочую копию).

6 голосов
/ 17 октября 2008

Вот ссылка на svn книгу, объясняющую все о возвращениях и истории.

Чтобы сделать diff, вы должны сделать что-то вроде svn diff -r 4: 5 somefile.txt

2 голосов
/ 23 января 2013

Я бы пошел с ответом Этьена. Но под «Вернуть к этой ревизии» есть также опция «Вернуть изменения из этой ревизии». Этот вариант идеально соответствует потребностям Роберта Уокера, чтобы отменить изменения, внесенные в редакцию № 5. Не забудьте зафиксировать изменения.

2 голосов
/ 17 октября 2008

Я предполагаю, что вы используете TortoiseSVN в моем ответе.

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

Если вы хотите сравнить две ревизии, в tortoiseSvn это довольно просто, щелкните правой кнопкой мыши по файлу и перейдите в TortoiseSvn-> Показать журнал. Затем выберите обе ревизии, которые вы хотите сравнить, щелкните правой кнопкой мыши и затем сравните ревизии.

Если вы хотите выяснить, кто несет ответственность за ошибку, вы можете использовать пункт меню Обвинение в TortoiseSVN ... Это позволит вам узнать, кто изменил каждую строку и в какой ревизии.

Да, и если вы хотите вернуть файл обратно к предыдущей версии, вы можете сделать это в TortoiseSvn-> Показать журнал и затем выбрать ревизию, в которую хотите вернуться, щелкнуть правой кнопкой мыши и выбрать Вернуть к этой ревизии.

1 голос
/ 17 октября 2008

Я думаю, что вам нужно сначала отменить слияние между 5: 4, а затем вернуть правильный файл

  1. svn merge -r 5: 5 http://svn.example.com/repos/calc/trunk

  2. SVN вернуть правильный файл

вы, вероятно, оказались в странном состоянии в файлах 2buggy Мы надеемся, что это можно решить вручную.

1 голос
/ 17 октября 2008

проверить текущую версию, затем svn merge -r 5: 4 файл1 файл2 (это по памяти и может быть не совсем правильно)

0 голосов
/ 17 октября 2008

Если вы используете http://tortoisesvn.tigris.org/, то это довольно простой процесс. Просто щелкните правой кнопкой мыши файл и выберите «Журнал», чтобы получить список изменений между текущим моментом и выбранной реверсией Затем нужно вернуть оба файла в редакцию № 4 и зафиксировать изменения:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...