Добавьте игнорируемый файл конфигурации в git repo в качестве примера - PullRequest
9 голосов
/ 10 сентября 2010

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

nate:~/myAwesomeApp% git ls-files 
.gitignore
README
config.dist
glorious_support_lib.p
bestProgramEvar.f90

Это хорошо, но фактическая конфигурация игнорируется.

nate:~/myAwesomeApp% cat .gitignore 
config

Было бы мило , однако, если бы я мог просто распространить этот файл конфигурации под его реальным именем и готовым к редактированию, оставив его игнорируемым, чтобы вновь клонированная копия хранилища имела «функциональный» дистрибутив, и он не перезаписывается, не сгущается и не оскверняется иным образом, и таким образом, чтобы пользователям не приходилось беспокоиться о том, чтобы отправить или опубликовать свои суперсекретные сведения о конфигурации в сети через непреднамеренный git commit -a -m 'hurrrr derp! oopsies!' && git push

Есть ли способ сделать это? Из-за того, что git хранит одну оригинальную версию файла, которая клонируется, но после этого игнорируется ?

Я уверен, что об этом уже спрашивали, но из-за моей жизни мой гугл-фу не удался. Положи школу глубоко, ТАК.

Ответы [ 4 ]

6 голосов
/ 10 сентября 2010

Я бы, вероятно, включил какой-нибудь скрипт 'install', который скопировал бы 'config.dist' в 'config'.

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

4 голосов
/ 11 сентября 2010

Это хороший вопрос, но AFAIK для этого не существует git-решения.

Несколько обходных путей:

  • настройте ваше приложение на чтение config.dist, когда configотсутствует (например, PHPUnit использует эту технику)
  • используйте сценарий сборки, чтобы переименовать вас (например, ant или phing)
  • используйте ловушки git для переименования конфигов
3 голосов
/ 17 сентября 2010

Вы также можете создавать версии и распространять:

  • a .gitattributes файлы, объявляющие драйвер фильтра (только для config.dist)
  • сценарий smudge, который обнаружит этот контент и сгенерирует окончательный вариант (и частный, как в «не версионном» config файле)

Теперь немного изменился смысл драйвера драйвера (речь идет об изменении содержимого файла, независимо от его «состояния», то есть полного пути и имени ). Но это может сработать.
.gitattributes будет содержать:

config.dist  filter=generateConfig

alt text

И вы можете зарегистрировать свой сценарий smudge (применяется на этапе проверки при создании / обновлении рабочего каталога), например:

git config --global filter.generateConfig.smudge /path/to/generateConfig
1 голос
/ 17 сентября 2010

Как уже отмечали другие, в Git нет магического решения для этого.И, насколько я знаю, то же самое с другими системами контроля версий.

Крючки здесь также не имеют решения, если они будут работать таким образом, это будет серьезной угрозой безопасности - просто путем клонирования репозитория.злой код может исполниться на вашем компьютере.

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

  • Если изменение файла конфигурации не является обязательным для запуска приложения, то, если ваша программа делает if [ ! -e config ] ; then cp config.dist config ; fi при запуске, то этого ИМХО должно быть вполне достаточно.Кроме того, у вас должно быть предупреждение внутри config.dist, в котором говорится, что вы не должны изменять этот файл, но вместо этого сделайте его копию.

  • Если изменение файла конфигурации равно требуется, тогда запуск программы без конфигурационного файла может запустить некоторый режим установки, при котором пользователь запрашивает необходимые параметры конфигурации и сохраняет их.

  • Третья возможность заключается в том, что вашприложение не может изменить файл конфигурации при запуске (возможно, это просто некоторые файлы JavaScript + HTML).В этом случае я не вижу другого варианта, кроме как иметь какой-то отдельный скрипт сборки или позволить пользователю просто сделать это вручную.

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