77

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

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

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

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

4

6 に答える 6

79

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

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

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

于 2012-06-20T19:01:56.507 に答える
13

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

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

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

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

于 2012-06-20T19:37:44.210 に答える
10

後世のために:私の問題に対する答えは「もっとよく見てください」でした。

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

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

于 2012-06-22T14:52:03.830 に答える