2012-06-04 9 views
34

gitリポジトリに含まれているいくつかの変更があり、githubリポジトリの一部ではない2つのファイルを自動的に除外します私のローカルシステムにのみ意味があり、他の開発者にとっては意味がありません。gitは2つの特別な名前のファイルを無視しません

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

Iドンを

私はgitのは彼がそれらに変更をコミットするべきではないことを理解して期待して.git/info/excludeにそれらを追加しましたすべてのコミット(私がちょうど忘れてしまうかもしれない)で定期的にそれらを無作為にしたいのですが、どうすればいいですか?

+2

のためにgitを頼みますか? – maverik

+5

追跡中のファイルは無視できません。おそらく、構成ファイルを生成または手動で編集する「テンプレート」ファイルを持つなど、ローカルシステム固有の情報を管理する別の方法を見つける必要があります。 –

+2

@maverik: '除外 'が機能しない場合、' .gitignore'も実行されません。 'exclude'のユースケースは、この情報がローカルであり、' .gitignore'がチェックインされ共有されるということです。あなたが '.gitignore'を爆破したくないときは、あなたの地元のものに'除外 'をしてください。すべての開発者が '.gitignore'に除外項目を入力する大きなプロジェクトを想像してみてください。それはもはやmanagableになるだろう... – eckes

答えて

92

トラッキングされたファイルの変更を無視すること。これは、.gitignoreでも.git/info/excludeでも正確には実現できません(Charles Baileysays)。

あなたは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モードで現在どのファイルを知りたい場合は、 `.gitignore`しないのはなぜ

最後に、

git ls-files -v | grep -e "^[hsmrck]" 
+0

私のために素晴らしい作品! – Gustyn

+1

'{fatal:ファイル{path/to/file}にマークすることができません。 ' – Leo

+0

このソリューションはブランチにバインドされていますか? branch1に "assum-unchanged"とマークされたファイル1とファイル2を作ってみましょう。その後、branch2にチェックアウトします。これらのファイルは、「仮定なし」とマークされていますか? – nespapu

関連する問題