web-dev-qa-db-ja.com

gitは2つの特定の名前のファイルを無視しません

私は2つのファイルをコミットから自動的に除外したいのですが、これらはgitリポジトリの一部ですが、githubリポジトリの一部ではないはずのいくつかの変更があります。これらの変更には、ローカルシステムにのみ意味のある変更があり、他のものには意味がないためです。開発者。

私はそれらを.git/info/excludeに追加しました。gitがそれらに変更をコミットしてはならないことを理解することを期待しています:

# 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
# *~

ただし、git statusは、まだそれらをコミット用にステージング済みとしてリストしています。

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   build/conf/a.conf
#   modified:   build/conf/b.conf
#

コミットするたびに(定期的に忘れる可能性があります)定期的にステージングを解除したくないのですが、どうすればよいですか?

64
erikbwork

追跡したいファイルの変更を無視したいのです。これは(_ Charles Baileysays として).gitignoreでも.git/info/excludeでも正しく達成できません。

git update-index を使用する必要があります:

git update-index --assume-unchanged build/conf/a.conf
git update-index --assume-unchanged build/conf/b.conf

あなたが望むものを達成します:ファイルは常に変更されていないと見なされます。

これらのファイルの変更を再度追跡する場合は、--no-assume-unchangedを使用します。

最後に、現在--assume-unchangedモードになっているファイルを知りたい場合は、gitに

git ls-files -v | grep -e "^[hsmrck]"
136
eckes