Удалить содержимое файла из истории SVN - PullRequest
15 голосов
/ 15 октября 2008

У меня есть локальный репозиторий svn на моем ПК, я использовал его для хобби-проекта, и он не должен был быть доступен никому, поэтому я отправлял файлы с паролями в них.

Теперь я думаю сделать хранилище доступным для других людей, и я не хочу, чтобы эти данные были там.

Есть ли способ сканировать хранилище и заменить все пароли и данные учетной записи текстом, например "xxxxxxxxxx"?

Ответы [ 5 ]

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

Если вы делаете

svnadmin dump > mysvn

вы получите простой файл со всеми данными всех ревизий в вашем хранилище. Оттуда вы сможете редактировать файл вручную (если ваше хранилище было значительного размера, вам может понадобиться редактор строк, например, pico, nano, vi и т. Д.).

Наконец, вы должны перезагрузить этот дамп в новый репозиторий. Это сохранит вашу историю вашего проекта.

svnadmin load /path/to/new/repo < mysvn

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

РЕДАКТИРОВАТЬ: мне пришлось сделать это, прежде чем пытаться объединить два разных репозитория вместе, поэтому потребовалось добавить новый «узел каталога» плоский файл. Я не уверен, что SVN хэширует файлы или изменения, чтобы определить, был ли он подделан.

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

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

То, что я сделал, - это то, что предложил Мэтт, выгрузите репозиторий и отредактируйте его.

Для этого я использовал шестнадцатеричный редактор (khexedit) и заменил строку пароля строкой той же длины. Таким образом, мне не нужно обновлять поля размера.

Далее мне нужно обновить поля md5 с помощью хэша содержимого файла. Для этого я написал скрипт, который использовал вывод "svnadmin load" для генерации ошибки и получения старого и нового md5 из этой ошибки. Затем замените старый хеш на sed, а затем повторяйте до тех пор, пока ошибок не будет.

4 голосов
/ 04 июня 2011

У меня была та же проблема, но не на code.google.com: я зарегистрировал некоторые файлы, которые не должны быть доступны через историю в googlecode, но я не хотел отбрасывать всю историю после некоторого поиска, попытки, повторения и повторения Я имел успех. Ниже приведен рецепт, который работал для моего маленького проекта (6,5 МБ, 90 ревизий). Большая часть знаний пришла из googlecode , остальные - из svn redbook

Сначала создайте локальное репо, где вы загрузите репозиторий googlecode по адресу:

svnadmin create /tmp/your_local_repo

создать файл / tmp / isd_gc / hooks / pre-revprop-change с содержимым

#!/bin/bash
exit 0

сделать его исполняемым:

chmod +x /tmp/isd_gc/hooks/pre-revprop-change

в случае неудачи в этом разделе вы, скорее всего, увидите ошибку: изменение Revprop заблокировано обработчиком pre-revprop-change (код выхода 255) без вывода.

теперь вы можете запустить синхронизацию SVN с code.google.com

svnsync init --username yourname@youremail file:///tmp/your_local_repo https://yourproject.googlecode.com/svn 

и начинайте скачивать всю историю:

svnsync sync --username  yourname@youremail file:///tmp/your_local_repo

Совершенная редакция 1.

Скопированные свойства для ревизии 1.

Передача данных файла .......................

Скопированные свойства для ревизии 87.

Теперь мы создадим дамп-файл, который будет подан в svndumpfilter для удаления ненужных файлов.

svnadmin dump . > /tmp/tst_dump_gc.dmp

используйте svndumpfilter, чтобы удалить из него первый нежелательный файл.

svndumpfilter exclude /trunk/unwanted file_1.jsvg < /tmp/tst_dump_gc.dmp > /tmp/tst_dump_clean1.dmp

Отброшен 1 узел:

'/ trunk / unwanted file_new.jsvg'

удалить второй нежелательный файл:

svndumpfilter exclude /trunk/unwanted file_2.jsvg < /tmp/tst_dump_clean1.dmp > /tmp/tst_dump_clean2.dmp

воссоздание "старого временного репо"

rm -rf /tmp/your_local_repo

svnadmin create /tmp/your_local_repo

загрузить отфильтрованный дамп в репо

[/tmp]$svnadmin load --ignore-uuid your_local_repo < /tmp/tst_dump_clean2.dmp

Убедитесь, что в клиенте svn все в порядке (проверка истории транка показывает только 25 первых результатов в моем клиенте svn).

svnsync sync --username yourname@youremail https://yourproject.googlecode.com/svn
0 голосов
/ 15 октября 2008

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

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