gitignoreはフォルダーを無視しません


135

プロジェクトのルートにfooフォルダーがあります。fooフォルダ内にフォルダがありbarます。barフォルダー内のすべてのファイルに対するすべての変更を無視します。私はこれを私の中に持っていますgitignore

/foo/bar

フォルダーがチェックされます。フォルダーが存在し、無視するファイルが含まれています。gitignoreあるcommitテッドは。しかし、私は変更を加え、自分のbarフォルダー内にあるファイルを持っています。入力すると

git status

私の中git bashに無視されるべきだったファイルが見えます。理由は何ですか?どのようにしてbarフォルダー内のすべてのファイルを正常に無視できますか?

ファイルは以前は同じ行で無視されていましcommitたが、サーバー上の何かに対してその行を一時的に削除する必要があったことに注意してください。の後、commitラインをに戻しましたgitignore。これは少し前のことですが、ファイルがにあることを確認しましたgit status。無視されたファイルをに表示せずに変更できると思いますgit status


将来的には、無視するものを変更して、無視するものを追加する必要はありません。git add -f ignored-fileそれがあなたの無視にある場合でも、ファイルを追加します。
クリス

何をgit status foo/bar/file-that-should-be-ignored与えるのですか?
クリス

変更が発生した場合に無視されるファイル。明らかに何かが欠けていますが、私の知識によれば、/ foo / barが.gitignoreに存在する場合、gitステータスのリストは空であるはずです
Lajos Arpad

4
そのファイルは実際にはGitによって追跡されているようです。ある時点でリポジトリに追加されている必要があります。その歴史はで見ることができますgit log foo/bar/file-that-should-be-ignored。リポジトリの一部ではない場合は、それを削除してgit rm --cached foo/bar/file-that-should-be-ignoredから、以下のReckの提案に従ってコミットする必要があります(フォルダ全体ではなく、ファイルに対してのみ実行します)。これにより、(a)Gitからファイルが削除され、(b)ローカルコピーにファイル保持され、(c)他のユーザーfetchまたはpull新しいコミット時にファイルが削除されます。
クリス

回答:


341

このフォルダーは以前にgitにチェックインされていると思いますか?

git rm -r --cached <folder>再度実行して確認してください。


3
これにより、(現在のバージョンの)リポジトリからフォルダが完全に削除されます。OPはフォルダーが存在することを望んでいますが、新しい変更は追跡しないでください
Gareth

残念ながら私は承諾を削除する必要があります。このソリューションは、プッシュされたときにリモートバージョンのファイルを削除しました。gitignoreを設定して、フォルダーをリモートから削除するのではなく、フォルダーのすべてのファイルを無視したいと思います。それは可能ですか?解決策を元に戻しました。
Lajos Arpad 14年

12
git update-index --assume-unchanged <folder>たぶん?
Reck

3
@Lajosは、この紛らわしい「編集」コメントをそこに追加するのではなく、彼のバグを修正しただけではありませんか?
cregox 2015年

2
@Cawas、このサイトは知識の共有に関するものなので、答えは「いいえ」です。バグを含む回答を受け入れることは誤解を招く恐れがあります。その-rはオプションではありません。
Lajos Arpad、2015年

46

私にとって、受け入れられた答えはソリューション全体ではなく、ソリューションの一部でした。たぶん、これから投稿する他のステップは明白だったかもしれませんが、最初にそれらを逃しました。.gitignoreファイルが無視したいフォルダーを確実に無視するために私が取った手順は次のとおりです。

  1. 修正/変更が必要な変更をコミットします。
  2. 次のコマンドを実行しますgit rm -r --cached .(gitリポジトリを更新するためにgitインデックスからすべてを削除します)
  3. 次に、次のコマンドを実行します:(git add .すべてをリポジトリに戻すため)
  4. 最後に、これらの変更を使用してコミットします git commit -m ".gitignore Fixed"

私が解決策を見つけた記事へのリンクはここにあります


1
これは、元の質問に基づく実行可能な解決策ではありません。@ lagos-arpadは、プロジェクト全体ではなく、サブディレクトリについて具体的に尋ねました。あなたのソリューションはgitリポジトリのルートレベルからすべてを削除しますが、これはこの問題に対処するための推奨されるアプローチではありません。
justinhartman

サブディレクトリだけの場合でも、1つのファイルしか扱っていなかったため、この解決策はうまくいきました。推奨されない理由を詳しく説明していただけますか?
sikanderBabwani 2018年

1
あなたが扱っていたものは重要ではありません。これは質問に対する答えではなく、他の答えが指摘したように潜在的に危険です。これにより、必ずしも必要ではないリモートリポジトリ上のものが削除されます。
RichieHH 2018

8

私はこの問題を抱えていて、gitが実際にファイル/フォルダーを正しく無視していることを認識しましたが、コードエディター(Visual Studio Code)はバグが多く、UIサイドバーで適切に「灰色表示」されていません。VSCodeを再起動すると、期待どおりに灰色表示されました。


ここに同じ:VS Code v1.30.2(ユーザー)
xinthose

わたしも。この解決策を本当にありがとう!VS Codeを再起動するまで.gitignoreが機能しないのはなぜかと思っていました。VisualStudio Code v1.44.2を使用しています。
Fritz Lim

6

受け入れられた回答への追加として

git rm -r --cached /foo/bar/
git status

私がそれをするとき、ターミナルはrmそのディレクトリのファイルの束を示します。したがって、リモートに不必要に影響を与える可能性のある別のコミットを防ぐために、私は次のようにしました。

git reset HEAD *
git status

その後、コミットすることは何も言われず、内部のファイルを変更/foo/bar/して実行してgit statusもまだ取得しnothing to commitます。


1
これは私を私が始めたところ(問題)に戻します
正則Korede
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.