サブディレクトリの.gitignoreルールを無視することは可能ですか?


83

ルートの.gitignoreルールを除くサブディレクトリの.gitignoreルールをすべて無視したい。

例)私はすでに.gitignoreディレクトリ構造にファイルを持っています/a

また、に.gitignoreファイルがあります/a/b。想定/aしていa.txt b.txtたファイルを。

/a/b.configファイルがあります。.gitignoreで定義.config/a/bます。

.configファイルは.gitignoreinによって無視され/a/bます。

しかし、私は本当にサブディレクトリ内の.configルールを無視してファイルを追跡したいと思っています.gitignore

出来ますか?

前もって感謝します

回答:


135

あなたの質問はあまり明確ではありませんが、異なるgitignoreルールが必要なサブディレクトリがある場合は、そのディレクトリに新しい.gitignoreを作成するだけです。

あなたが持っていると言う:

プロジェクト/.gitignore
project / stuff / .gitignore

stuff /の.gitignoreは、ルートディレクトリの.gitignoreを上書きします。

git help gitignoreまたはman gitignore、何が可能かについてかなり多くの情報があります。


2
私はOPはあなたがディレクトリ構造を持っているかどうかを尋ねると思う/a/b/cとアップデート.gitignore/a/b、可能である/a/b/cのルールを無視し/a/b、代わりに唯一のルールを使用します/a
Michael Mior 2010

45
ええ、それが問題だった場合は、チェーンのさらに下流にある.gitignoreのルールを無効にすることができます。"An optional prefix ! which negates the pattern; any matching file excluded by a previous pattern will become included again."
サインイン2010

3
@signineディレクトリでは機能しません。私の答えを参照しください。
ロス・パターソン

2
私はそれを言うのがより正確だと思います:単にオーバーライドするのではなく、より高い優先度でinner .gitignoreマージしouter .gitignoreます。
user2188 6720

@eric王明らかにサブディレクトリがマージされませんが、上書き:git-scm.com/docs/gitignore
トップスピン

41

node_modulesリポジトリに含めたいが、将来のいくつかのモジュール.gitignoreには独自のものがあるとしましょう。ルート.gitignoreファイルに以下を追加することで、ルールを無効にすることができます。

# Make sure to include everything in node_modules.
!node_modules/**

3
これを行うためのより一般的な方法はありますか?私が持っているとしましょうnode_modules/mod1node_modules/mod2両方のnode_modules中にはそれらのより深い部分を無視する.gitignoreがあります(のようにnode_modules/mod1/node_modules。私はモジュールを頻繁に追加および削除するので、よく知ることができずnode_modules/mod1/.gitignore!node_modules/mod1/node_modules常に無視するルールを手動で追加するか、手動で追加します。基本的に私は、流星のアプリを展開しようとすると、すべての埋め込まれたよ.gitignores、それは不可能すべてのgitでそれを得るために作っている。
gman

10

ここでの問題の鍵は、親ディレクトリが除外されていることです。差出人$ man gitignore

そのファイルの親ディレクトリが除外されている場合、そのファイルを再度含めることはできません。Gitはパフォーマンス上の理由から除外されたディレクトリを一覧表示しないため、含まれているファイルのパターンは、それらがどこで定義されていても効果がありません。

これが私がそれを機能させる方法です。与えられた:

/a/...
/b/foo
/c/...

/.gitignore

/*
!/b

そして、/b/foo含まれるファイルのすべてながら表示されます/aと、/c除外されます。トレードオフは、ファイルを含めるディレクトリのすべての親に対して否定を追加する必要があることです。


使ってみません!/b/**/*か?
Alexis Tyler

あなたからのさらなる説明なしに応答することはできません。
ロスパターソン

6

私の知る限り、それを行う方法はありません。ローカルの.gitignoreがルートのginignoreを上書きするため、回避策は手動で追加することです。

git add --force [ your file and folder]

.gitignore親が子フォルダの設定を上書きするため、子は機能しませんでした。強制的に追加を使用git add -f myfile.txtすると、親.gitignore設定をバイパスして変更の追跡が開始されます。
SliverNinja-MSFT 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.