Публикация чистой копии
Почему публичный репозиторий может начинаться с одного коммита, и два скрипта, которые делают такую копию.
Почему один коммит
В истории закрытого рабочего репозитория есть то, чего не должно быть в публичном: старые адреса, личные адреса почты в коммитах, рабочие заметки. Если переписать такую историю на месте, старые коммиты всё равно остаются доступны, поэтому чистая публичная копия начинается с одного нового коммита с файлами текущего коммита и без истории.
1. Проверьте дерево
node scripts/public-tree-check.jsСкрипт читает каждый отслеживаемый файл и ищет то, чему не место в открытом доступе: личный адрес почты, ссылку на
закрытый рабочий сеанс, строку о том, кто набирал коммит, путь внутри чьей-то домашней папки, адрес внутри частной
сети, ключ, файл, которому нельзя быть в репозитории. Он ничего не меняет; при находке выходит с кодом 1 и прячет
середину каждой находки (--show показывает целиком).
Закрытые значения, которых скрипт угадать не может (адрес частного сервера, имя, название закрытого пака нод),
записываются в файл вне репозитория, по одному в строке (# начинает комментарий):
node scripts/public-tree-check.js --values /home/you/private-values.txt
# или
PUBLIC_TREE_PRIVATE_VALUES=/home/you/private-values.txt node scripts/public-tree-check.js--dir ПАПКА проверяет другую папку. tests/unit/publicTreeCheck.test.ts запускает проверку при каждом прогоне
тестов.
2. Сделайте копию
scripts/make-public-snapshot.sh ПАПКА "Ваше имя" <ваш-noreply-адрес-GitHub>ПАПКАэто пустая или новая папка (первая публикация) или уже существующий клон публичного репозитория (обновление: его файлы заменяются текущими и делается один новый коммит).- Адрес автора должен быть адресом GitHub «noreply», чтобы в публичную историю не попал личный адрес. GitHub показывает ваш в Settings ▸ Emails.
- Файлы с пометкой
export-ignoreв.gitattributesв копию не попадают (например, исследовательские заметки команды). - Скрипт работает только с чистым рабочим деревом (копия делается из последнего коммита), сначала проверяет дерево и
ещё раз проверяет копию перед её коммитом;
PUBLIC_TREE_PRIVATE_VALUESиспользуется оба раза.
Чего он никогда не делает: не отправляет (push) и не обращается к GitHub. Он готовит папку, делает один коммит и говорит, что делать дальше; вы смотрите и отправляете сами.