.gitignore如何忽略目录中的第一级文件但不忽略子文件?

时间:2015-09-19 11:06:38

标签: git gitignore

如果您的文件结构类似于?

var black = [0, 0, 0, 255];
var white = [255, 255, 255, 255];
var colors = [black, white];

function fillImageData(imgData, rgba) { //fills the image data with one color
    var i;
    for (i = 0; i < imgData.data.length; i += 4) {
    imgData.data[i+0] = rgba[0];
    imgData.data[i+1] = rgba[1];
    imgData.data[i+2] = rgba[2];
    imgData.data[i+3] = rgba[3];
    }
    return imgData;
}

var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var imgData = ctx.createImageData(100, 100);

var choice = Math.round(Math.random()); //picks 0 or 1 as the index

imgData = fillImageData(imgData, colors[choice]);

ctx.putImageData(imgData, 10, 10);

如何忽略foo ├── bar │   ├── file1.coffee │   ├── file2.coffee │   └── file3.coffee ├── file1.js ├── file2.js └── file3.js 目录中的第一级文件(foofile1.jsfile2.js)但不要忽略file3.js目录中的所有内容({ {1}},barfile1.coffee

提供结构保持相同/相似,但文件名和扩展名当然会有所不同。

是否可以在没有每个目录拥有自己的.gitignore和白名单的情况下执行此操作?文档似乎没有提到如何实现这一目标。

1 个答案:

答案 0 :(得分:5)

使用*作为第一条规则也会忽略文件夹,并且:

  

It is not possible to re-include a file if a parent directory of that file is excluded. *
  (*:除非在git 2.?+中满足某些条件,请参见下文)

因此,在忽略第一级后,您需要将文件夹列入白名单 然后,您将列出白名单文件夹下方的所有内容列入白名单:

*
!*/
!*/**

或者,使用Sven Marnach的变体,使用仅定位到第一级文件和文件夹的/*

/*
!*/

请注意,使用git 2.9.x / 2.10(2016年中期?),如果排除该文件的父目录if there is no wildcard in the path re-included,则可能会重新包含文件。

Nguyễn Thái Ngọc Duy (pclouds)正在尝试添加此功能:

然而,由于重新加入的条件之一是:

  

重新包含规则中的目录部分必须是文字(即没有通配符)

除非我们只谈论foo和bar文件夹,否则无论如何都不会在这里工作:

foo/
!foo/bar