Если вам когда-либо придется «анонимизировать» git-репо не только для одного пользователя, но и для всех пользователей, Git 2.2 (ноябрь 2014 г.) предоставляет интересную функцию с улучшенной и улучшенной git fast-export
:
См. коммит a872275 и коммит 75d3d65 от Джефф Кинг (peff
) :
учить fast-export
опция --anonymize
:
Иногда пользователи хотят сообщить об ошибке, с которой они сталкиваются в своем хранилище, но они не могут поделиться содержимым хранилища.
Этобыло бы полезно, если бы они могли создать хранилище, имеющее форму, аналогичную его истории и дереву, но без утечки какой-либо информации.
Этот «анонимизированный» хранилище можно было бы затем предоставить разработчикам (при условии, что он все еще повторяет исходную проблему).
Этот патч реализует опцию "--anonymize
" для fast-export
, которая генерирует поток, который может воссоздать такое хранилище.
Создание отдельного потока позволяет вызывающей стороне проверить, что онине пропускаю никакой полезной информации.Вы можете получить общее представление о том, что будет предоставлено, запустив команду, например:
git fast-export --anonymize --all |
perl -pe 's/\d+/X/g' |
sort -u |
less
, которая покажет каждую уникальную строку, которую мы генерируем, по модулю любых чисел (каждому анонимному токену присваиваетсячисло, например «User 0
», и мы последовательно заменяем его в выходных данных).
В дополнение к анонимизации это создает сравнительно небольшие тесты (по сравнению с исходным хранилищем) и быстрыедля генерации (по сравнению с filter-branch
или изменением вывода fast-export
самостоятельно)
Doc:
Если опция --anonymize
учитывая, что git будет пытаться удалить всю идентифицирующую информацию из хранилища, сохраняя при этом достаточно исходного и древовидного паттернов, чтобы воспроизвести некоторые ошибки.
С помощью этой опции git заменит все refnames, paths,содержимое BLOB-объектов, фиксация и пометка сообщений, имен и адресов электронной почты в выходных данных анонимными данными .
Два экземпляра одной строки будут заменены наvalently (например, два коммита с одним и тем же автором будут иметь одного и того же анонимного автора в выводе, но не будут иметь сходства с исходной строкой автора).
Отношение между коммитами, ветвями и тегами + сохраняется, а такжеметки времени фиксации (но сообщения фиксации и имена ссылок не имеют никакого сходства с оригиналами).
Относительная структура дерева сохраняется (например, если у вас есть корневое дерево с 10 файлами и 3 деревьями, то и вывод будет), но их имена и содержимое файлов будут заменены.