2013-12-05 2 views
1

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

http://cogniton-mind.tumblr.com/post/63560840467/howto-gitignore-for-different-branches-update

У меня есть файл конфигурации/config.php GIT гт, а затем добавили ее в моем .gitignore добавить и фиксации и нажать на продукцию отрасли. Я положил копию файла обратно в исходное место и на мой статус git. Я вижу, как и ожидалось, что ничего не нужно совершать. Я проверяю свою ветку разработки и вношу некоторые изменения в этот файл. Добавьте, зафиксируйте и нажмите, чтобы развиваться. Я заказываю производство Затем я пытаюсь объединить разработку и производство, и я получаю следующее.

CONFLICT (modify/delete): config/config.php deleted in HEAD and modified in develop. Version develop of config/config.php left in tree. 

Следует ли избегать этого и иметь файл в разработке под контролем ревизии и при производстве не в контроле версий?

+0

Я думаю, что это неправильный рабочий процесс, к сожалению. Git использует одну папку проекта, в которую входит .git-папка для всей своей работы. Если вы производите файл в одной ветке, то при проверке этой ветви обязательно переписывать файл с версией. Когда вы проверяете другую ветку, где файл не должен быть версией, git не имеет возможности заменить версию с не-версией, потому что хранить ее не удалось. Все, что он знает, это то, что в другой ветке этот файл не существует, поэтому он удаляет его, когда вы туда попадете. –

+0

Положу это по-другому. Когда вы проверяете ветку, где файл имеет версию, он должен перезаписать любую существующую версию этого файла с версией, но git не захочет, потому что это разрушительно. Если вы все равно находитесь в этой ветке, и вы проверяете ту, где она не версируется, что делать? Должен ли он просто оставить файл там?Это означало бы, что, когда вы прыгаете из других ветвей назад к этому, независимо от того, какое бы состояние оно ни было в ветке, которую вы только что оставили, будет то, что осталось на вашем дереве, когда вы добрались до ветки, где ее не следует проверять. –

+0

Итак, я думаю, лучший подход состоял бы в том, чтобы иметь конфигурационный файл вне контроля версий, верно? –

ответ

0

Другим способом было бы не играть с gitignore файл и использовать content filter driversmudge скрипт выполняется автоматически на кассе) на генерировать автоматически файл правой конфигурации (который не был бы версионируются)

smudge

Что вы версия:

  • файл шаблона
  • файл dev конфигурации
  • скрипт может обнаружить, какая ветвь извлечено:
    • если это dev ветвь, она генерирует файл конфигурации из dev значений конфигурации и тому файлы шаблонов
    • если это prod ветвь, она генерирует файл конфигурации прод из значения прод конфигурации извлеченной вне мерзавца репо и файл шаблона

Таким образом, вы не рискуете ошибочно совершать какие-либо «секретные» значения (они хранятся «в другом месте»), и вы всегда получаете правильный конфигурационный файл.

+0

должен ли этот скрипт быть git-крюком? Что означает, что значение конфигурации prod должно храниться вне git repo? В другом файле, который скрипт будет вызывать для получения значений, и с некоторым sed/awk заменяет значения в файле шаблона или файле конфигурации dev? –

+0

@DimosKaragiannis скрипт smudge не объявлен в файле '.gitattributes', как в http://stackoverflow.com/a/2316728/6309. – VonC

Смежные вопросы