Предотвращение необходимости изменений в 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
в будущем.