git ignore exception


326

私はgitignoreファイルを持っているので、gitはファイルを無視し*.dllます。これが実際に私が望む動作です。ただし、例外が必要な場合(つまり、コミットできるようにする場合foo.dll)、どうすればこれを達成できますか?



fwiw、このトピックに関する重複した答えの祖父- 見直す必要があるもの-は、おそらく.gitignoreにいくつかのファイル以外のすべてを無視させる -非常に定期的なアクティビティといくつかの良い答えです。私はこの回答の特定のファンです。これは明確で完全なようです。
Kay V

回答:


447

使用する:

*.dll    #Exclude all dlls
!foo.dll #Except for foo.dll

gitignoreから:

オプションの接頭辞!これはパターンを無効にします。以前のパターンによって除外された一致するファイルは、再び含まれます。否定されたパターンが一致する場合、これは優先順位の低いパターンソースをオーバーライドします。


22
回答フォーム@Matiss Jurgelisもご覧ください-重要な追加です
Dan

7
グローバルgitignoreではなく、プロジェクトのgitignoreに例外を追加できますか?たとえば、ディレクトリにすべてのDLLを含めたい場合はどうすればよいですか?私のgitignore_globalはその*.dll中にあり、私のプロジェクトのgitignoreは!Libs/*.dllそれを持っていますが、それは機能していないようです。
Joel Kinzel、2015年

1
@jkinz、試してみてください!Libs/**/*.dll
Rosberg Linhares

@RosbergLinharesまたは!**/Libs/*.dll、フォルダー構造によって異なります。
JAB 2017

2
ありがとうございます。ただし、Macでは同じ行にコメントを追加する!foo.dllと、コマンドが無効になります。別の行にコメントを追加すると機能します。
ジャコモ

261

次のように記述した場合、Gitはフォルダーを無視します。

/js

ただし、次の場合は例外を追加できません: !/js/jqueryまたは!/js/jquery/または!/js/jquery/*

あなたは書く必要があります:

/js/* 

そうして初めて、このようなサブフォルダを除外できます

!/js/jquery

44
それは非常に重要です。ありがとうございました!
VisioN 2016年

3
ただし、ネストされたフォルダを追加できないようです。たとえば、!/js/jquery/xyzlib無視されません...
2017

2
@Ignorantが言うように、無視ルールから「除外」するフォルダーは、「*」と同じ場所にある必要があります
The Red Pea

3
そう/js/*!/js/jquery/js/jquery/*!/js/jquery/xyzlib?それを行うにはかなりおもしろい方法のように感じます...
不可解な夜

あなたは本当に私を助けました。
Loyea

55

簡単にできますgit add -f path/to/foo.dll

.gitignore 通常の追跡用のファイルのみを無視します git add .


4
詳細については、-fあなたの理由で最初に無視する可能性があるため、gitはこのファイルをリポジトリに強制的に追加するようにgitに指示します.gitignore
RPDeshaies

ファイルを1つだけ持っている場合は、パターンが必要な場合は、あまり有用偉大どちらである
リアム・


15

!除外ルールの前に追加するだけです。

gitignoreのmanページによると:

パターンの形式は次のとおりです。

...

  • オプションの接頭辞!これはパターンを無効にします。以前のパターンによって除外された一致するファイルは、再び含まれます。否定されたパターンが一致する場合、これは優先順位の低いパターンソースをオーバーライドします。


4

Visual Studioを使用していて、.dllがbinフォルダー内にある場合、.dllファイルの例外を追加する前に、特定のbinフォルダー自体の例外を追加する必要があります。例えば

!SourceCode/Solution/Project/bin
!SourceCode/Solution/Project/bin/My.dll

これは、デフォルトのVisual Studio .gitignoreファイルに無視パターンが含まれているためです[Bbin]/

このパターンは、すべてのbinフォルダー(およびその結果としてそのコンテンツ)をザッピングします。これにより、コンテンツを含める試みが冗長になります(フォルダー自体は既に無視されているため)。

実行することでファイルが除外されない理由を見つけることができました

git check-ignore -v -- SourceCode/Solution/Project/bin/My.dll

Git Bashウィンドウから。これは[Bbin]/パターンを返しました。


2

解決策は、git無視ルールと例外ルールの関係によって異なります。

  1. 同じレベルのファイル/ファイル:@Skilldrickソリューションを使用します
  2. フォルダ/サブフォルダ:@Matiss Jurgelisソリューションを使用します
  3. 異なるレベルのファイル/ファイルまたはファイル/サブフォルダー:これを行うことができます:

    *.suo
    *.user
    *.userosscache
    *.sln.docstates
    
    # ...
    
    # Exceptions for entire subfolders
    !SetupFiles/elasticsearch-5.0.0/**/*
    !SetupFiles/filebeat-5.0.0-windows-x86_64/**/*
    
    # Exceptions for files in different levels
    !SetupFiles/kibana-5.0.0-windows-x86/**/*.suo
    !SetupFiles/logstash-5.0.0/**/*.suo
    

1

Git 2.7.0以降、Gitは例外を考慮に入れます。公式リリースノートから:

  • 同じ.gitignoreファイルにある以前の "/ abc"を後の "!/ abc / def"で上書きして、 "/ abcディレクトリ内のすべてを無視する..."を簡単に表現できるようにします。

https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt


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