web-dev-qa-db-ja.com

Gitは.gitignoreの新しい例外を監視しません

[[〜#〜] note [〜#〜]:これは通常の「Gitは.gitignoreに追加したばかりのファイルを追跡します!」問題。これはその反対です。]

GitリポジトリにWebサイトの完全なディレクトリ構造があります。私が使用するCMSには、デフォルトで.gitignoreファイルが付属しています。

# Ignore paths that contain user-generated content.
sites/*/files/
sites/*/private/

すべてのsites/*/filesディレクトリが除外されることに注意してください。しかし、私のサイトのやり方では、リポジトリに含めたい特定のサブフォルダーがあります。したがって、上記の.gitignoreでリポジトリを開始した後、これを修正しました。

# Ignore paths that contain user-generated content.
sites/*/files/
!sites/*/files/content/
!sites/*/files/content/*
sites/*/private/

私の理解では、上記で追加した否定されたパターンは、sites/*/files/content /とそのコンテンツがリポジトリに含まれているが、残りのsites/*/filesは無視されていることを意味するはずです。そして、最初のコミットを行う前に.gitignoreファイルを更新することを覚えていると、計画どおりに機能します。

しかし、後でまで.gitignoreを更新するのを忘れると、そうするつもりはないので、.gitignoreファイルを完全に無視するように強制せずにGitに新しいファイルを追加させることはできません。私はこれを実行します:

> git add sites/default/files/content/

そしてこれを取り戻す:

The following paths are ignored by one of your .gitignore files:
sites/default/files
Use -f if you really want to add them.
fatal: no files added

なぜそうなのか、Git、そのディレクトリIS .gitignoreの2行目では無視されますが、3行目と4行目は、私が尋ねた特定のフォルダの例外を作成すると言っています!

-fを使用して直接追加できることは承知していますが、そのディレクトリにファイルを追加する今後のコミットで何度も実行する必要があります。

allovertheweb 。gitignoreを更新してもGitがすでに無視されない方法について説明しているページがあります-追跡されたファイルですが、Gitが新しく除外されたファイルを追跡しない方法について説明しているものは何も見つかりません。

多くの場所がgit update-indexはこのような問題を解決するために使用できますが、私にはそれを機能させることができないようです。約100万のフラグが考えられるので、正しいフラグ(またはいくつかの組み合わせ)に出くわしなかったのかもしれません。

TL; DR:Gitに.gitignoreファイルの新しい除外を監視させるにはどうすればよいですか?

3
75th Trombone

私は この答え それを最もよく説明すると思います。否定は、別のルールによって明示的に無視されたファイルを再度含める場合にのみ機能します。囲んでいるディレクトリを無視すると、Gitはそのディレクトリに降りることすらしないため、ファイルを表示したり、明示的に除外したりすることはありません。

上記の答えの下の答えはあなたに解決策を与えます:あなたはあなたが除外したいすべてを明示的に除外するパスのセットを構築する1つ以上のルールを作成する必要がありますあなたのファイルを含むその時点であなたは否定することができますそれまたはそれを含むディレクトリのいずれかの排他。

2
Jay Allen

グーグルは同様の問題の答えを探すために私をここに連れてきました。私がやりたかったのは、他の点では変更されていないライブラリ内の単一の構成ファイルを追跡することだけです。

これを実現するには、除外するファイルまでのすべてのフォルダーを含める/除外する必要がありました。

vendor/* !vendor/tfox/ vendor/tfox/* !vendor/tfox/mpdf-port-bundle/ vendor/tfox/mpdf-port-bundle/* !vendor/tfox/mpdf-port-bundle/TFox/ vendor/tfox/mpdf-port-bundle/TFox/* !vendor/tfox/mpdf-port-bundle/TFox/MpdfPortBundle/ vendor/tfox/mpdf-port-bundle/TFox/MpdfPortBundle/* !vendor/tfox/mpdf-port-bundle/TFox/MpdfPortBundle/mpdf/ vendor/tfox/mpdf-port-bundle/TFox/MpdfPortBundle/mpdf/* !vendor/tfox/mpdf-port-bundle/TFox/MpdfPortBundle/mpdf/config_fonts.php

この一連のルールは非常にかさばるように見えますが、これを行う正しい方法のようです。

1
BillyTom