Specifically, I maintain a git repository of my dotfiles. I recently started working on a new machine and cloned my repository on the same.
Now, I wish to make some
Here is an alternative solution to your specific problem. Place machine-config configuration in a ~/.gitconfig.local file, and then put the following in your version-controlled ~/.gitconfig:
[include]
path = ~/.gitconfig.local
This will tell Git to treat anything it finds in ~/.gitconfig.local as if it were in ~/.gitconfig. Yes, you can override settings. No, it does not require the file to exist (Git will silently ignore the setting if there is no ~/.gitconfig.local).
See here for more information about [include].
I follow this strategy in my configurations for Emacs, Zsh, Git, Tmux, etc., so that they are customizable without the need to modify version-controlled files. To accomplish this, I have init.local.el, .zshrc.local, .gitconfig.local, .tmux.local.conf, and so on.
As suggested by Peter you can keep those machine specific changes in a branch. Obviously you will have to be careful to strictly separate changes to those machine specific files from the "mainline". There are 2 ways for doing this:
I don't believe there's a specific command that will 'untrack' certain changes to a file. However, there's no reason that you couldn't create a local branch into which you pull changes from your remotes, but never send any changes back.
Try using this command:
git update-index --assume-unchanged FILENAME_TO_IGNORE
To reverse it (if you ever want to commit changes to it), use:
git update-index --no-assume-unchanged
UPDATE:
Here's how to list 'assume unchanged' files under current directory:
git ls-files -v | grep -E "^[a-z]"
As the -v option will use lowercase letters for 'assume unchanged' files.