web-dev-qa-db-ja.com

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

私の.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/が追跡されていないファイルリストに現れないことを望みます。

私はこれを直すためにどこから探し始めるべきですか?

1234
Matt Parkins

一定。 Windowsのメモ帳で.gitignoreファイルを作成しましたが、うまくいきませんでした。私がLinuxで.gitignoreファイルを見たとき、それは整理された意味のない略語のように見えました - おそらくメモ帳はASCIIではなくUnicodeでも書き出しました。

だから私は自分のLinuxマシンでそのファイルを書き直した、そして私がそれをWindowsに戻したとき、それはうまく機能する!万歳!

152
Matt Parkins

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

注: 最初に現在の変更をコミットしないと、変更が失われます。

それからGitリポジトリのトップフォルダから以下のコマンドを実行します。

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

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
    
257
ifeegoo

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

git rm -r --cached debug.log nbproject

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

91
H Aßdøµ

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

例:

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

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

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

.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
30
craig

他のソリューションと同様に、最初にコミットし、willコミットされていない変更を失うことに注意してください。

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

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

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

30
Steven Stark

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

echo .idea/ >> .gitignore
git init

あなたが毎日開発しているのであれば、私はあなたの習慣的に無視されているファイルをあなたの~/.gitignore_globalファイルに追加することを勧めます。このようにして、gitはあなたがどのファイル(ホームディレクトリのファイルなので "your user"を意味します)を通常知っているでしょう。

14
CESCO

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

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

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

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

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

13
Edesa

.gitignoreを置いた ディレクトリ も調べてください。

それは あなたのプロジェクトのルート - にあるべきです

./myproject/.gitignore

ありませんで

./myproject/.git/.gitignore
11
Artem Zaytsev

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

Windowsでは、ファイル名を付けずに名前を変更しようとしていると考えられるため、常に.gitignore、またはWindowsでは.gitignore.と名前を付けます。

7
Goldblaze

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

無視ファイルを作成するためにこれを使用していました。

echo "node_modules" > .gitignore

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

例:

echo node_modules > .gitignore
6
bprdev

私はこの行を含む.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は実際に folder を探しますが、シンボリックリンクは file なので、私のlibフォルダは無視されません。

私の.gitignoreでlib/ext/lib/extに置き換えることでこれを修正しました。

5
roipoussiere

特にWindowsユーザーの方へ:未追跡ファイルがあり、キャッシュされたファイルの消去/削除がうまくいかない場合。 PowerShellを開いて、.gitignoreファイルをUTF-8エンコーディングに変換してみてください。

1)$ Myfile = Get-Content ..gitignore

2)$ Myfile = |アウトファイル - エンコーディング "UTF8" .gitignore

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

5
maximusg

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

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

完了したら、変更内容を更新すると、追跡されていないファイルはすべて削除されます。いつものようにコミットします。

5
raga

私の問題は(OPが示唆したように)破損した.gitignoreファイルでした。私はそれが他のすべてが失敗するまでそれが可能であったことを信じて無視した。破損viには表示されませんでしたが、ファイルの先頭に2バイトあり、.gitignoreファイルが無視されていました。私にとっては、これらは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.
5
pcdev

私はこれと同じ問題を抱えていました。私は問題がCR対CR + LFの不一致であったと思います。私は(Windows 7の)CMDと次のコマンドを使って私の.gitignoreで物事を隠しました。

悪い:

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

等。

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

.gitignoreをメモ帳++またはVim(理想的には)で編集してみてください。ファイルが正しくフォーマットされているように見えても、改行を置き換えてみてください。それは奇妙に聞こえます、私は知っています、しかしそれは私のために働きました。 :D

4
fictivelogic

それで、私の場合、認められた解決策はうまくいきませんでした。

Visual Studio 2013は、.gitignoreファイルを無視しますか?

要するに:

  • Visual Studioを閉じます。
  • .gitフォルダに移動します
  • ms-persist.xmlを削除
  • Visual Studioを再起動します。
3
Bartosz

注意すべき点の1つは、.gitignoreファイルを正しい行末で保存しているかどうかです。

Windows:

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

Linux:

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

2
Beachhouse

ここで他の答えでカバーされていない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
1
James

Sudoname__コマンドで.gitignoreファイルを編集した可能性もあります。私は同じ問題に遭遇しました、そして、コマンドを実行している間:git status、私はまだ「無視されるべき」ファイルを見ることができました。

nano .gitignoreの代わりにSudo nano .gitignoreで編集したとき、私は正しい反映を見ることができました。

1
aviral sanjay

私もUbuntuで同じ問題を抱えています。端末から.gitignoreを作成しました。

touch .gitignore

1
Chawki

他の考えられる理由 - 同時に動作しているgitクライアントのいくつかのインスタンス 。例えば ​​"git Shell" + "GitHub Desktop"などです。


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

  1. あなたは何かをコミットします。
  2. 次にコミットします。gitignore設定を無視します。コミットには、.gitignoreに記載されている多数の一時ファイルが含まれます。
  3. Gitキャッシュをクリアします。 .gitignoreがUTF8かどうかを確認してください。ファイルの削除 - >コミット - >ファイルの移動1コミットをスキップする - 何も助けにはならない。

理由 :Visual Studioのコードエディタが、同じリポジトリを開いてバックグラウンドで実行されていました。 VS Codeにはgitコントロールが組み込まれており、これはいくつかの衝突を引き起こします。

解決策 :複数の隠されたgitクライアントをダブルチェックして一度に1つのgitクライアントのみを使用する、特にgitキャッシュをクリアするとき。

0
Oleg Zarevennyi

私は文字通り.gitignoreと呼ばれるテキストドキュメントを作成したので、私は機能していませんでした

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

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


または、gitbashでは、単にtouch .gitignoreを使用します

0
Kari

WindowsのPowershellでecho "...">。gitignoreを使用して.gitignoreを作成しましたが、エクスプローラで作成することはできません。

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

0
Ahmad

Notepad ++をお使いの場合は、次の手順を試してください。

Notepad ++を使用して.gitignoreファイルを開き、以下の操作を行います。

編集> EOL変換> Windowsフォーマット>保存

もう一度git statusを使って試してみて、それがうまくいったかどうかを確認してください。

私は同様の質問に答えを投稿しました ここ

0
Ozesh

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

    git rm -r -f "folder or files insides"
0
Atif Hussain

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

/*
!/content/

これは明らかに私がgitignore自体を無視するようにgitに言っていることを意味しています。私が.gitignoreを追跡していない限り、これは問題ではありませんでした。しかし、ある時点で、私は.gitignore自体をコミットしました。これにより、.gitignoreが正しく無視されるようになりました。

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

/*
!/content/
!.gitignore
0
user8118328