码迷,mamicode.com
首页 > 其他好文 > 详细

.gitignore排除(不忽略)二级以上目录下的文件或目录

时间:2020-03-28 18:16:19      阅读:41      评论:0      收藏:0      [点我收藏+]

标签:for   ignore   ice   工作   生效   let   wro   nbsp   com   

在.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排除(不忽略)二级以上目录下的文件或目录

标签:for   ignore   ice   工作   生效   let   wro   nbsp   com   

原文地址:https://www.cnblogs.com/Excr/p/12588385.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!