I want to automatically exclude 2 files from committing, that are part of the git repository but have some changes, that shouldn't be part of the github repo, because they have some changes that are only meaningful to my local system and not the other developers.
I added them to .git/info/exclude
in the hopes git understands that he shouldn't commit changes to them:
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
a.conf
b.conf
# *~
but git status
still lists them as staged for committing:
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: build/conf/a.conf
# modified: build/conf/b.conf
#
I don't want to unstage them regularly with every commit (one time I might just forget), how can I do that?
What you want to is to ignore changes on tracked files. This cannot achieved (as Charles Bailey says) correctly, neither with .gitignore
nor with .git/info/exclude
.
You'll need to use git update-index
:
git update-index --assume-unchanged build/conf/a.conf
git update-index --assume-unchanged build/conf/b.conf
will achieve what you want: the files are always assumed unchanged.
If you want to track changes in these files again, use --no-assume-unchanged
.
Finally, if you want to know which files are currently in the --assume-unchanged
mode, ask git for
git ls-files -v | grep -e "^[hsmrck]"