.gitignoreはGitによって無視されます


1513

私の.gitignoreファイルはGitによって無視されているようです- .gitignoreファイルが破損している可能性はありますか?Gitが期待するファイル形式、ロケール、またはカルチャはどれですか?

.gitignore

# This is a comment
debug.log
nbproject/

からの出力git status

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       debug.log
#       nbproject/
nothing added to commit but untracked files present (use "git add" to track)

私は希望debug.lognbproject/人跡未踏のファイルリストに表示されません。

これを修正するためにどこから始めればよいですか?


56
.gitignoreファイルが使用ANSIまたはUTF-8エンコードしていることを確認してください。のようなものを使用している場合Unicode BOM、Gitがファイルを読み取れない可能性があります。
ADTC

8
@ADTCこれはまさに私のマシン(Windows)の問題でした。私はecho "file" > .gitignorePowerShellで使用しましたが、ファイルにはUCS-2エンコードが含まれていました。
MarioDS

7
git rm --cached debug.log nbproject/
Gayan Weerakutti、

4
ここの最初のコメントが答えではない理由は私を超えています
RedOrav

2
@MattParkinsああ、私は今それを見て、そのような単純で端正な答えがコメントとして埋め込まれている、または実際に受け入れられているものがそこにあるのにはまだ驚きます。ありがとう!
RedOrav

回答:


3121

これまでにファイルを追跡していなくても、Gitをに追加した後でも、Gitはそれらを「知る」ことができるようです.gitignore

警告:最初に現在の変更をコミットしてください。そうしないと、変更が失われます。

次に、Gitリポジトリーの最上位フォルダーから次のコマンドを実行します。

git rm -r --cached .
git add .
git commit -m "fixed untracked files"

8
「git rm -r --cached」を実行すると、「usage:git rm [options] [-] <file> ...」と出力されました。問題がある場合は、GitHub for Windowsで[ツール]-> [シェルをここに開く]をクリックした後、PowerShellからGitを使用しています。
12

61
Windowsの場合:git rm。-r --cached および git add。
ビーチハウス

90
以前にすべての変更をコミットすることに注意してください。そうしないと、変更されたすべてのファイルを制御できなくなります。
Cosmin 2013年

45
最初の3人のコメント投稿者は、最後にドットを逃したようです。これはすべてのファイルを意味します。「git -rm -r --cached」<-ドットに注意してください。
Christophe De Troyer 2014年

18
コミットしたくない場合の回避策は、変更をシェルフに配置することです: "git stash"。上記のコマンドを実行します。そして "git stash pop"を実行します
Ivan Voroshilin

335

Gitが.gitignoreファイルに加えた変更に気付いていないように見える場合は、次の点を確認してください。

  • .gitignoreローカルファイルと干渉する可能性があるグローバルファイルがある可能性があります
  • .gitignoreファイルに何かを追加する場合は、次のことを試してください。

    git add [uncommitted changes you want to keep] && git commit
    git rm -r --cached .
    git add .
    git commit -m "fixed untracked files"
    
  • .gitignoreファイルから何かを削除し、上記の手順が機能しない可能性がある場合、上記の手順が機能しないことが判明した場合は、これを試してください

    git add -f [files you want to track again]
    git commit -m "Refresh removing files from .gitignore file."
    
    // For example, if you want the .java type file to be tracked again,
    // The command should be:
    //     git add -f *.java
    

3
おそらく、@ AlinHurubaの回答を編集してステップ3を追加できますか?
Benj 2016

@Benjアドバイスありがとうございます。AlinHurubaの答えは見つかりませんでした。違いがわからないので、直接教えてください。
ifeegoo 2017年

2
ステップ3は私が必要としたものです。ほとんどの答えは、追跡を解除するファイルを削除する方法を示しています。反対の視点をありがとう。
Yeung

これがお役に立てば幸いです。
ifeegoo 2017年

7
git rm -r --cached .私のために働いた
ジェイソン

198

修繕。はい、Windowsのメモ帳で.gitignoreファイルを作成しましたが、機能しませんでした。Linuxで.gitignoreファイルを表示すると、整理された意味不明のように見えました。おそらくメモ帳がASCIIではなく、8ビットのUnicodeではなくUnicodeで記述していたためです。

そのため、Linuxボックスでファイルを書き直しました。ファイルをWindowsに戻したところ、問題なく動作しました。フラー!


