当前位置 博文首页 > 第七宇林的博客:git之.gitignore文件详解

    第七宇林的博客:git之.gitignore文件详解

    作者:[db:作者] 时间:2021-09-17 12:32

    参考:git-book

    一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表

    通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件的模式。

    .gitignore文件的作用总结

    .gitignore文件用来忽略被指定的文件或文件夹的改动,被记录在.gitignore文件里的文件或文件夹,是无法被git跟踪到的,即被忽略的文件是不会被放入到远程仓库里的。如果文件已经存在于远程仓库中,是无法通过.gitignore文件来忽略的。

    .gitignore文件的创建

    .gitignore 文件存放于git仓库的根目录下。

    linux / mac 下在命令行创建/删除 .gitignore 文件命令如下:

    touch .gitignore # 新建
    rm -f .gitignore # 删除
    

    windows 系统 win10 以前的版本可能无法直接用视图菜单创建/删除以 . 号开头的文件,需要在命令行操作:

    :: 创建
    TYPE NUL>.gitignore
    :: 删除
    DEL /F .gitignore
    

    .gitignore 文件的格式规范(语法)

    • 所有空行或者以 # 开头的行都会被 Git 忽略。
    • 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
    • 匹配模式可以以(/)开头防止递归。
    • 匹配模式可以以(/)结尾指定目录。
    • 以叹号!表示不忽略(跟踪)匹配到的文件或目录。

    glob 模式是指 shell 所使用的简化了的正则表达式。

    1. 星号(*)匹配零个或多个任意字符;
    2. 问号(?)只匹配一个任意字符;
    3. [ ]表示匹配中括号内的单个字符:
      (1) [abc] 要么匹配一个 a,要么匹配一个 b,要么匹配一个 c
      (2) 可以使用-来表示连贯的字符,比如0-9a-zA-Z等,[0-9]表示匹配从0到9的单个字符。
      (3) 可以使用^来表示除外,比如[^0-9]表示除0到9之外的单个字符。
    4. 使用两个星号(**)表示匹配任意中间目录,比如 a/**/z 可以匹配 a/za/b/za/b/c/z 等。

    .gitignore 文件示例

    # 忽略所有的 .a 文件
    *.a
    
    # 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
    !lib.a
    
    # 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
    /TODO
    
    # 忽略任何目录下名为 build 的文件夹,等价于 build/*.*
    build/
    
    # 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
    doc/*.txt
    
    # 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
    doc/**/*.pdf
    

    .gitignore文件使用的注意事项

    1. 在首次提交正式数据前,先创建提交 .gitignore 文件到本地库(再推送到远程库)。
      注意: 在git早期版本中,只有先提交 .gitignore 文件到本地库后,才能对提交的正式数据采用过滤规则(在 git2.+ 以上版本中无需先提交.gitignore 文件,只要保证在首次添加/提交正式数据前 .gitignore 文件已存在且设置好过滤规则,但为了标准化 git 的操作,建议先提交推送 .gitignore 到远程库)。
    2. 对在添加 .gitignore之前,已提交到本地库(或推送到远程库的数据),不会受到过滤规则的影响。
      因而必须先提交、推送 .gitignore
    3. 在提交、推送 .gitignore 之后,需要更新它的过滤规则,必须先修改/提交/推送到远程库后,再提交正式数据,防止不必要的数据的提交。
    (完)
    cs
    下一篇:没有了