サブディレクトリ以外をすべて無視するようにGitに指示するにはどうすればよいですか?


218

binサブディレクトリにあるファイルを除いて、リポジトリ内のすべてのファイルを無視したい。私に次のものを追加してみました.gitignore

*
!bin/*

ただし、これでは望ましい効果は得られません。の内部に新しいファイルを作成しましたbin/が、git statusまだ表示されていますnothing to commit (working directory clean)

助言がありますか?


回答:


273

これはルートファイルとルートディレクトリを無視し、次にルートbinディレクトリを無視します。

/*
/*/
!/bin/

この方法で、サブディレクトリとそのファイルを含むすべてのbinディレクトリを取得します。


25
何らかの理由で、これは私にとって一貫して機能しません。私は2行/stuff/とを持っていますが、!/stuff/specific/それでも/ stuff / specific /を無視します
LB-- 2013年

1
@ LB--同様の問題があり、git check-ignore -vそれが原因であると言われました~/.gitignore
ガーニー

@gurneyalexローカルリポジトリを削除して再クローンすると、問題が解決することを発見しました。
LB-- 2014

2
/ * /は必要ですか?
Alex Baker

3
これは私にはうまくいきませんでした。!/bin/ルート.gitignoreファイルに追加する必要がありましたが、さらに...で/bin/.gitignoreファイルを追加する必要!*がありました。これらの変更の1つだけを実行しても機能しませんでした。両方の変更を組み合わせた後にのみ機能しました。
フェリペブラーム2016年

113

ここで、いくつかのディレクトリの1つのディレクトリ「MY_SUPER_DUPER_TEMPLATE_directory」を除いてすべてを無視する方法

構造:/ bitrix / templates / MY_SUPER_DUPER_TEMPLATE_directory

/*
!/bitrix
/bitrix/*
!/bitrix/templates
/bitrix/templates/*
!/bitrix/templates/MY_SUPER_DUPER_TEMPLATE_directory
*.DS_Store
*.gitignore

1
これは、私が変更したlaravelベンダーパッケージを無視しないことに驚かされました。ありがとう、あなたは私に多くの頭痛の種を救いました
マリア・ヴィラロ

これがベストアンサーとして選択されます。
バーマンA 19/06/26

63

目的地に向かう途中ですべてを除外する必要がありますが、目的地を含める必要があります。

注:これは除外ファイル(つまり.gitignore)であるため、ロジックが逆になります。tspディレクトリ以外のすべてを無視、srcディレクトリ以外のtspディレクトリ内のすべてを無視...

/*
!/tsp
/tsp/*
!/tsp/src
/tsp/src/*
!/tsp/src/*.h
!/tsp/src/*.cpp
!/tsp/src/data.txt
!/.gitignore

11
ディレクトリを含める、その内容を除外する、次に目的のサブディレクトリを含めるなどの原則で+1。プロジェクトでこの回答を使用しました。
ジョンジーザス

40

あなたが持っている唯一の問題は、binディレクトリ自体がbin/*パターンと一致しないため、gitがbinディレクトリを調べないことです。

思い浮かぶソリューションは2つあります。

.gitignore

*
!/bin/
!bin/*

または

.gitignore

*
!/bin/

bin/.gitignore

!*

最初の解決策binは、呼び出されないサブディレクトリにあるディレクトリ内のファイルを無視することを止めないので、私は2番目の解決策を好みますbin。これは、状況によっては問題にならない場合があります。


2
私のために働いていませんでした。これを機能させるには、次のような.gitignoreが必要 # Ignore everything * # But not these files... !/wp-content/ !/wp-content/plugins/ !/wp-content/plugins/my_plugin/ !/wp-content/plugins/my_plugin/* です。コメントにブロックコードがありませんか?
xlttj

1
タイラーの答えは、単一ファイルソリューションの方が優れています
Yarin

19

公式のgit docから、例の1つは次のように述べています。

特定のディレクトリfoo / barを除くすべてを除外する例(/ *に注意してください-スラッシュなしでは、ワイルドカードもfoo / bar内のすべてを除外します):

$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar

先頭のスラッシュに関する説明:gitignoreで先頭のスラッシュを使用する場合


100万人ありがとう、これは私のために働いた!ここでの行の順序が重要であることに注意してください。たとえば、/ foo / *の前に!/ foo / barを置くことはできません。
Iamsodarncool

13

最新のGITバージョンでフォローしてみてください。

*
!*/
!/path/to/your/dir/**

実際には、最終行は!/ path / to / your / dir / **になります
faham

@faham、うん、追加したばかりだ。
Kirby

11

より良い方法は、スラッシュでパターンを開始することにより、各パターンを最上位のgitディレクトリにアンカーすることです:

/*
!/public_html
!/.gitignore

すべてのファイルを無視する代わりに、無視したくないディレクトリ内のファイルではなく、最上位のファイルのみを無視します。



5

このあいまいなgitバグを試してください。

!bin**/**

それが役に立てば幸い :)

サポートドキュメントgitバグサンプル

PS:コメントする前にまず試してください。


0

私は最近これをしなければなりませんでした:

*
!sub-dir/
!sub-dir/*

1つのフォルダーを除外するために2行が必要な理由はわかりませんが、これは私とmacosで機能したものです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.