Уже поздно, но я нашел лучшее решение (несколько лет назад).
Использование git-accept-status и git-unassume-status
#!/usr/bin/env ruby
# used to ignore modified files -- e.g configuration files
ret=%x{git status --porcelain}
files=ret.lines.map { |x| x.split[1] }
files.each do |file|
# makes files resistant to git reset hard
%x{git update-index --skip-worktree #{file}}
%x{git update-index --assume-unchanged #{file}}
end
и для git-unassume
#!/usr/bin/env bash
# used to ignore modified files -- e.g configuration files
cd .git
rm index
cd ..
git reset
Таким образом, вы можете изменять файлы конфигурации, но игнорировать их при помощи состояния и других команд git add.
Если вы передумаете, вы запустите git-unassume