Git ignore all files of a certain type except in all subdirectories of a certain directory?

StackOverflow https://stackoverflow.com/questions/22537528

  •  18-06-2023
  •  | 
  •  

I'm trying to make a gitignore file that will ignore all .jar files unless they're in a folder called libs. Here's my basic file structure:

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

Currently in .gitignore I've tried:

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

Either on their own, in combination, or even all together. None of them work. The only way I've found to do it is to either put in another .gitignore file into libs/ (which I would prefer to avoid) or use a !libs/*/*/*.jar line for every possible level of subdirectory. Is there a way to make it ignore all jars except the ones in libs?

有帮助吗?

解决方案

How about:

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

The order is important.

Edit I used your project structure and have the following output after I did a git add and 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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top