1

私はgitignoreにいくつかのフォルダを入れましたが、ドキュメントに記載されているように

gitignore ファイルは、Git が無視すべき意図的に追跡されていないファイルを指定します。Git によって既に追跡されているファイルは影響を受けません

そのため、いくつかのファイルを追跡解除する必要があり、悪夢の始まりです

これは私のgitignoreファイルです

$ cat .gitignore
/.settings/
/.buildpath
/configuration.php
/administrator/cache/*
/images/*
/connectionOracle.php
/administrator/components/com_jsecure/*
/administrator/language/en-GB/*

このファイルで行われた最後の変更は、/images/* 行の追加です。

このフォルダの追跡を解除するには、{1}ここと {2}ここで説明されている手順に従います

{1} をフォロー中

$ git update-index --assume-unchanged images/*
fatal: Unable to mark file images/02102012_planos.jpg

質問 1: この特定のファイルを追跡解除できないのはなぜですか?

{2} をフォロー中

$ git rm --cached images/ -r
fatal: pathspec 'images' did not match any files

特定のファイルで同じ結果

$ git rm --cached images/20130626tabela1.jpg
fatal: pathspec 'images/20130626tabela1.jpg' did not match any files

質問 2: このエラー メッセージが表示されるのはなぜですか? ここで検索するとこれにたどり着きますが、前述したように、/images/ の下にあるこれらのファイルは追跡されます。

そしてケーキチェリー

無視されたファイルのリストを確認するために、このコマンドを実行しました

$git ls-files --others -i --exclude-standard

これにより、images、administrator、および mpdf61 フォルダー内のファイルの非常に長いリストが表示されます。mpdf61 フォルダーは、gitignore ファイルでも info/exclude でも構成されていません。

Question 3: Why the mpdf61 appears in this list?
4

1 に答える 1

3

注: 「追跡」とは「インデックス内」を意味します。「追跡されていない」とは、「インデックスにない」ことを意味します。ファイルの追跡されていないことの表示は、それが無視されている場合は通常抑制されます。そのため、状態が「追跡されておらず、無視されている」ファイルを単に「無視」と呼び、「追跡されていない」ことを静かに覆い隠すことを好む人もいます。インデックスは現在のコミットと一致する必要がないことに注意してください。これは、インデックスに変更を加えることによって、次のHEADコミットを準備する方法です。これらの変更は、コミットを行うと永続的なコミットの一部になり、そのコミットの更新も同様に行われます。HEAD


$ git update-index --assume-unchanged images/*
fatal: Unable to mark file images/02102012_planos.jpg

質問 1: この特定のファイルを追跡解除できないのはなぜですか?

追跡されていないため、追跡を解除することはできません。さらに、git update-index --assume-unchangedそもそもファイルの追跡を解除しません。「update-index変更されていないと仮定する」ビットを更新するには、ファイルがインデックスにある必要があるため、update-index更新するものがあります。このfatalエラーは、追跡されていない (インデックスにない) 最初のファイルで発生します。最初のエラーの後に停止するだけな*ので、シェルの展開によって名前が付けられた後続のファイルには何も起こりません。update-index

(たとえば、 を実行し、とgit update-index --assume-unchanged red.txt blue.jpg green.svgの両方インデックスにあり、がインデックスにない場合、 のインデックス エントリはマークされますが、 のエントリはマークされません。)red.txtgreen.svg blue.jpgupdate-indexred.txtgreen.svg


$ git rm --cached images/20130626tabela1.jpg
fatal: pathspec 'images/20130626tabela1.jpg' did not match any files

質問 2: このエラー メッセージが表示されるのはなぜですか?

そのファイルも追跡されない (インデックスにない) ため、インデックスから削除することはできません。これ:

$ git rm --cached images/ -r
fatal: pathspec 'images' did not match any files

は、 (現在) インデックスにファイルがない ことを意味します。images/(おそらく、いくつかは以前にあったため、HEADコミットされていますが、以前の成功の後、もはやコミットされていませんgit rm --cached。その場合、それらは git status「削除済み」として表示されるはずです。)


$ git ls-files --others -i --exclude-standard

これにより、images、administrator、および mpdf61 フォルダー内のファイルの非常に長いリストが表示されます。mpdf61 フォルダーは、gitignore ファイルでも info/exclude でも構成されていません。

質問 3: なぜ mpdf61 がこのリストに表示されるのですか?

おそらく、それらのファイルが無視されるためです。git ls-filesドキュメントに示されているように、3 つの「標準」除外ファイル クラスがあります。

--exclude-standard
       標準の Git 除外を追加します: .git/info/exclude、各ディレクトリの .gitignore、およびユーザーのグローバル除外ファイル

(すべて私の強調)。「その」(1つのように)gitignoreファイルと言いましたが、ディレクトリmpdf61自体に1つを含め、多くのファイルが存在する可能性があり、構成されている可能性がありcore.excludesFileます。

特定のファイルを無視している無視ディレクティブを見つけるには、 を使用しますgit check-ignore -vドキュメントを参照してgit check-ignoreください。

于 2016-12-16T22:57:16.983 に答える