代码之家  ›  专栏  ›  技术社区  ›  camino

.gitignore subdir/*和subdir/之间有什么区别?

git
  •  3
  • camino  · 技术社区  · 8 年前
    test/test/build64/ALL_BUILD.vcxproj
    

    使用以下模式忽略上面的文件:

    build64/ 
    

    但是,下面的模式不起作用。

    build64/*
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   torek    8 年前

    关键的区别在于 build64 没有斜线。

    build64/ build64/* 有一个斜杠,但是 构建64 有一个斜线,这就是所有的区别。

    看一看 the gitignore documentation 图案格式 . 请注意以下要点:

    • 如果图案以斜线结尾,则出于以下描述的目的将其删除。。。

    但关键是 构建64/ 先删除它的结束斜杠,这样它就不再有斜杠了。所以呢 现在 ,如果Git遇到一个名为 test/test/build64/ALL_BUILD.vcxproj 文件名组件

    • test 在里面 test/test );
    • (第二个) 测试 在里面 );
    • ;和
    • ALL_BUILD.vcxproj

    任何人 这四个组成部分中 构建64 比赛 构建64 有一个后缀斜杠,所以是组件a 目录 测试/测试/构建64/全部_构建.vcxproj 被规则忽略 构建64/ ,它不包含斜杠,但结尾的斜杠不计算在内。

    另一方面,如果你写 构建64/* ,吉特 删除斜杠,使图案包含斜杠。Git分解了全名 和以前一样,但这次,它要求 全部的 这些名称组件与 完整图案 . 做 全部四个 组件的名称匹配 构建64/* ? 好, 构建64/* 开始于 构建64 测试 不匹配 所以整个比赛马上就失败了。

    test/test/build64/* .gitignore 行,Git会匹配的 测试/测试/构建64/全部_构建.vcxproj 反对 . 现在是第一部分 测试 必须匹配 测试 测试 当然,它也可以。第三个组件必须匹配 构建64 最后一部分, 全部_构建.vcxproj ,必须匹配 * . 所有这些要求都满足了,所以 选择该文件以使Git闭嘴不说未跟踪的内容。

    **/build64/* ,因为 ** 比赛 任何数量的 测试/测试/构建64/全部_构建.vcxproj build64/file , fred/build64/wilma fred/wilma/build64/betty . 注意它会 比赛 fred/wilma/build64/barney/betty barney/betty 组件太多,但如果与目录匹配 fred/wilma/build64/barney 里面 fred/wilma/build64/barney/ 寻找 betty

    无论如何,重要的是要记住shell样式匹配已经完成 一次一个文件名组件 **

    为了

    决定是使用“所有必须匹配”还是“只有一个必须匹配”规则。