Git игнорировать все файлы определенного типа, кроме всех подкаталогов определенного каталога?

Я пытаюсь сделать файл gitignore, который будет игнорировать все .jar файлы, если они не находятся в папке с именем libs. Вот моя основная файловая структура:

-.gitignore 
-libs/
    -goodFile.jar
    -someFolder/
        -subFolder/
            -alsoGood.jar
-otherCode/
    -fileToExclude.jar
-otherOtherCode/
    -otherSubfolder/
        -alsoExclude.jar

В настоящее время в .gitignore я пробовал:

*.jar
!libs
!libs/
!libs/*
!libs/**
!libs/**/
!libs/**/*.jar
!libs/*.jar

Либо сами по себе, в сочетании, либо даже все вместе. Ни один из них не работает. Единственный способ, которым я нашел это, - либо вставить другой файл .gitignore в libs/ (который я бы предпочел избежать), либо использовать строку !libs/*/*/*.jar для каждого возможного уровня подкаталога. Есть ли способ заставить его игнорировать все банки, кроме тех, что есть в libs?

Ответ 1

Как насчет:

*.jar
!libs/**/*.jar

Порядок важен.

Edit Я использовал вашу структуру проекта и имел следующий результат после того, как сделал git add и git status

$ git stat
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

    new file:   .gitignore
    new file:   libs/goodFile.jar
    new file:   libs/someFolder/subFolder/alsoGood.jar
    new file:   libs/someFolder/subFolder/test/anotherFolder/test.jar



$ cat .gitignore 
*.jar
!libs/**/*.jar