Скажите git никогда не обновлять файл - PullRequest
5 голосов
/ 14 апреля 2011

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

Так есть ли способ заставить git игнорировать любые ИЗМЕНЕНИЯ в файле, но оставить исходный файл в репо? В настоящее время я обнаружил, что единственный способ сделать что-то подобное - это добавить файл в файл .gitignore, а git добавить файл в проект напрямую (используя -f для переопределения). Есть ли лучший способ?

Ответы [ 2 ]

4 голосов
/ 14 апреля 2011

Я бы не стал управлять этими файлами с помощью git.Я бы поместил их в ваш .gitignore, чтобы git игнорировал их, и поместил файлы шаблонов (например, foo.template для файла с именем foo или, возможно, template/foo) в git.Затем, когда вы клонируете репозиторий, вы можете скопировать их и изменить, и git не будет ничего делать с копиями, продолжая управлять шаблонами.Если у вас есть несколько таких файлов, вы можете предоставить сценарий или создать правило или что-то в этом роде, чтобы заполнить все ваши файлы конфигурации из их шаблонов, чтобы упростить настройку.

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

4 голосов
/ 14 апреля 2011

Вы можете использовать git update-index --assume-unchanged для файла.

--assume-unchanged можно использовать как грубый механизм на уровне файлов, чтобы игнорировать незавершенные изменения в отслеживаемых файлах (аналогично тому, что делает .gitignoreдля неотслеживаемых файлов).Вы должны помнить, что явная операция git add все равно приведет к обновлению файла из рабочего дерева.Git потерпит неудачу (изящно), если ему нужно изменить этот файл в индексе, например, при слиянии в коммите;таким образом, в случае, если предполагаемый неотслеживаемый файл будет изменен в восходящем направлении, вам нужно будет обработать ситуацию вручную.

...