Как вы говорите git навсегда игнорировать изменения в файле?
Я работаю с git-репозиторием, в котором хранятся данные для веб-сайта. Он содержит файл.htaccess с некоторыми значениями, подходящими для производственного сервера. Чтобы я мог работать на сайте, мне нужно изменить некоторые значения в файле, но я никогда не хочу фиксировать эти изменения, иначе я сломаю сервер.
Поскольку.gitignore не работает для отслеживаемых файлов, я использовал "git update-index --assume-unchanged .htaccess", чтобы игнорировать мои изменения в файле, однако это работает только до тех пор, пока вы не переключите ветки. Как только вы вернетесь к своей первоначальной ветке, ваши изменения будут потеряны.
Есть ли какой-нибудь способ сказать git игнорировать изменения в файле и оставить его в покое при смене веток? (Как будто файл не был отслежен.)
3 ответа
Вы можете использовать процесс smudge/clean ( драйвер фильтра gitattribute, описанный в ProGit)
Каждый раз, когда вы обновляете свой рабочий каталог, у вас будет возможность заменить содержимое вашего .htaccess
с предопределенным, правильным для вашей текущей среды.
На чистом этапе вы затем восстановите исходный контент, как если бы вы никогда не касались этого файла.
Просто скажите git, что файл не изменился:
$ git update-index --assume-unchanged FILE [FILE ...]
Из руководства:
--assume-unchanged, --no-assume-unchanged
When these flags are specified, the object names recorded for the paths are not updated. Instead, these options set and unset the "assume unchanged" bit for the paths. When the "assume unchanged" bit is on, git stops checking the
working tree files for possible modifications, so you need to manually unset the bit to tell git when you change the working tree file. This is sometimes helpful when working with a big project on a filesystem that has very slow
lstat(2) system call (e.g. cifs).
This option can be also used as a coarse file-level mechanism to ignore uncommitted changes in tracked files (akin to what .gitignore does for untracked files). Git will fail (gracefully) in case it needs to modify this file in the
index e.g. when merging in a commit; thus, in case the assumed-untracked file is changed upstream, you will need to handle the situation manually.
Находится в разделе Как игнорировать изменения в отслеживаемых файлах с помощью Git
Подход на основе git: используйте производственную ветку и сохраняйте изменения, специфичные для вашей производственной среды. Для выпуска в производство объедините вашу основную ветку с вашей производственной веткой.
подход, основанный на развертывании: используйте инструмент (например, capistrano / cfengine /...) для автоматизации процесса развертывания. Это имеет много преимуществ, одним из которых является возможность отделить конфигурацию от вашего кода.