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". Есть два способа сделать это:

  • Продолжайте восстанавливать ветвь, когда вы меняете основную линию (это было бы моим предпочтением)
  • Продолжайте слияние изменений основной линии в ветку (но, очевидно, никогда не сходите в другом направлении)