2009-08-18 3 views
8

Я один из предыдущих версий моего кода, хранящийся в репозитории Subversion, содержит конфиденциальную информацию. Как стереть его, сохраняя все остальные версии?Как удалить конфиденциальную информацию из Subversion?

EDIT: Репозиторий Код проекта Google хостинг, поэтому я не могу сбросить и восстановить репозиторий = (

+1

Я не думаю, что вы можете что-то сделать самостоятельно. Можете ли вы попросить Google уничтожить репозиторий, а затем восстановить его? –

+0

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

ответ

7

Want вы хотите это СВН Функция обычно называют «стирают», который, к сожалению, до сих пор не . реализуется

в качестве временного решения, вам придется сбросить, фильтр & реимпорта репозитория См, например, записи в Справке SVN How do I completely remove a file from the repository's history?

BTW:.. Это боян :-). https://stackoverflow.com/questions/663584/subversion-permanently-remove-incorrectly-checked-in-directory-project

EDIT:

Репозиторий хостинг Код проекта Google, так что я не могу сбросить и восстановить репозиторий = (

Насколько я могу видеть, единственным решением в этом случае является (попросить Google) сбросить ваш репозиторий (см. this FAQ и это blog post). Это полностью удалит все данные из репозитория (как текущие данные, так и историю) как будто вы только что запустили хранилище, используя svnadmin create.

Очевидно, что вам понадобится резервная копия вашего репозитория.

Лучшее решение, вероятно, является:

  • создать резервную копию репозитория с помощью snvsync (это также резервное копирование истории)
  • сделать дамп/фильтр/восстановление танец (см выше) на вашем резервное копирование репо, чтобы удалить проблематичный commmits
  • сбросить хранилище Google
  • положить обратно ваш отфильтрованный репо, снова используя snvsync (см FAQ How do I import my existing source code?)
7

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

Если вы хотите полностью удалить файл/путь, вы можете сделать это с svndumpfilter:

svnadmin dump /path/to/repository > svndump 
svndumpfilter exclude path/to/sensitivefile > svndump-excluded 
svnadmin create /tmp/newrepository 
svnadmin load /tmp/newrepository < svndump-excluded 

Затем резервный файл/путь/к/репозиторию и заменить его/TMP/newrepository после того как вы» Вы все проверили.

Если вы хотите только исключить одну ревизию, вы должны были бы сделать что-то вроде

svnadmin dump -r 0:1000 /path/to/repository > svndump1 
svnadmin dump -r 1002:HEAD --incremental /path/to/repository > svndump2 
svnadmin create /tmp/newrepository 
svnadmin load /tmp/newrepository <svndump1 
svnadmin load /tmp/newrepository <svndump2 

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

Смежные вопросы