Gitignore排除子​​文件夹(带** /模式),但特定的子文件夹除外

时间:2016-02-29 08:39:13

标签: git

我在这里搜索这个答案,但没有什么相似或我迷路了。我试图排除除一个文件夹以外的所有特定子文件夹。可能我可以手动完成所有路径,但我认为应该有聪明的方法。我的文件结构:

.gitignore
test/
    file1
    file2
    sim_case/
        file1
        file2
            include/
                file1
                file2

在.gitignore我有:

**/sim_case

这是排除sim_case的所有内容,但我想包含文件夹" include"。我尝试了一些变化,但没有任何效果。

!**/sim_case/include
!**/sim_case/include/
!**/sim_case/include/*
!sim_case/include/
!sim_case/include/
!sim_case/include/*

3 个答案:

答案 0 :(得分:3)

我做了很少的研究,似乎只能使用“sim_case”文件夹中的文件排除的最佳选择:

unauthorizedRedirect

这允许具有更复杂的文件结构

**/sim_case/*
!**/sim_case/include

“git status”的结果:

test/sim_case/include
test1/sim_case/include
etc.

答案 1 :(得分:2)

您的第一个假设**/sim_case是错误的。

test/sim_case/**
!test/sim_case/include/**

从字面上看,您不想忽略完整目录sim_case,而只是忽略sim_case的内容,但include目录中的文件除外。

git status建议添加sim_case目录。这样做,然后:

$ git status
On branch master

Initial commit

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

        new file:   sim_case/include/.gitignore
        new file:   sim_case/include/file1
        new file:   sim_case/include/file2

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        .gitignore
        file1
        file2

答案 2 :(得分:2)

test/sim_case/*
!test/sim_case/include

忽略目录会立即忽略该目录中的所有内容,并且git扫描会反向忽略条目并进行第一次匹配,因此最后两个条目说“忽略test / sim_case中的所有内容(但仍然扫描目录)”,test / sim_case除外/包括”。