同様の質問を見ました( 1 、 2 および)が、適切な解決策が得られません。
特定のファイルタイプを除き、特定のフォルダーの下にあるすべてのファイルを無視する必要があります。このフォルダーは、ルートパスのサブディレクトリです。フォルダーにResources
という名前を付けます。物事を複雑にしたくないので、Resources
という名前のすべてのフォルダーの下にあるファイルを無視します。
これが最も一般的なソリューションです(重複するすべての質問で)
# Ignore everything
*
# Don't ignore directories, so we can recurse into them
!*/
# Don't ignore .gitignore
!.gitignore
# Now exclude our type
!*.foo
このソリューションの問題は、新しく追加されたファイルの追跡を停止することです(*
はすべてのファイルを無視するため)。あらゆる種類のファイルを除外し続けたくありません。新しいファイルが追加された場合、git status
が表示する通常の動作が必要です。
私はついに解決策を得ました ここ 。解決策は、Resources
フォルダーに別の.gitignore
ファイルを追加することです。これは正常に機能します。
1つの無視ファイルで同じことを実現できますか?異なるディレクトリにある多くの無視ファイルが少し不格好だと思います。
これは私が達成しようとしているものです:
# Ignore everything under Resources folder, not elsewhere
Resources
# Don't ignore directories, so we can recurse into them
!*Resources/
# Now exclude our type
!*.foo
しかし、これは逆の出力になります。 *.foo
タイプを無視し、他のファイルを追跡します。
Git 1.8.2以降、Resources/** !Resources/**/*.foo
は機能します。
最良の答えは、以下を含むリソースの下にResources/.gitignoreファイルを追加することです。
# Ignore any file in this directory except for this file and *.foo files
*
!/.gitignore
!*.foo
その.gitignoreファイルを追加したくない、または追加できない場合は、洗練されていない解決策があります。
# Ignore any file but *.foo under Resources. Update this if we add deeper directories
Resources/*
!Resources/*/
!Resources/*.foo
Resources/*/*
!Resources/*/*/
!Resources/*/*.foo
Resources/*/*/*
!Resources/*/*/*/
!Resources/*/*/*.foo
Resources/*/*/*/*
!Resources/*/*/*/*/
!Resources/*/*/*/*.foo
指定したよりも深いディレクトリを追加する場合は、そのパターンを編集する必要があります。
これは愚かに見えるかもしれませんが、無視しようとしているフォルダー/ファイルをまだインデックスに追加していないかどうかを確認してください。行った場合、.gitignoreファイルに何を入れても問題ありません。フォルダ/ファイルは引き続きステージングされます。
私はそれを間違っているか、受け入れられた答えが現在のgitではもう機能しません。
私は実際に適切な解決策を見つけ、ほぼ同じ質問の下に投稿しました here 。詳細については、こちらをご覧ください。
解決:
# Ignore everything inside Resources/ directory
/Resources/**
# Except for subdirectories(won't be commited anyway if there is no commited file inside)
!/Resources/**/
# And except for *.foo files
!*.foo