web-dev-qa-db-ja.com

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

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

*
!bin/*

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

助言がありますか?

195
Michael Goerz

これにより、ルートファイルとルートディレクトリが無視され、ルートbinディレクトリが無視されなくなります。

/*
/*/
!/bin/

これにより、サブディレクトリとそのファイルを含むすべてのbinディレクトリを取得できます。

258
Tyler Laing

ここでは、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
95

宛先への途中のすべてを除外する必要がありますが、宛先を含める必要があります。

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

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

唯一の問題は、binディレクトリ自体がbin/*パターンと一致しないため、gitはbinディレクトリを見ることさえできないことです。

思い浮かぶ2つの解決策があります。

.gitignore

*
!/bin/
!bin/*

または

.gitignore

*
!/bin/

bin/.gitignore

!*

最初のソリューションは、binと呼ばれないサブディレクトリにあるbinディレクトリ内のファイルを無視しなくなるので、2番目のソリューションを好みます。これは、状況によっては問題になる場合と問題にならない場合があります。

38
CB Bailey

公式の git doc から、例の1つは言います:

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

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

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

18
solstice333

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

*
!*/
!/path/to/your/dir/**
12
Kirby

パターンをスラッシュで開始することにより、各パターンを最上部のgitディレクトリに固定する方が良いと思います。

/*
!/public_html
!/.gitignore

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

11
Jake

この.gitignoreは私のために働く:

*/
/*
!bin/
7
Trianam

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

!bin**/**

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

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

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

5
david