Подтвердить что ты не робот

Удалить содержимое файла из истории SVN

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

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

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

4b9b3361

Ответ 2

Если вы выполните

svnadmin dump > mysvn

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

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

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

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

EDIT: мне пришлось сделать это, прежде чем пытаться объединить два разных репозитория вместе, поэтому потребовалось добавить новый "каталог node" плоский файл. Я не уверен, что SVN хэширует файлы или изменения, чтобы определить, было ли это изменено.

Ответ 3

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

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

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

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

Ответ 4

У меня была такая же проблема, как и на 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

Ответ 5

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