zoukankan      html  css  js  c++  java
  • Git使用

    1. 背景

    前提知识:在工作目录下的每一个文件都不外乎有两种状态:已追踪(tracked),或者 未追踪(untracked)。

    在使用Git管理项目的时候,可能会用到一些文件,但是这些文件我们又不想提交到Git进行管理。

    比如

    • 忽略操作系统自动生成的文件,比如缩略图等;
    • 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
    • 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件;
    • 代码运行过程中产生的,.log文件,.html文件;

    每次提交的时候,由于这些文件尚未被Git追踪,都会提醒 Untracked files...,但是我们又不想让Git来管理这些文件。

    这篇文章就来介绍,怎么让 Git忽略掉这些文件,不再每次提醒我们。


    2. 创建.gitignore 文件

    我们在项目的根目录下,创建一个名为 .gitignore的文件。

    $ touch .gitignore
    

    列出要忽略的文件的模式。

    *.log
    .idea/**/workspace.xml
    

    第一行表示,忽略当前目录下 以及 子目录下所有的 .log文件。
    第二行表示,忽略 .idea目录下 及其子目录下,所有的 workspace.xml文件

    这样,就可以把 .gitignore文件提交到Git进行版本管理,其他人拉下来项目的时候也就自动生效了。


    3. 文件内容样式

    .gitignore文件遵循以下规范

    1. 所有空行或者以 # 开头的行都会被 Git 忽略。

    2. 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。

    3. 匹配模式可以以(/)开头防止递归。

    4. 匹配模式可以以(/)结尾指定目录。

    5. 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。

    其中所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。 遵守以下规范

    • 星号(*)匹配零个或多个任意字符;
    • [abc] 匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
    • 问号(?)只匹配一个任意字符;
    • 如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
    • 使用两个星号(//)表示匹配任意中间目录,比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等。

    一个 .gitignore的例子

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

    Note:
    有些时候,你想添加一个文件到Git,但发现添加不了,原因是这个文件被.gitignore忽略了:

    $ git add App.class
    The following paths are ignored by one of your .gitignore files:
    App.class
    Use -f if you really want to add them.
    

    如果你确实想添加该文件,可以用 -f 强制添加到Git:

    $ git add -f App.class
    

    或者你发现,可能是.gitignore写得有问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查:

    $ git check-ignore -v App.class
    .gitignore:3:*.class	App.class
    

    4. exclude文件

    exclude文件在 ,exclude文件跟 .ignore文件的效果类似,都可以忽略掉某些文件。不同点在于

    • exclude文件位于当前项目的 .git/info/exlude目录下, .gitignore文件位于 当前项目的根目录下
    • exclude文件只在本地有效,无法git add,跟别人共享, .gitignore文件可上传到Git进行版本管理

    5. gitignore 文件模板

    我们不需要自己写 .gitignore文件,以下两种方式帮你提供了

    github/gitignore

    Git官方维护了一个仓库,里面有各种语言下需要 ignore 的文件,我们只需要根据需要,自己组合一下就能用了。

    根目录下包括 主流语言的模板,通常情况下用这个就够用了。

    Global文件夹里面包括,各类的编辑器、工具以及操作系统,比如 Matlab, JetBrain, linux, VisualStudioCode。

    community文件夹里包括一些非主流的 语言、工具以及项目。

    gitignore.io

    我们的项目必须忽略的文件是由三部分构成的,操作系统 + IDE + 语言,这三种还得组合起来,以上是一个开源网站。

    比如我们目前使用的是Intellij + Java,只需要在搜索框中搜索以上关键词,就可以生成这我们需要的 .gitignore文件。

    https://www.toptal.com/developers/gitignore/api/intellij,java


    6. 参考文档

  • 相关阅读:
    拉格朗日插值
    文档 所有空格变为Tab
    windows 计算器
    map 结构体
    插入图片 图片地址
    扩展中国剩余定理
    欧拉定理、欧拉函数、a/b%c
    hdu1033Defragment
    Minimum Inversion Number_线段树||树状数组
    hdu1166敌兵布阵_线段树单点更新
  • 原文地址:https://www.cnblogs.com/hchengmx/p/15349010.html
Copyright © 2011-2022 走看看