web-dev-qa-db-ja.com

Gitリポジトリで以前に無視されたファイルを無視しない問題

ユーザーコンテンツが通常保持される/sites/default/files/ディレクトリを持つサイトがあります。このようなものを追跡する必要がないと考えて、.gitignoreファイルに/ sites/default/files /を追加しました。

それから、そのディレクトリにもほぼ永久的なアップロードを保持したいことを発見しました。/sites/default/files /内のすべてを追跡し、望ましくないサブディレクトリを除外する方が、逆の方法ではなく、より理にかなっています。

問題は、Gitがそのディレクトリを無視しなくなることではないということです。このディレクトリを指定する行を.gitignoreから削除しましたが、追跡しません。 git add /sites/default/files/ -fを使用してgitにディレクトリの追跡を強制するオプションがありますが、これは以前に行ったことがあり、面倒です。

.gitignoreがそのディレクトリを無視するように指定しなくなった場合、なぜGitにそれらのファイルの追跡を開始させる必要があるのですか?

63
doub1ejack

後世のために:私の問題への答えは「ただ近くを見る」ことでした。

@twalbergは、.gitignoreファイルで見落としていた規則があるかもしれないことを正しく指摘しました。 .gitignoreルールがカスケード方式で適用されるため、意図したよりも広範囲にファイルを簡単に除外できます。

私が知る限り、gitがどのように機能するかについての仮定は正しいものでした。同様に、私のケースはassume-unchangedビットが果たす役割についての@ J-16 SDiZのコメントをサポート(または反証)していないようです。

6
doub1ejack

あなたはすでにそれを行う方法を知っています。はい、 git add -f 方法です。

理由を尋ねると...これはgitがassume-unchangedビット内部。このビットはgitにファイルが変更されていないと判断させるので、git addは追加しません。

実装の詳細をいじりたい場合は、git update-index --no-assume-unchanged <file>コマンド。

66
J-16 SDiZ

J-16は正しいとは思わない。 http://www.kernel.org/pub/software/scm/git/docs/git-add.html から:

Git addコマンドは、デフォルトでは無視されたファイルを追加しません。無視されたファイルがコマンドラインで明示的に指定された場合、git addは失敗し、無視されたファイルのリストが表示されます。ディレクトリの再帰によって到達した無視されたファイルまたはGitによって実行されたファイル名のグロビング(シェルの前にグロブを引用)は黙って無視されます。 git addコマンドを使用して、無視されたファイルを-f(force)オプションで追加できます。

git add -fは、doesが無視ファイルのどこかに存在するファイルを追加するためだけのようです。

おそらく/ sitesまたは/ sites/defaultに別の.gitignoreファイルがあり、これもGitにこのディレクトリを無視するよう指示していますか、または.git/info/excludeに設定されているのでしょうか?

12
hdgarrood

Drupalサイトディレクトリに非常によく似た問題がありました。問題は、Drupalディストリビューションの上位レベルに.gitignoreファイルがあることですdrupal drupal/sites/files/*内のすべてに一致するディレクトリ

2
Al Crowley