zoukankan      html  css  js  c++  java
  • .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}/ ${e}/* `);
      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}/ ${e}/* `);
      return arr.join("") + trail;
     })("/1st/2nd/tgt")
    /*
      Output:
      !/1st/
      /1st/*
      !/1st/2nd/
      /1st/2nd/*
      !/1st/2nd/tgt
    */


    参考链接

  • 相关阅读:
    VS2008环境下的Freeglut 2.6.0配置
    Qt Creator and Clang
    qml 4.8 bug: ListView.view不能访问
    Qt platform mkspecs
    未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序
    SSIS学习之数据挖掘
    SQL循环执行while控制
    SQL Server查询优化50法
    SSAS使用时间智能解决本年累计、同比、环比【转载】
    企业信息门户:EIP系统
  • 原文地址:https://www.cnblogs.com/Excr/p/12588385.html
Copyright © 2011-2022 走看看