.gitignore排除(不忽略)二级以上目录下的文件或目录
在.gitignore中,结合使用/*
和!filename
的语法,可以达到除特定文件或目录外全部忽略的目的。但当希望不忽略的文件或目录在二级或多级目录下时,如果这样写
/*
!/sub/subsub/
是不能达到预期效果的,这会导致根目录下的全部文件被忽略,包括/sub/subsub/。因为.gitignore语法中,!filename
只能对同级的/*
生效,因此如果要在根目录中排除多级目录中的文件,需要重复地指明每一级目录的忽略规则。下面以忽略根目录中的全部文件,但不忽略/1st/2nd/目录中的tgt文件为例:
/*
!/1st/2nd/tgt #Wrong! Still ignored.
/*
!/1st/
/1st/*
!/1st/2nd/
/1st/2nd/*
!/1st/2nd/tgt
#Correct! Specify rules for each directory.
当目录变得足够深,或者这样的目录很多时,可以预料编写.gitignore的工作会变得极其繁复而易错。为此,我写了一段Javascript脚本以自动化这一流程:
str => {
let arr = str.split("/");
arr = arr.map((e, i) => arr.slice(0, i+1).join("/"));
arr.shift();
const trail = `!${arr.pop()}`;
arr = arr.map(e => `!${e}/\n${e}/*\n`);
return arr.join("") + trail;
}
使用示例:
(str => {
let arr = str.split("/");
arr = arr.map((e, i) => arr.slice(0, i+1).join("/"));
arr.shift();
const trail = `!${arr.pop()}`;
arr = arr.map(e => `!${e}/\n${e}/*\n`);
return arr.join("") + trail;
})("/1st/2nd/tgt")
/*
Output:
!/1st/
/1st/*
!/1st/2nd/
/1st/2nd/*
!/1st/2nd/tgt
*/
.gitignore排除(不忽略)二级以上目录下的文件或目录的更多相关文章
- 9.proc目录下的文件和目录详解
1./proc目录下的文件和目录详解 /proc:虚拟目录.是内存的映射,内核和进程的虚拟文件系统目录,每个进程会生成1个pid,而每个进程都有1个目录. /proc/Version:内核版本 /pr ...
- 8.var目录下的文件和目录详解
1./var目录下的文件和目录详解. /var (该目录存放的是不断扩充且经常修改的目录,包括各种日志文件或者pid文件,存放linux的启动日志和正在运行的程序目录(变化的目录:一般是日志文件,ca ...
- python_自动查找指定目录下的文件或目录的方法
代码如下 import os def find_file(search_path, file_type="file", filename=None, file_startswith ...
- Golang获取目录下的文件及目录信息
一.获取当前目录下的文件或目录信息(不包含多级子目录) func main() { pwd,_ := os.Getwd() //获取当前目录 //获取文件或目录相关信息 fileInfoList ...
- C#递归搜索指定目录下的文件或目录
诚然可以使用现成的Directory类下的GetFiles.GetDirectories.GetFileSystemEntries这几个方法实现同样的功能,但请相信我不是蛋疼,原因是这几个方法在遇上[ ...
- 6.etc目录下重要文件和目录详解
1./etc/下的重要的配置文件 /etc(二进制软件包的 yum /rpm 安装的软件和所有系统管理所需要的配置文件和子目录.还有安装的服务的启动命令也放置在此处) /etc/sysconfig/n ...
- AIX查询当前目录下各文件及目录大小
AIX下要查询某个目录下各个文件或目录的占用空间大小 可以对du命令增加一个别名alias 放在~/.profile里 alias dus='du -sg ./* |sort' s表示文件和目录都是显 ...
- 将二级目录下的文件合并成一个文件的Python小脚本
这个小程序的目的是将二级目录下的文件全部合并成一个文件(其实几级目录都可以,只要做少许改动) #coding:utf8 import sys, os def process(path): new_fi ...
- linux find-在指定目录下查找文件
推荐:更多Linux 文件查找和比较 命令关注:linux命令大全 find命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则find ...
随机推荐
- react动态添加多个输入框
let obj = {} result.forEach(item =>{ obj[item.eleId] = item }) setFieldsValue(obj)
- python Post 登录 cookies 和session
def post_name(): print('\npost name') # http://pythonscraping.com/pages/files/form.html data = {'fir ...
- http 详解
HTTP协议中GET.POST和HEAD的介绍 GET: 请求指定的页面信息,并返回实体主体. HEAD: 只请求页面的首部. POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体 ...
- JavaScript 核心学习——继承
本篇博文讲述如何在 JavaScript 中实现继承,以及原型与原型链的知识,在附录中将会讲述 JavaScript 面向对象的常见错误. ##原型与原型链在 JavaScript 中,使用类将会付出 ...
- 利用机器学习检测HTTP恶意外连流量
本文通过使用机器学习算法来检测HTTP的恶意外连流量,算法通过学习恶意样本间的相似性将各个恶意家族的恶意流量聚类为不同的模板.并可以通过模板发现未知的恶意流量.实验显示算法有较好的检测率和泛化能力. ...
- iOS开发日常笔记01
为什么有initWithCoder还要awakeFromNib? awakeFromNib相较于initWithCoder的优势是:当awakeFromNib执行的时候,各种IBOutlet也都连接好 ...
- 解决oninput事件在中文输入法下会取得拼音的值的问题
在做搜索等功能时,很多时候我们需要实时获取用户输入的值,而常常会得到类似 w'm 这样的拼音.为了解决这个问题,我在网上搜索了下相关问题,发现了两个陌生的事件:compositionstart 和 c ...
- sublime Text3 前端常用插件
sublime Text3 前端常用插件 - File Switching (文件切换) --- Sublime Text提供了一个非常快速的方式来打开新的文件.只要按下Ctrl+ P并开始输入你想要 ...
- js中的内置方法的兼容写法
1.如果浏览器不支持every属性,every的实现原理 if(Array.prototype.every===undefined){ Array.prototype.every=function(f ...
- 最适合初学者的一篇 Ribbon 教程
什么是 Ribbon Ribbon 是一个基于 HTTP 和 TCP 的 客服端负载均衡工具,它是基于 Netflix Ribbon 实现的. 它不像 Spring Cloud 服务注册中心.配置中心 ...