Восстановить удаленную папку из SVN - PullRequest
0 голосов
/ 03 апреля 2012

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

  1. есть ли возможность удалить папку из SVN без истории входа?
  2. есть ли какая-либо опция на сервере SVN для восстановления этих файлов?

Спасибо

Ответы [ 6 ]

4 голосов
/ 03 апреля 2012

Все удаления будут отображаться в журнале, если репозиторий серьезно не поврежден. Я предполагаю, что вы запрашиваете неправильный путь, возможно, выдав svn log из рабочей копии. Подкоманда принимает URL, поэтому вы можете просто:

svn log https://example.com/svn/project/

вместо

svn log 

... или:

svn log https://example.com/svn/project/trunk/

Конечно, если вы знаете путь к каталогу и знаете номер ревизии, где он еще существовал, вы можете просто:

svn log https://example.com/svn/project/trunk/foo/bar@314 --revision 314:HEAD

Обновление: Несмотря на неожиданные претензии Lazy Badger, история изменений является основной функцией Subversion и не зависит от метода доступа к хранилищу:

E:\test>svnadmin create myrepo

E:\test>svn checkout file:///E:/test/myrepo mywc
Checked out revision 0.

E:\test>svn mkdir mywc\mydirectory
A         mywc\mydirectory

E:\test>svn commit -m "Add a directory" mywc
Adding         mywc\mydirectory

Committed revision 1.

E:\test>svn delete mywc\mydirectory
D         mywc\mydirectory

E:\test>svn commit -m "Remove the directory" mywc
Deleting       mywc\mydirectory

Committed revision 2.

E:\test>svn log -r2 -v file:///E:/test/myrepo/
------------------------------------------------------------------------
r2 | ALVARO.GONZALEZ | 2012-04-03 17:00:34 +0200 (mar, 03 abr 2012) | 1 line
Changed paths:
   D /mydirectory

Remove the directory
------------------------------------------------------------------------

E:\test>

И это имеет смысл: неспособность отследить изменения сделает Subversion совершенно бесполезным в качестве инструмента контроля версий. Комментатор, вероятно, путает журнал в svn log с журналом доступа, поддерживаемым Apache, что является совершенно другой вещью и даже не может быть прочитано с помощью команд Subversion.

Любое удаление, зафиксированное в хранилище, будет отображаться в журнале редакций, независимо от того, как оно было зафиксировано, если (как я уже указывал) само хранилище не было повреждено.

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

Мои 2 цента:

  1. Нет.
  2. Просто скопируйте обратно состояние в хранилище перед удалением.Итак, посмотрите на пример ниже.Если вы выполните следующую команду, удаленная папка /trunk/src/my/proj/client должна быть восстановлена: svn copy http://my.company.com/svn/repo/trunk/src/my/proj/client@4710 http://my.company.com/svn/repo/trunk/src/my/proj/

Пример репозитория с файловой структурой:

    Repo: http://my.company.com/svn/repo/
    /trunk
      /src
         /my
           /proj
               /server
               /client (is deleted on revision 4711)
1 голос
/ 03 апреля 2012
  1. Нет, невозможно удалить папку без ее отражения в журнале SVN.Администратор с доступом к серверу SVN может, возможно, сделать SVNADMIN DUMP / SVNADMIN LOAD и использовать SVNDUMPFILTER для удаления набора изменений, но я не думаю, что это то, что вы спрашиваете ... или это возможночто случилось?

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

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

Я могу думать только об удалении из SVN, когда оно не отображается в журнале, если удаление произошло за спиной службы SVN (например, кто-то вошел на сервер и удалил файлы / каталог из командной оболочки) .

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

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

0 голосов
/ 03 апреля 2012

Вы можете проверить в журнале svn, чтобы увидеть активность других в svn repo.

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

вы можете восстановить с помощью

svn up -r <with-older-version>.

Лично я ненавижу систему CVCSЯ бы предпочел использовать DVCS.

Но в моей организации я вынужден использовать CVCS.(

0 голосов
/ 03 апреля 2012

есть ли возможность удалить папку из SVN без истории входа?

К сожалению, да - использование файла: /// для доступа к репо без какой-либо аутентификации

есть ли какая-либо опция на сервере SVN для восстановления этих файлов?

Да.Вы можете, используя любой доступный svn-tools, найти последнюю версию, там эта папка еще существует , и обновить только эту папку в локальной рабочей копии на этуревизия (в результате вы получите "разреженную рабочую копию").Зафиксируйте это состояние WC как новую ревизию, и все должны быть исправлены после нее (пока следующий инцидент больше не повторится)

Примечание: svn copy решение также жизнеспособно

...