Git игнорировать локальные изменения в частях отслеживаемых файлов
В частности, я поддерживаю репозиторий git моих дотфайлов. Недавно я начал работать над новой машиной и клонировал свой репозиторий тем же самым.
Теперь я хочу внести некоторые изменения в мои dotfiles, которые относятся только к этой системе. Эти изменения я хочу игнорировать в моем репозитории.
Другие изменения, которые я делаю, следует продолжать отслеживать и совершенствовать.
Например, в моем .gitconfig у меня есть параметр как:
[push]
default = simple
Теперь, на моей новой машине, версия git используется очень давно. Он все еще не поддерживает настройку simple
для нажатия. Поэтому я хотел бы изменить это, но только локально.
Однако, если я сделаю какие-либо другие изменения в моем .gitconfig, я бы хотел отслеживать их. Во всяком случае, я могу достичь этого?
EDIT:
Я знаю git update-index --assume-unchanged
. Проблема заключается в том, что git больше не будет отслеживать мой файл, пока я не отформатирую его. И затем, он будет отслеживать все изменения.
Я хочу игнорировать некоторые изменения и отслеживать остальные.
Ответы
Ответ 1
Я не верю, что есть определенная команда, которая "не проверяет" некоторые изменения в файле. Однако нет причин, по которым вы не могли бы создать локальную ветвь, в которую вы извлекаете изменения из своих пультов, но никогда не отправляйте никаких изменений.
Ответ 2
Попробуйте использовать эту команду:
git update-index --assume-unchanged FILENAME_TO_IGNORE
Чтобы отменить его (если вы когда-либо захотите зафиксировать изменения), используйте:
git update-index --no-assume-unchanged
UPDATE
Здесь, как перечислить "принимать неизменные" файлы в текущем каталоге:
git ls-files -v | grep -E "^[a-z]"
Как опция -v
будет использовать строчные буквы для файлов "предполагать неизменные".
Ответ 3
Вот альтернативное решение вашей конкретной проблемы. Поместите конфигурацию машинного конфигурирования в файл ~/.gitconfig.local
, а затем поставьте следующее в управляемом версией ~/.gitconfig
:
[include]
path = ~/.gitconfig.local
Это скажет Git обрабатывать все, что находит в ~/.gitconfig.local
, как если бы оно находилось в ~/.gitconfig
. Да, вы можете переопределить настройки. Нет, он не требует, чтобы файл существовал (Git будет молча игнорировать параметр, если нет ~/.gitconfig.local
).
Подробнее о [include]
см. здесь.
Я следую этой стратегии в своих конфигурациях для Emacs, Zsh, Git, Tmux и т.д., так что они настраиваются без необходимости изменять файлы, контролируемые версиями. Для этого у меня есть init.local.el
, .zshrc.local
, .gitconfig.local
, .tmux.local.conf
и т.д.
Ответ 4
Как было предложено Петром, вы можете сохранить эти изменения в конкретной отрасли. Очевидно, что вам нужно быть осторожным, чтобы строго отделить изменения к этим машинным файлам с "mainline". Есть два способа сделать это:
- Продолжайте восстанавливать ветвь, когда вы меняете основную линию (это было бы моим предпочтением)
- Продолжайте слияние изменений основной линии в ветку (но, очевидно, никогда не сходите в другом направлении)