Страницы

Поиск по вопросам

суббота, 30 ноября 2019 г.

Возможность коммита с заранее обнуленными (пустыми) переменными

#git #github


Имеется проект с исходниками (на python), которые я регулярно выкладываю на Github.
В нём присутствуют переменные (пока что одна, является токеном: TOKEN="..."), которые
я не хочу выкладывать для всеобщего доступа. Однако у себя в процессе отладки и проверки
эти переменные заполняю соответствующими значениями.

До этого я просто вручную перед коммитом удалял значение, потом, в процессе запуска
и прочего, вставлял значение снова. Но теперь меня интересует, есть ли в Git возможность
обнулять определенную переменную перед коммитом и пушем? 

Пока что я вижу 2 выхода без использования возможностей Git:


либо иметь экспортируемый конфигурационный файл, который можно не использовать в
общем репозитории; но пока что ради 1 переменной я считаю это избыточным решением;
либо просто написать однострочник с sed`ом, что не так интересно, в отличие от познавания
возможностей Git. Да и костыльно это, по-моему.

    


Ответы

Ответ 1



В папке проекта создайте подпапку для скрытых конфигов. Добавьте её в .gitignore. Если приложению не требуется читать её от другого пользователя, ограничьте права. mkdir .hidden chmod 0600 .hidden echo '.hidden' >> .gitignore Почему папку, а не просто файл: потому что однажды вы можете его случайно переименовать, закоммитить и запушить. И ваш токен будет навсегда потерян, потому что гитхаб зеркалируется в реальном времени. Вариант с хуком я считаю опасным по той же причине — вы можете переименовать переменную в конфиге или как-то изменить формат, после чего хук тихо и молча не сработает. В этой папке и храните конфиги с токенами в любом удобном вам формате. Конфиг даже для одной переменной — это нормально. Ваш ssh-ключ это, грубо говоря, тоже одна большая строка в файле.

Ответ 2



вы, конечно, можете написать локальный перехватчик pre-commit такого примерно вида: $ cat .git/hooks/pre-commit #!/bin/sh sed -i 's/parol=.*/parol=/' file здесь просто в файле file (лежащем в корне рабочей копиии) в строке, содержащей parol=, будет удалено всё после parol=, перед внесением commit-а. не забудьте присвоить бит исполнимости файлу с перехватчиком: $ chmod u+x .git/hooks/pre-commit. главный недостаток: это будет работать только в вашей локальной копии репозитория. но, вероятно, более правильным будет вынесение настроек в отдельный конфигурационный файл, который не будет включен в репозиторий (для «красоты» неплохо его упомянуть в файле .gitignore).

Комментариев нет:

Отправить комментарий