Каков наилучший способ отслеживать личные файлы в общедоступном хранилище Mercurial? - PullRequest
4 голосов
/ 03 мая 2011

"Если он не находится в управлении источниками, он не существует."

Этот вопрос был адресован Git здесь: Методы работы с частным и публичным хранилищем? . А как насчет Mercurial?

У меня есть несколько общедоступных репозиториев Bitbucket (с несколькими коммиттерами), где я хотел бы, чтобы источник был общедоступным, но которые загружают API, ключи SSH и другую конфиденциальную информацию из неотслеживаемых файлов. Однако это приводит к тому, что кто-то отправляет электронное письмо с сообщением о новом файле конфигурации, если мы добавим новый ключ API Mailchimp, Hunch или Twilio. Есть ли способ как-то защитить эти файлы от публичного просмотра и при этом отслеживать их? Все синхронизируют репо через Bitbucket.

Ответы [ 3 ]

3 голосов
/ 04 мая 2011

Есть два хороших способа справиться с этим (кроме решения zerkms, которое не обеспечивает простоты синхронизации, которую вы хотите, но в любом случае я бы это сделал):

  1. Использование Mercurial Queues . Когда вы создаете ртутную очередь с hg qinit --create-repo, она создает оверлейную систему, которую можно qpush редактировать поверх существующего репо. Таким образом, вы храните свои секреты в очередях и qpush их, когда они вам нужны, и qpop их, когда вы этого не делаете. С --create-repo набор оверлеев (патчей) обрабатывается в собственном репозитории. Таким образом, осведомленные люди могут выдвигать / извлекать секретное оверлейное репо, а люди, не имеющие к нему доступа, могут использовать базовое репо. Репо-патч может быть частным репозиторием в битовой корзине или в другом месте.

    или

  2. Используйте subrepo точно так же, как описано в git-решении.

2 голосов
/ 03 мая 2011

Создание filename.ext.sample файлов с шаблонами внутри (вероятно, заполненными фиктивными данными), которые необходимо скопировать и заполнить фактическими данными в определенном рабочем каталоге.

Это то, что я обычно делаю ;-)

0 голосов
/ 11 марта 2013

Решение Zerkms является быстрым, легким и чистым, и, вероятно, является лучшим выбором для предотвращения отслеживания / публикации защищенного контента; однако, как вы говорите: «Если он не находится под контролем источников, он не существует». Я обнаружил, что гораздо чаще то, что я пытаюсь избежать контроля над исходным кодом, это не проблема безопасности, а просто настройка конфигурации. Я полагаю, что эти должны быть отслежены, и у моего текущего работодателя есть довольно умные настройки для решения этой проблемы, которые я постараюсь упростить / обобщить / обобщить здесь.

REPOSITORY
  code/
    ...
  scripts/
    configparse.sh
    ...
  config/
    common.conf
    env/
      development.conf
      testing.conf
      production.conf
    users/
      dimo414.conf
      mycoworker.conf
      ...
    hosts/
      dimo414-laptop.conf
      dimo414-server.conf
      mycoworker-laptop.conf
      ...
    local.conf*
  makefile
  .conf*

* untracked file

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

Сценарий scripts/configparse.sh читает все необходимые файлы конфигурации по очереди и создает .conf из всех найденных настроек.

  • config/common.conf является отправной точкой и содержит логические значения по умолчанию для каждого параметра. Многие, вероятно, будут перезаписаны, но здесь указано что-то . Ошибка в том, что параметр найден в другом файле, который не задан в common.conf.
  • config/env/ контролирует поведение в различных средах, например, указывая на правильные серверы баз данных.
  • config/users/ ищет файл $USER.conf, полезный для установки вещей, которые меня интересуют, таких как повышение уровня ведения журнала для аспектов, над которыми работает моя команда, или настройка поведения, которое я предпочитаю использовать на всех моих машинах.
  • config/hosts делает то же самое для машин, ища $HOSTNAME.conf. Полезно для специфичных для машины настроек, таких как пути к приложениям или каталоги данных.
  • config/local.conf - это неотслеживаемый файл, позволяющий устанавливать значения и / или содержимое, относящиеся к извлечению, которые вам не нужны в управлении версиями.

Совокупность всех этих настроек выводится в .conf, что и ищет остальная часть кодовой базы при загрузке настроек.

...