77
メモ帳では、[名前を付けて保存]ダイアログでエンコーディング[ANSI]を選択するだけです。それどころか、適切なテキストエディタを入手してください-結局のところ、あなたはプログラマーです:) ...私は「プログラマーのメモ帳」をお勧めできます。
0xC0000022L

1
ええ、そうです、私はそれを(当時使用していた)ネットビーンズ、日食、またはビジュアルスタジオで作成する必要がありました。違いはないと考えて、コマンドラインから呼び出しました。
マットパーキンス

8
私の問題も同様でした-私の.gitignoreはBOMで UTF8を使用していました。BOMなしでUTF8として保存するだけで、魔法のように機能し始めました。
Phil 14年

13
これも私の問題でした。Windowsでは "。"で始まるファイルを作成するのがとても面倒なので、 "echo dirName> .gitignore"で.gitignoreファイルを作成しました。この方法で作成されたファイルのエンコーディングはgitで読み取ることができず、代わりにバイナリファイルとして解釈されました。Notepad ++で[エンコード-> UTF-8]をクリックして、保存して完了。
ローラ、

4
PowerShellの@Lauraと同じ問題がありました-ファイルはデフォルトでUTF16として保存されます。
mrówa

113

プロジェクトに別のコミットを追加しなくても、1行で、.gitignore想定どおりに機能します。

git rm -r --cached debug.log nbproject

これにより、それらはリポジトリから削除されますが、物理的には保持されます。プレーンな英語では、それらに関連する変更の履歴を削除し、将来のコミットでの変更を追跡しません。ここでより良い説明を見つけることができます


1
思い通りに動作しました-正しく追跡されなかったファイルは1つしかありませんでした。私はその内容をメモ帳に保存し、実行しました。git rm -r --cached someFile.phpそしてそれは魅力のように機能しました:)
ShayLivyatan 2016

@FMFFこれはリポジトリから削除しますが、物理的にはプレーンな英語で保持します。それらに関連する変更の履歴を削除し、将来のコミットでの変更を追跡しません。あなたがここで見つけることが良く解明:stackoverflow.com/questions/37279654/...
HAßdøμ

「致命的:pathspec 'debug.log'はどのファイルとも一致しませんでした」
Michael

45

この問題の別の原因は、ステートメントの前の空白スペースまたはタブです。

例:

# Be aware of the following:
 notWorkingIgnore.*
workingIgnore.*

そして、以下のコメントで指摘されているように、末尾のスペースも問題になる可能性があります。

# Be aware of the following:
notWorkingIgnore.* #<-Space
workingIgnore.*#<-Nospace

11
末尾のスペースが私の問題でしたが、それを見つけるのはさらに困難です。
am

3
また、末尾に空白の問題がありました。
Trefex 2015年

3
はい、同じです。ファイルのパターンの後にコメントを書くことができると思いました:*.txt # Tex files。しかしgitは理解します:「拡張子が付いたファイルを無視するtxt
AdamLibuša

3
私の言葉では、この15票の回答を見つけるのに2日かかりました。これはもっと価値があります。
フォードカー

2
あなたは私が数か月間抱えていた問題を解決しました...ありがとうございます!
Arkellys

36

のエンコーディングに.gitignore効果があることに気づきました。ファイルがUnicodeの場合は無視され、ASCIIの場合は無視されました。

処理する:

  1. ステータスを確認します。 PS> git status
  2. Get-FileEncodingへの関数を作成する
  3. テスト.gitignoreのエンコード:PS> Get-FileEncoding .gitignore
  4. エンコーディングを変更するをASCIIに。PS> Set-Content .gitignore -Encoding Ascii -Value (Get-Content .gitignore)
  5. 確認: PS> git status

5
1000これをありがとう。私が使用してシステム上の.gitignoreファイルを作成していたtouch .gitignoreし、echo ".db" >> .gitignorePowerShellの経由ルートを。echo ".db" >> .gitignore"ファイルエンコーディングがUCS-2 LE-BOMに設定されていることがわかりました。ASCIIへの迅速な変換とgitignoreが機能し始めました。
B-Rad

2
ステップ2と3をスキップして試すことができます
。– Aniket Bhansali 2017

32

他のソリューションと同様に、最初にコミットし、あなたが になる任意の未コミットされた変更を失います。

私はこれでより良い結果が得られました:

git rm -r --cached .
git reset HEAD --hard
git status

現在、ステータスには変更されたファイルがないはずです。


2
これは私にはうまくいっていませんが、ifeegooの答えはうまくいきます
ファニー

21

私の場合、それはファイルがリポジトリに既に存在していて、それを無視しようとしているためです。

