gitで変更された(ただしコミットされていない)ファイルを無視しますか?


182

変更(削除)されたがコミットすべきでないファイルを無視するようにgitに指示できますか?

状況には、リポジトリにサブディレクトリがあり、そこにはまったく関心がないものが含まれているため、オートコンプリートなど(IDEで)に表示されないように削除しました。

しかし今、そのフォルダーを.gitignoreに追加すると、何も変更されず、すべてのものはgitステータスによって削除されたように表示されます。

どちらかの方法でgitにそれを無視させる方法はありますか?

(または、git-svnを使用しているので、変更をローカルgitにコミットして、svnリポジトリに渡されないことを確認できますか?)


それらをリポジトリインデックスで未変更としてマークするだけでなく、それらをインデックスから完全に削除することができます。したがって、ファイルが作業ディレクトリに残っている間は、リポジトリインデックスは完全に削除される可能性があり、gitはそれが存在していたとは見なしません。以下の私の回答のリンクをご覧ください。
MaurerPower

回答:


274

git-update-indexのmanページと--assume-unchangedビットと関連をチェックしてください

私があなたの問題を抱えているとき、私はこれをします

git update-index --assume-unchanged dir-im-removing/

または特定のファイル

git update-index --assume-unchanged config/database.yml

3
無視されたすべてのファイルを何らかの方法で一覧表示できますか?
Zitrax 2010

21
次のコマンドでファイルを取り戻すことができますgit update-index --no-assume-unchanged config/database.yml
Denis Kniazhev

1
のいくつかの欠点のない新しい解決策については、以下のDave Lの回答を参照してください--assume-unchanged
Ben Challenor 2013年

2
毎回このコマンドを手動で実行する代わりに、これをリポジトリー構成ファイルに追加することは可能ですか?
Tim Boland 2014

1
次のコミットのために変更されたように見えますか?いつまでも変わらないと思われたくない。
Pranav Nandan

41

新しいより良いオプションは git update-index --skip-worktree、ハードリセットまたはプルからの新しい変更で失われないことです。

http://schacon.github.com/git/git-update-index.htmlのmanページを参照してください

そして、http://fallengamer.livejournal.com/93321.htmlでの比較


9
注意すべき欠点の1つは、ファイルの変更がで非表示になるとskip-worktree、これらのファイルを見つけるのが少し面倒になることです。私が知る唯一の方法はgit ls-files -v |grep -v '^H'です。また、多くのGUIツールはこの機能を認識していないcheckoutため、変更された「隠された」ファイルが原因でが失敗した場合など、おかしなエラーが発生する可能性があります。
sleske 2012年

私はgit docファイルを理解できませんでした。したがって、これはあまり役に立ちません。(各docファイルは、他のすべてのdocファイルの機微を理解していることを前提としています!)
Scott Biggs

7

このコードを使用

git update-index --assume-unchanged file-name

1
本当に面白いです。私のmavenプロジェクトでpassordを使用する必要がありますが、それをgitリポジトリに公開したくないので、local、propertiesに値のないプレースホルダーを置き、コミットしてから、パスワードを挿入しますが、提案されたコマンドで変更されていないファイル。そのため、パスワードは公開されません。
Stefano Scarpanti 2017

6

追跡されたファイルは無視できないため、最初にインデックスから削除する必要があります。.gitignore不要なディレクトリを無視するを追加し、それらを削除して、ですべてのストラグラーを削除しgit rm --cachedます。


1
うーん、これを試しましたが、すべてのファイルが削除済みとしてリストされています。それをコミットする必要があります---cachedはリモートにプッシュされない原因になりますか?それとも私はsthになりましたか?違う?私にとって最も重要なのは、リモート(svn)リポジトリを破損しないことです。

1
インデックスで始まらないものはコミットできません。git rm-コミットしたくないものをすべてキャッシュしてから、「*」が含まれる.gitignoreファイルをローカルに追加します。これで、どれだけgitを追加しても、インデックスにこれらのファイルが再び表示されることはありません。
John Feminella、2009年

ああ、私は今--cachedを理解していると思います。それはインデックスからのものを削除するだけで、作業ツリーはそのままにします。何かが欠けているかどうかはわかりませんが、AFAISは反対を探しています、インデックスに触れずに作業ツリーから削除します。または、どうにかしてそれを使用できますか?

6

私が普段していることは

git stash

git what-else-else

git stash apply

git stash clear


10
また、「git stash pop」を実行して、最後の2つを一度に実行することもできます(「git stash clear」を使用すると、すべてのstashエントリがクリアされます)。
Groxx 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.