2012-06-20 14 views
48

私は、ユーザのコンテンツが保存されているディレクトリ/sites/default/files/を持っています。私はこのようなものを追跡する必要はないと考えて、/ sites/default/files /を.gitignoreファイルに追加しました。Gitリポジトリで以前に無視されたファイルの無視を解除する問題

私はまた、ほとんどの場合永久的なアップロードをそのディレクトリに保存したいと思ったことも発見しました。これで、/ sites/default/files /内のすべてを追跡し、望ましくないサブディレクトリを除外するのは、他の方法とは異なり、より意味があります。

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

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

+1

偶然サブモジュールを使用していますか?おそらくサイト/サイト/デフォルト/サイト/デフォルト/ファイル/ですか?また、これらの3つのディレクトリのそれぞれに.gitignoreファイルがあるかどうかを確認します。ディレクトリを追加するのではなく、 'git add -f sites/default/files/*'を使って特定のファイルを追加することもできます。 – twalberg

+0

いいえ、サブモジュールはありませんでした(それらは認識していませんでしたが、将来の使用のためにそれらを覚えています - ありがとう)。すべてのディレクトリをダブルチェックして、さらに.gitignoreファイルを探します。何もありません。そして、 'git add -f sites/default/files/*'はそれをしませんでした。私が 'touch/default/files/test.mine'を押してもまだそれを見ません。 – doub1ejack

+1

Hmmm ...まあ、 '.gitignore'に他のエントリーがないと確信していますか? - 何らかのワイルドカードか何かか?あるいは、 '* .pyc'のように、個々のファイルを無視させるものと、' .pyc'ファイルのみを含むディレクトリはありますか? '.gitignore'で' file'という名前を付けることは 'サブディレクトリ/ファイル'や 'サブ/サブディレクトリ/ファイル'にもマッチすることに注意してください... – twalberg

答えて

4

後生用:私の問題に対する答えは「ちょっと見た目に近い」ものでした。

@twalbergが指摘した通り、.gitignoreファイルには私が見落としていたルールがあるかもしれません。 .gitignoreルールが適用されるカスケード方法は、意図したよりも広範囲にファイルを除外しやすくします。

私が言うことができる限り、私がgitの仕事の仕方について仮定していたものは正しいものでした。同様に、私の場合は、assume-unchangedビットがどのような役割を果たす可能性があるかについてのJ-16 SDiZのコメントを支持する(または反証する)ようではない。

48

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

なぜか... gitが内部でassume-unchangedビットを設定しているためです。このビットは、ファイルが変更されていないと考えるので、git addは追加しません。

実装の詳細を混乱させたい場合は、git update-index --no-assume-unchanged <file>コマンドを使用できます。

+0

おそらく、gitにこれらのファイルを追加して開発リポジトリにプッシュすると、他のすべての開発者も同様にそれらを追跡し始めるでしょうか?自分の.gitignoreファイルがdevのrepoから引き出されているファイルを無視している(ローカルの.gitignoreファイルを更新するまで)ファイルを無視しているときに、どうやって動作するのか少し問題がありますが、これでgitを信頼するだけです。 – doub1ejack

+0

あなたの '.gitignore'はバージョンコントロールでなければなりません。他の開発者は、更新するときにそれを取得する必要があります。 –

+0

そうです、彼らはすべきです。しかし、私の.gitignoreファイルを変更しても問題は解決しませんでしたので、他の開発者がローカルのreposで同じ '-f'修正を使わなければならないかどうか疑問に思っています。 – doub1ejack

9

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

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

git add -fのみはどこか無視するファイルに存在しないことのファイルを追加するためのようです。

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

+0

いいえ、私はちょうど1つの.gitignoreファイルがあり、除外ファイルは空です。 – doub1ejack

+0

私は何かを逃していますか?私はあなたの状況(http://pastebin.com/wZB6F8Qj)を再現しようとしましたが、.gitignoreを編集した後、そのファイルはuntrackedとして再度表示され、 'git add file'が動作します。 – hdgarrood

+0

私はもう一度不思議に思っています... -fを使ってgitにディレクトリを追加させた後、 'git add' gitを実行すると、私の.gitignoreファイルの1つでディレクトリが無視されることがわかります。 .gitignoreのローカルリポジトリを検索し、見つかったファイルのみを見つけて除外ファイルを開き、干渉していないことを確認しました。何かが足りない? – doub1ejack

1

私たちのDrupalサイトディレクトリには、非常によく似た問題がありました。問題は、Drupalディストリビューションは、drupal/sites/files/*の中の何かにマッチする上位レベルのdrupalディレクトリに.gitignoreファイルがあります。

関連する問題