Как лучше хранить секреты в git-хранилище? - PullRequest
11 голосов
/ 29 ноября 2011

Задача

Считайте это дерево файлов моим хранилищем разработки.

 - foo/
   - .git/
     - [...]
   - bar/
     - backupclient.py
   - supersecretstoragecredentials.ini

Для разработки supersecretstoragecredentials.ini необходимо заполнить действительными учетными данными, хотя мне все еще нужно хранить чистую версию в хранилище, чтобы другие пользователи могли легко установить свои учетные данные.

Возможные решения

  1. .gitignore supersecretstoragecredentials.ini и создайте supersecretstoragecredentials.ini-example,
    1. поручить пользователю скопировать supersecretstoragecredentials.ini-example в supersecretstoragecredentials.ini.
  2. Добавить переопределенное расположение файла конфигурации в backup.py, который игнорируется git, например, supersecretstoragecredentials_local.ini.

Как указывало kan , эти два решения схожи, но не совсем одинаковы в рабочем процессе.

есть ли другие альтернативы? Обладает ли git какой-либо функциональностью для решения подобных проблем?

Ответы [ 5 ]

11 голосов
/ 29 ноября 2011

Проверьте файл supersecretstoragecredentials.ini с некоторыми значениями-заполнителями, а затем

git update-index --assume-unchanged supersecretstoragecredentials.ini

Git не будет отслеживать будущие изменения в этом файле.

Вы можете сбросить это с помощью

git update-index --no-assume-unchanged supersecretstoragecredentials.ini
5 голосов
/ 29 ноября 2011

То, что вы описываете в Варианте 1, в основном покрыто шагом smudge содержимого драйвера фильтра .

filter driver

У вас есть две опции, представленные в вопросе " Как работать с раскрывающейся библиотекой? ".

сценарий smudge примет ваш supersecretstoragecredentials.ini-example (версионный), скопирует его как supersecretstoragecredentials.ini ( not versioned, игнорируется Git) и заполнит его значения из другого источника.

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

3 голосов
/ 29 ноября 2011

Я использую ваше решение (ваши два решения одинаковы, отличаются только имена файлов).Есть ли у вас проблемы с этим?Какую функциональность вы ожидаете?

Кроме того, есть более интересное решение

git update-index --assume-unchanged supersecretstoragecredentials.ini

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

1 голос
/ 29 ноября 2011

По моему опыту, после того, как вы опробовали все варианты, перечисленные в вашем вопросе и в ответах, ваш вариант № 2 оказался самым простым и чистым.Он решает проблему надежно, с наименьшим количеством магии, и легче всего понять.Это скучно в лучшем виде.

0 голосов
/ 03 февраля 2016

То, что я сейчас испытываю, это git-секреты.

https://github.com/awslabs/git-secrets

Он подключается к процессу git commit и проверяет шаблоны, которые выглядят как учетные данные, которые не должнызарегистрировано.

Вы должны убедиться, что он установлен в каждой системе разработчика и настроен для каждого репозитория git.Этого можно добиться достаточно легко, если вы включите проверку в процесс сборки.

...