これらは私が問題を修正するためにしたことです:

  • ファイルを一時フォルダにコピーします
  • プロジェクトフォルダーから削除します。
  • リポジトリからそれらのファイルを削除する変更をコミットします
  • これらのファイルをプロジェクトフォルダーに再度追加しました

その時までに、これらのファイルに加えた変更は無視されました。

リポジトリに既に存在するファイルは無視できないと思います。


私の場合、彼らはすでに上演されていました。あなたが提案したことを行ってからコミットし、それらがステージングされて削除されたという警告を見てみないと、それが問題であることがわかりました。
dudeNumber4

19

ここでのすべての回答は実際の回避策です。を実行する前に、.gitignoreファイルを作成する必要がありますgit init。そうでなければgit、それらはすでに追跡されているので、それらのファイルを無視する必要があることは決してわかりません。

echo .idea/ >> .gitignore
git init

日常的に開発する場合は、常用されている無視されたファイルをファイルに追加することをお勧めし~/.gitignore_globalます。このようにして、git通常は無視するファイル(ホームディレクトリ内のファイルであるため、「ユーザー」を意味します)をすでに知っています。


神に感謝...最後に私のために働く解決策。
Dbl

~/.gitignore_global構成可能な名前です。git config --global core.excludesfile最初に実行して、ファイルがすでに定義されているかどうかを確認します。そうでない場合は、を実行しgit config --global core.excludesfile ~/.gitignore_globalます。
ヌメノン

.gitignore最初に作成しなかった場合の回避策:追跡ファイルの名前を変更します。.gitignore新品のように適用されます。
ヌメノン

15

また、チェックアウトディレクトリあなたが入れました.gitignore

それはあなたのプロジェクトのルートにあるはずです:

./myproject/.gitignore

ありませんで

./myproject/.git/.gitignore

9

特にWindowsユーザーの場合:追跡されていないファイルがあり、キャッシュファイルのクリア/削除が機能しない場合。PowerShellを開き、.gitignoreファイルをUTF-8エンコーディングに変換してみてください。

