Reputation: 5190
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 changes to my dotfiles which are specific to this system only. These changes I wish to ignore in my repository.
Other changes that I make, should continue to be tracked and committed.
For example, in my .gitconfig, I have a setting as:
[push]
default = simple
Now, on my new machine, the version of git being used it very old. It still not not support the setting simple
for push. So, I'd like to change this, but only locally.
However, if I make any other changes to my .gitconfig, I'd like to keep track of those. Anyway I can achieve this?
EDIT:
I know of git update-index --assume-unchanged
. The problem with it is that git will no longer track my file at all, until I reverse it. And then, it will track all changes.
I wish to ignore certain changes and track the rest.
Upvotes: 76
Views: 33986
Reputation: 4957
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.
Upvotes: 5
Reputation: 17240
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.
Upvotes: 194
Reputation: 13653
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:
Upvotes: 0
Reputation: 6408
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.
Upvotes: 9