【问题标题】:Git ignore all files of a certain type except in all subdirectories of a certain directory?Git忽略特定类型的所有文件,除了某个目录的所有子目录?
【发布时间】:2014-03-20 15:22:35
【问题描述】:

我正在尝试创建一个 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 行。有没有办法让它忽略除了库中的所有罐子?

【问题讨论】:

    标签: git gitignore


    【解决方案1】:

    怎么样:

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

    顺序很重要。

    编辑 我使用了您的项目结构并在执行git addgit 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
    

    【讨论】:

    • 我已经尝试过了,但它仍然会忽略任何不在 libs/ 中直接位于子文件夹中的 .jar。
    • 你确定。我刚刚用你建议的结构试了一下,效果很好
    • 好的,如果它是一个子目录,它会捡起它,但我需要包含的大多数罐子都是 4 或 5 层深。那些没有被捡起来。
    • 还要检查您的 .git/info/exclude 文件以查找可能的隐藏排除项。
    • 这行得通。原来问题是我的 git 版本。我运行的是 1.7,仅在 1.8 中添加了对“**”的支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 2011-11-26
    • 1970-01-01
    相关资源
    最近更新 更多