$Myfile = Get-Content .\.gitignore`
$Myfile | Out-File -Encoding "UTF8" .gitignore

そのディレクトリの.gitignoreファイルをエンコードするためにこれを一度だけ実行する必要があります。ファイルはその後正しくエンコードされるため、将来ファイルを編集するときはいつでも機能するはずです。これは、GitHubが.gitignoreファイルの非UTF-8エンコーディングを読み取ろうとしていないことによるグリッチが原因であると思います。私の知る限り、この問題はWindowsではまだ解決されていません。それはあまり大きな問題ではなく、機能していないときにデバッグするのは面倒です。


8

.gitignore特にWindowsユーザーの場合は、別の問題が発生する可能性があります。あなたが名前を付けるとき、Gitはそれを好きではありません.gitignore(などunity.gitignore)。

.gitignoreWindowsでは、.gitignore.ファイル名なしで名前を変更しようとしていると考えているため、常に名前を付けることをお勧めします。


7

この問題に遭遇しました。.gitignoreファイル内のコンテンツは、追跡されていないファイルのリストに引き続き表示されます。

これを使用して無視ファイルを作成していました:

echo "node_modules" > .gitignore

二重引用符が問題を引き起こしていたことがわかりました。無視ファイルを削除してから、引用符なしでコマンドを再度使用すると、期待どおりに動作しました。ファイルのエンコーディングをいじる必要はありませんでした。Cmderを使用しているWindows 10マシンを使用しています

例:

echo node_modules > .gitignore

奇妙なことに、このエコーステートメントはローカルで私が誤って削除して再作成した無視されたファイルがコミット可能な追跡されていないファイルとして表示されるという問題を修正しました。どういうわけか、これで無視ファイルは変更されませんでしたが、問題は解決しました。
Patrick

6

私にとって、以前の答えはどれもうまくいきませんでした。に.gitignoreテキストをコピーする必要がありましたexclude.txtファイルに必要がありました

<Your-project-folder>\.git\info

完了したら、変更を更新すると、追跡されていないファイルはすべてなくなります。通常どおりコミットします。


6

私の問題は(OPが示唆したように)破損した.gitignoreファイルでした。他のすべてが失敗するまで、その可能性があるとは信じておらず、その可能性を無視していました。破損はに表示されませんでしたviが、.gitignoreファイルが無視される原因となったファイルの先頭に2バイトがありました。私にとって、これらは私がと入力したときにのみ表示されましたcat .gitignore

��# Built application files
*.apk
*.ap_

# ...

これらがどのようにして終了したのかはわかりませんが、ファイルを再作成すると問題が修正されました。破損したファイルを16進数で分析すると、次のことがわかりました。

user@dev ~/project/myproject $ xxd -b .gitignore
00000000: 11111111 11111110 00100011 00000000 00100000 00000000  ..#. .
00000006: 01000010 00000000 01110101 00000000 01101001 00000000  B.u.i.

2
これは、UTF-8エンコードファイルのUTF-16バイトオーダーマークのように見えます。en.wikipedia.org/wiki/Byte_order_mark
jsageryd

6

私はこの問題を抱えていました。この行を含む.gitignoreファイル:

lib/ext/

実際、このディレクトリはどこか他のフォルダへのシンボリックリンクであることに気づきました。

ls -la lib/ext/
lrwxr-xr-x 1 roipoussiere users 47 Feb  6 14:16 lib/ext -> /home/roipoussiere/real/path/to/the/lib

行ではlib/ext/、Gitは実際にはフォルダーを探しますが、シンボリックリンクはファイルなので、libフォルダーは無視されません。

.gitignoreファイルでを置き換えるlib/ext/ことlib/extでこれを修正しました。


5

私も同じ問題を抱えていました。問題はCRとCR + LFの不一致だったと思います。CMD(Windows 7)と次のコマンドを使用して、.gitignoreに物を隠しておきました。

悪い:

echo "file_to_be_ignored.py" >> .gitignore<br>
echo "*~" >> .gitignore

等。

問題は、このコマンドがGitが改行を認識するための正しい行末マーカーを配置しないことでした(Gitが他を期待している場合はCRまたはCR + LFのいずれか)。私はVimの各改行(Vim to the rescue!)を手動で置き換えることで問題を解決し、完全に機能しました。

Notepad ++またはVim(理想的には)で.gitignoreを編集してみてください。ファイルが正しくフォーマットされているように見えても、改行を置き換えてみてください。変に聞こえるかもしれませんが、私にとってはうまくいきました。:D



3

また、注目すべき点の1つは、.gitignoreファイルを正しい行末で保存していますか?

ウィンドウズ:

Windowsで使用している場合、Windowsの行末で保存しますか?すべてのプログラムがデフォルトでこれを行うわけではありません。Notepad ++と多くのPHPエディターはデフォルトでLinuxの行末になっているため、ファイルはサーバーと互換性があります。これを確認する簡単な方法の1つは、Windowsのメモ帳でファイルを開くことです。すべてが1行で表示される場合、ファイルはLinuxの行末で保存されています。

Linux:

Linux環境でのファイルの操作に問題がある場合は、Emacsやnanoなどのエディターでファイルを開きます。印刷できない文字が表示された場合、ファイルはWindowsの行末で保存されています。


3

もう1つの考えられる理由同時に実行されているGitクライアントのいくつかのインスタンス。たとえば、「git shell」+「GitHub Desktop」などです。


これは私に起こりました。私はメインクライアントとして「GitHubデスクトップ」を使用していて、いくつかの新しい.gitignore設定を無視していました:コミット後にコミット:

  1. あなたは何かをコミットします。
  2. 次に、コミット:.gitignore設定を無視します。コミットには、.gitignoreで言及されている多くの一時ファイルが含まれます。
  3. Gitキャッシュをクリアします。.gitignoreがUTF-8かどうかを確認します。ファイルを削除→コミット→ファイルを元に戻す。1つのコミットをスキップ–何の助けにもなりません。

理由:Visual Studioコードエディターは、同じリポジトリを開いてバックグラウンドで実行されていました。Visual Studio CodeにはGitコントロールが組み込まれているため、いくつかの競合が発生します。

解決策:複数の非表示のGitクライアントを再確認し、特にGitキャッシュをクリアしている間は、一度に1つのGitクライアントのみを使用します。


3

すばらしい答えはすでにいくつかありますが、私の状況は退屈でした。Win10にインストールされているPLM(製品ライフサイクル管理)ソフトウェアのソースを編集した後、「おそらくこれをgitリポジトリにするべきだった」と判断しました。

したがって、キャッシュオプションは直接私には機能しません。一連の初期作業を行った後でソースコントロールを追加した可能性がある他の人に投稿するが、機能しない場合は、多くの.gitignore作業を失うのではないかと思うかもしれませgit rm --cachedん。

!重要:これは本当に、プロジェクトを追加するのが遅すぎて、大きすぎて.gitignoreを無視しているように見えるためです。私はこれまでにコミットしていません。私はこれでギットアウェイできます:)

最初に、私はやった:

rm -rf .git
rm -rf .gitignore

次に、自分の変化の写真を撮らなければなりませんでした。繰り返しますが、これは私が変更を加えたインストール製品です。純粋なmasterブランチの最初のコミットには遅すぎます。そのため> changed.log、次のいずれかに追加してプログラムをインストールしてから変更した内容のリストが必要でした。

パワーシェル

# Get files modified since date.
Get-ChildItem -Path path\to\installed\software\ -Recurse -File | Where-Object -FilterScript {($_.LastWriteTime -gt '2020-02-25')} | Select-Object FullName

バッシュ

# Get files modified in the last 10 days...
find ./ -type f -mtime -10

これで、過去10日間に変更したもののリストを取得できました(ここでベストプラクティスに入るのはやめましょう。そうですね、これは自分で行いました)。

新たなスタートとして、今:

git init .
# Create and edit .gitignore

私は変更したリストを実行中の.gitignoreと比較して、実行しなければなりませんでした git status改善しながら必要がありましたが、.gitignoreでの編集内容は、そのまま読み込めます。

最後に、必要な変更のリストを用意しました。私の場合、それはボイラープレートです-いくつかのテーマは、他の開発者が取得して貢献するためにリポジトリに入れたいこのソフトウェアに対して開発システムを実行するのに固有のサーバーxml構成とともに機能します...これは私たちのマスターブランチになるので、コミット、プッシュ、そして最後に新しい仕事のためのブランチング!


2

以下のコマンドで、以前にGitでコミットされたフォルダーまたはファイルを削除するだけです。次に、gitignoreファイルは正しいファイルを反映します。

    git rm -r -f "folder or files insides"

2

ここで他の回答でカバーされていないトリッキーなことの1つは、次のようなインラインコメントがある場合、.gitignoreファイルが機能しないことです。

foo/bar # The bar file contains sensitive data so we don't want to make this public

したがって、そのようなコメントがある場合は、次のように変更します。

# The bar file contains sensitive data so we don't want to make this public
foo/bar

2

コマンドで.gitignoreファイルを編集した可能性もありますsudo。同じ問題が発生し、コマンドの実行中にgit status、「無視する必要がある」ファイルがまだ表示されました。

nano .gitignore代わりにを使用して編集するとsudo nano .gitignore、正しい反射が表示されました。


2

echo "..." > .gitignoreWindowsでPowerShell を使用して.gitignoreを作成しました。Windowsエクスプローラーでは作成できないためです。

私の場合の問題は、作成されたファイルのエンコーディングでした。ANSIに変更すると、問題は解決しました。


2

私もUbuntuで同じ問題があり.gitignore、ターミナルから作成しましたが、それは私のために機能します

touch .gitignore


2

私が文字通り.gitignoreというテキストドキュメントを作成したため、鉱山は機能していませんでした

代わりに、テキストドキュメントを作成してNotepad ++で開き、.gitignoreとして保存します。

保存するときは、必ずドロップダウンから[すべてのタイプ(*。*)]を選択してください。


またはgitbashでは、単に touch .gitignore


1

Notepad ++ユーザーの場合は、次のことを試してください。

Notepad ++を使用して.gitignoreファイルを開き、次のようにします。

メニュー編集EOL変換Windows形式保存

もう一度使用git statusしてみて、機能するかどうかを確認してください。

同様の質問に対する回答をこちらに投稿しました


1

私にとっては、それはまた別の問題でした。私の.gitignoreファイルは、無視しないように指示したもの以外はすべて無視するように設定されています。そのような:

/*
!/content/

これは明らかに、Gitに.gitignoreファイル自体を無視するように指示していることを意味します。.gitignoreファイルを追跡していなければ、問題ありませんでした。しかし、ある時点で.gitignoreファイル自体をコミットしました。これにより、.gitignoreファイルが適切に無視されます。

したがって、もう1行追加して修正しました。

/*
!/content/
!.gitignore

1

私の問題は、無視するファイルを、スラッシュ/ではなく引用符 ""で区切って書き留めたことでした。

これは機能せず、gitによって無視されました:

"db.sqlite3"
"tdd_venv/"

これはうまくいきました:

/db.sqlite3
/tdd_venv/

また、WindowsでNotepad ++を使用してファイルのエンコードを確認しました。エンコーディングはUTF-8に設定されました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.