Предотвращение необходимости изменений в git

У нас есть несколько конфигурационных файлов в проекте, над которым работают 3 человека. Тем не менее, эти файлы конфигурации содержат несколько строк, которые отличаются для каждого из нас и поэтому не должны быть изменены или перезаписаны коммитами. Тем не менее, Git не позволит нам получать изменения от других людей, пока мы не зафиксируем эти изменения в конфигурационном файле, что означает, что он снова изменит конфигурации других участников.

Будучи новичком в Git, кажется, что нам нужно либо создавать ветви и объединять их при каждом коммите, чтобы обновить наш код, либо использовать.gitignore . Как правильно справиться с этой ситуацией? Нам всем нужен постоянный доступ к изменениям, которые вносят другие участники.

5 ответов

Решение

Отслеживание примера файла конфигурации, как правило, является хорошим подходом. После этого вы можете иметь неотслеживаемую локальную копию. Вы можете использовать githooks, чтобы помочь вам применить различия. После слияния и после проверки (и, возможно, даже после фиксации) вы можете повторно скопировать отслеженное в неотслеживаемое и, возможно, применить изменения, чтобы создать собственную версию. Как именно вы делаете последний бит, зависит от вас - это сценарий. Несколько звонков sed -i может сделать это хотя.

Другая возможность, если вы можете использовать два конфигурационных файла или если у конфигурационных файлов есть какая-то директива include, один отслеживается, а другой не отслеживается.

Не проверяйте в файле конфигурации.

При необходимости у вас может быть файл config.example, который каждый из вас копирует в неотслеживаемый файл конфигурации - так большинство проектов справляются с этим.

Я обнаружил ценность использования разумных значений по умолчанию в приложении вместе с необязательным файлом конфигурации, который игнорируется системой контроля версий. Пример файла конфигурации может быть зарегистрирован, но с другим именем; обычно "config.example.yml" (или любое другое расширение, которое имеет для вас смысл).

Я уверен, что рекомендую против следующей техники, но...

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

Например, если строка в файле с именем "config-file", которую вы хотите изменить для каждого разработчика, выглядит следующим образом:

конфиг: по умолчанию

Тогда у разработчика будет это в их локальных атрибутах.git / info /:

фильтр config-file =modify-config

и что-то вроде этого в.git / config:

[фильтр "modify-config"]
    smudge = sed -e 's/^config:.*/config: значение разработчика /'
    clean = sed -e '/^config/s/.*/config: default/'

Вы также можете использовать серьезное git-fu, известное как "rebase --onto", как описано здесь.

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

Хорошая схема этого в будущей книге Скотта Чакона Pro Git.

Я думаю, что это одна из тех вещей с Git, которую лучше всего понять один раз. использование git config --global alias.lop 'rebase --onto etc. etc.' так что вы можете просто напечатать, например. git lop в будущем.

Другие вопросы по тегам