Ответ 1
Проверьте FAQ Subversion: Как полностью удалить файл из истории хранилища?
У меня есть локальный репозиторий svn на моем ПК, я использовал его для хобби проекта, и он не должен был быть доступен для всех, поэтому я совершил файлы с паролями в них.
Теперь я собираюсь сделать репозиторий доступным для других людей, и я не хочу, чтобы там были данные.
Есть ли способ обхода репозитория и замены всех паролей и данных учетной записи текстом типа "xxxxxxxxxx"?
Проверьте FAQ Subversion: Как полностью удалить файл из истории хранилища?
Если вы выполните
svnadmin dump > mysvn
вы получите плоский файл всех данных всех изменений в вашем репозитории. Оттуда вы должны иметь возможность вручную редактировать файл (если ваше репо было значительным по размеру вообще, вам может понадобиться редактор строк, например, pico, nano, vi и т.д.).
Наконец, вы перезагрузите этот дамп в новый репозиторий. Это сохранит вашу историю вашего проекта.
svnadmin load /path/to/new/repo < mysvn
Эта практика будет считаться no-no в любой корпоративной среде, где вы проходите аудит, и т.д., но для хобби-проекта это может просто сделать трюк для вас.
EDIT: мне пришлось сделать это, прежде чем пытаться объединить два разных репозитория вместе, поэтому потребовалось добавить новый "каталог node" плоский файл. Я не уверен, что SVN хэширует файлы или изменения, чтобы определить, было ли это изменено.
Кажется, что было недоразумение. Я не хотел удалять файл. Я хочу удалить пароли, хранящиеся в репозитории. Я не хочу потерять файлы, никаких изменений, изменений и истории.
То, что я сделал, это то, что предложил Мэтт, сбросить репозиторий и отредактировать его.
Чтобы сделать это, я использовал шестнадцатеричный редактор (khexedit) и заменил строку пароля строкой той же длины. Таким образом, мне не нужно обновлять поля размера.
Затем мне нужно обновить поля md5 хэшем содержимого файла. Для этого я написал script, который использовал вывод "svnadmin load" для генерации ошибки и получения старого и нового md5 из этой ошибки. Затем замените старый хэш на sed, а затем повторите, пока не будет ошибок.
У меня была такая же проблема, как и на 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
сделать его eXecutable:
chmod +x /tmp/isd_gc/hooks/pre-revprop-change
Если в этом разделе вы потерпите неудачу, вы, скорее всего, увидите ошибку: изменение Revprop заблокировано с помощью pre-revprop-change hook (код выхода 255) без вывода.
теперь вы можете запустить svn sync с code.google.com
svnsync init --username [email protected] file:///tmp/your_local_repo https://yourproject.googlecode.com/svn
и начните загрузку всей истории:
svnsync sync --username [email protected] 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 node:
'/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 [email protected] https://yourproject.googlecode.com/svn
Проще всего было бы проверить содержимое репозитория, удалить всю конфиденциальную информацию, импортировать рабочий каталог в новый репозиторий и сделать доступным для публики. Очень вероятно, что тот, кто будет использовать ваш проект, будет заинтересован в его текущем состоянии, а не в истории изменений.