Sunday, June 10, 2012

svn: как удалить N последних ревизий из репозитория

Иногда возникает необходимость полностью выпилить 1 или более последних ревизий из svn-репозитория. Если вы админ svn-сервера, это делается очень просто:

# mv repo repo.bak
# svnadmin create repo
# svnadmin dump -r 0:9999 repo.bak | svnadmin load repo


Клиентам, которые уже скачали себе эти ревизии, необходимо заново сделать checkout.

Если же доступа непосредственно к файлам репозитория нет, единственный вариант - это откатить сделанные изменения, создав еще один коммит. Это можно сделать с помощью команды svn merge с указанием ревизий в обратном порядке, e.g.

$ svn merge --revision 303:302 ^/calc/trunk
$ svn commit -m "Undoing change committed in r303."

2 comments:

  1. АлександрJune 23, 2014 at 2:07 AM

    В вашем примере все действия производятся из под root. После того, как вы подменили файлы репозитория, все файлы будут иметь владельцем root-а.

    Чтобы клиенты репозитория могли продолжить с ним работу, необходимо поменять владельца на пользователя, из-под которого работает apache.

    Или нет?

    ReplyDelete
  2. Да, верно. Для этого достаточно сделать "chown -R http repo" (здесь http - пользователь, под которым крутится apache). Либо выполнять команды изначально под нужным пользователем, e.g.: su -s /usr/bin/bash http; ...

    ReplyDelete