Как удалить 1 ревизию папки в Subversion - PullRequest
3 голосов
/ 11 сентября 2009

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

Пример: последняя версия Project A была зафиксирована при создании rev. 50. Работа над другими проектами продолжается, репозиторий сейчас на ред. 60.

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

На данный момент я хотел бы rev. 50 исчезнуть, так что проект А может продолжаться, как будто оборот. 50 никогда не было.

Единственный способ, которым я могу видеть, - это создать ветку и отныне работать над этой веткой. Но это просто создает много веток с течением времени, и история проекта становится беспорядочной.

Что является хорошим решением для этого сценария?

Ответы [ 5 ]

9 голосов
/ 11 сентября 2009

Короткий ответ, нет. Это действительно трудно стереть коммит из репозитория Subversion. Намеренно так.

Практически нужно вернуть этот каталог обратно в редакцию 49, а затем зафиксировать его как версию 61.

Ключевым моментом является то, что вы возвращаете ТОЛЬКО рассматриваемый каталог, а не всю проверку.

Вот соответствующая ссылка на книгу SVN: http://svnbook.red -bean.com / ru / 1.0 / svn-book.html # svn-ch-4-sect-4.2

Требуется команда вида "svn merge -r 60:50 xxx: // path"

5 голосов
/ 11 сентября 2009
  1. Выполните обновление, чтобы убедиться, что ваша рабочая копия обновлена. Убедитесь, что ваша рабочая копия чистая, без ожидающих изменений.
  2. Щелкните правой кнопкой мыши корневую папку рабочая копия вашего проекта и "показать журнал"
  3. Выбрать (с помощью Ctrl / Shift, чтобы выбрать несколько) ревизии, которые вы хотите отменить
  4. Щелкните правой кнопкой мыши выбранные ревизии и "отменить изменения из эти редакции "
  5. Проверьте модификации, которые отменить операцию на вашем рабочая копия. Разрешить любые конфликты если необходимо.
  6. Передать изменения

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

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

2 голосов
/ 11 сентября 2009

Вы возвращаетесь и получаете файл в том состоянии, в котором он находился в ревизии 50 (используя «обновление до ревизии»), затем повторно объединяете его с текущей версией , если были какие-либо последующие изменения, которые вы хотите держать . В противном случае вы можете просто выполнить обновление до ревизии, а затем повторно отправить файл.

Нет автоматического способа сделать это, но с небольшой ручной работой это выполнимо. Это магия контроля версий.

1 голос
/ 10 апреля 2012

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

Если я правильно понимаю ваш вариант использования, вы не беспокоитесь о других изменениях в проекте A, потому что их нет. Вы просто хотите, чтобы проект А вернулся к тому, что был до ревизии 50. Если это так, то существует гораздо более простое решение (и с гораздо меньшим количеством горя, чем слиянием и разрешением конфликтов):

svn del full://url/to/project/A
svn cp full://url/to/project/A@49 full://url/to/project/A

Это в основном "удаляет" текущую ГОЛОВКУ проекта А из хранилища (она все еще в истории), а затем вместо этого копирует более старую копию проекта (до проблемной фиксации).

Эта процедура настолько прозрачна, что если кто-то с проверкой A (из ревизии 50 или более поздней) сделает svn update, они будут обновлены до последней ревизии без суеты вообще. Не объединяйся, чтобы бороться с чем-либо.

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

если вы хотите изменения 51: 60

svn merge -r 50:49 A/trunk/
#the most painful experience in your life
svn commit -m "reverting to rev49"

Обратите внимание, что это часто просто не работает.

если вы хотите изменения 51:60, ручной способ

svn diff -r 50:49 A/trunk/
#review changes from the diff and apply them. or patch.
svn commit -m "reverting to rev49"
...