ドットのないファイル(拡張子のないすべてのファイル)をgitignoreファイルに追加するにはどうすればよいですか?


110

タイトルが言うように、gitignoreファイルに「ドットのないファイル」を追加することは可能ですか?

これで、これらの煩わしい拡張子のないファイルがすべて処理されると思います。


2
そこは無視したくないことを、いくつかの拡張子のファイルは、次のとおりです。READMELICENSEまたはCOPYINGINSTALLMakefileなど、あなたがいつでもできますが、それらを強制的に追加し、それらが追跡される
ヤクブNarębski

@JakubNarębski良い点。もっと見やすくするために、それを私の回答に含めました。
VonC 2013

回答:


121

次のような組み合わせを試すことができます。

*
!/**/
!*.*

このgitignore除外ルール否定パターン)では、拡張子のあるファイルを除くすべてのファイルを無視する必要があります。

前述のように、以下のことでマッド物理学者、ルールは次のとおりです。

そのファイルの親ディレクトリが除外されている場合、ファイルを再インクルードすることはできません。*
*:git 2.?+で特定の条件が満たされていない限り、以下を参照)

そのため!/**/、ファイルをホワイトリストに登録する場合は、親フォルダーを再帰的にホワイトリストに登録することが重要です。

私は同じルールを次のような同様のケースで述べました:


以下のようヤクブNarębskiの コメント、あなたは無視したくない場合がありますすべての拡張子のファイルを。

私のアドバイス:

  • 重要な拡張子のないファイルを最初に追加します
  • 次に、.gitignore上記のように編集します。既にバージョン管理されているファイルは無視されません(拡張子がない場合でも)。他のすべては無視されます。

バージョン管理したい将来の拡張子のないファイルの場合:

git add -f -- myFile

git 2.9.x / 2.10(2016年半ば?)では、再インクルードされたパスにワイルドカードがない場合、そのファイルの親ディレクトリが除外されていれば、ファイルを再インクルードできる可能性があることに注意してください。

NguyễnTháiNgọcDuy(pcloudsがこの機能を追加しようとしています:

ただし、再包含のルールの1つは次のとおりでした。

再組み込みルールのディレクトリ部分は、リテラルでなければなりません(つまり、ワイルドカードは使用できません)。

これはとにかくここではうまくいかなかったでしょう。


1
答えは完全に正しいです。しかし、おそらくより良い.gitignoreだろう**!**.*。アスタリスクが前に配置されている場合、これは違いを生じないことはわかっていますが、シェルがワイルドカードを処理する方法でより明確で適切です...
Willem Van Onsem

7
注:他の除外ルールを使用するには、これが.gitignoreファイルの最初のルールセットである必要があります
Erik

特定の拡張子のないファイルを再インクルードすることもできます(例:)!Makefile。Git 1.7.1ではこのソリューションで問題が発生しましたが、1.9.0では問題なく機能したことに注意してください。私の場合、ルートディレクトリにファイルを追加しても問題はありませんでしたが、サブディレクトリ内に拡張子が付いたファイルを追加すると、無視されるように表示されました。これは、1.7.1 **がまだパターンをサポートしていないためと思われますここを参照してください
mxmlnkn 2018年

1
**Gitで追加されました1.8.2。の!*/代わりに使用することに不利な点はあります!/**/か?
mxmlnkn 2018年

@TamaMcGlinn正規表現のように見えます:gitignoreは正規表現をサポートしていません。
VonC、2018年

50
*
!*/
!*.*

* すべてを無視するようにgitに指示します。

!*/次に、ディレクトリであるものをすべて無視します。これは非常に重要です。

!*.* 拡張子を持つすべてのファイルを無視します。

なければ!*/、ルール、なしのディレクトリ.名には表示されませんと、ご希望のファイルのどれも、ルートフォルダの外に追加されないであろう。

参考として、.gitignoreドキュメントの次の2つのセクションを読んでください。

オプションの接頭辞「!」これはパターンを無効にします。以前のパターンによって除外された一致ファイルは、再び含まれます。そのファイルの親ディレクトリが除外されている場合、ファイルを再インクルードすることはできません。Gitはパフォーマンス上の理由で除外されたディレクトリをリストしません。そのため、含まれているファイルのパターンは、それらが定義されている場所に関係なく、効果がありません。最初の "!"の前にバックスラッシュ( "\")を置きます たとえば、「!important!.txt」など、リテラル「!」で始まるパターンの場合。

パターンがスラッシュで終わっている場合は、以下の説明のために削除されますが、一致するのはディレクトリのみです。つまり、foo /は、ディレクトリfooおよびその下のパスと一致しますが、通常のファイルまたはシンボリックリンクfooとは一致しません(これは、Gitでのpathspecの一般的な動作方法と一致します)。


1
良いキャッチ。+1。私が最近他の鉱山の回答で使用したルールで回答を更新するのを忘れていました。私はそれに応じて私の答えを更新しました。
VonC、2015

0

私のフォルダには、*.c, *.h, *.txt, *.csv拡張子がetc. のファイルや拡張子のないバイナリファイルがたくさんあります。だから私はすべてのファイルexecpt *.c,*.hとを無視する必要があった.gitignoreので、.gitignore例からこれは私にとってはうまくいきます:

 */*         #ignore all files in each directory
 !*/*.c      #unignore .c files in each directory
 !*/*.h      #unignore .h header files in each directory
 !.gitignore #unignore .gitignore
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.