美文网首页
工作区域、文件状态及忽略文件

工作区域、文件状态及忽略文件

作者: 一江碎月 | 来源:发表于2017-08-26 12:39 被阅读0次

    工作区域

    使用 Git 管理项目时,有三个工作区域:工作区间、Git 本地仓库以及暂存区

    1. 工作区间:存储从项目中提取出的某个版本的所有文件和目录,用以后继工作的目录叫工作目录。简单点说,就是存放平时工作时文件的目录

    2. 暂存区:只是一个清单文件,用以列出下次提交时要提交的文件的清单。

      • 可以通过 git ls-files -s 查看暂存区中的文件。
    3. Git 本地仓库:工作目录中的 .git 文件夹。


    文件状态

    git库中文件状态

    任何一个文件,在 git 内都只有三种状态:已提交(Commited),已修改(modified)和已暂存(Staged)

    1. 已提交表示该文件已提交至本地仓库,也叫 Unmodified 状态;

    2. 已修改指修改了某个文件,还未保存至暂存区;

    3. 已暂存表示将已修改过的文件保存至暂时区中,尚未提交到本地仓库。

    工作目录下的文件状态

    工作目录下的文件状态分为两种:已跟踪与未跟踪。注意它和 git 库中文件状态的区别:后者只是已跟踪下的不同状态。

    1. 未跟踪:既没有上次更新时的快照,也不在当前的暂存区中。可以简单理解为新建的文件。

    2. 已跟踪:除了未跟踪的文件,其余的都是已跟踪的。

    3. 初始 clone 某远程库后,所有的文件都属于已跟踪文件,且处于未修改状态。

    4. 修改某文件后,会将该文件标记为已修改。再通过 add 命令将这些文件添加到暂存区,最后通过 commit 命令一次性提交暂存区中所有文件,此时文件恢复到未修改状态。

    状态转换

    1. untracked 状态通过 git add 命令变为未修改状态,同时文件会被添加到暂存区中;

    2. modified 状态的文件,通过 git add 命令后会被添加到暂存区中;

    3. 通过 git commit 命令将暂存区中的文件添加到本地仓库中,所有文件又变成 unmodified 状态。


    忽略文件

    有些文件,既不想总出现在未跟踪文件列表中,也不想纳入到 Git 管理中,我们希望的是:Git 能忽略这些文件。对 Git 来说,这些文件就像根本不存在一样。这些文件就是我们需要忽略的。

    1. 忽略文件名必须为 .gitignore

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

    3. 匹配模式最后跟 / ,说明要忽略的是文件夹

    4. 在模式前加 ! 表示对该模式取反,即不忽略该模式可以匹配的文件

    5. 匹配模式可以以 / 开头表示只忽略当前目录下满足条件的文件,不会忽略子目录下满足条件的文件。

    6. 可以使用标准的 glob 模式进行匹配——glob 模式就是简化版的正则表达式。

    7. * 可以匹配零个或多个任意字符,即匹配任意的字符串。而不是正则中的表示某个字符出现 0 次或多次。如 *.a 就表示忽略所有以 .a 结尾的文件,不管文件名是几个字符。

    8. ? 只能匹配一个任意的字符。而不是正则表达式中的表示某个字符出现 0 次或 1 次。如 ?.txt 表示只忽略文件名为一个字符的 txt 文件,而不会忽略文件名为 2 个或 2 个以上字符的

    9. 使用两个星号(*)表示匹配任意中间目录,比如 a/**/z 可以匹配 a/z, a/b/za/b/c/z等。

    下面是来自于文档的示例

    # no .a files 忽略所有 .a 文件
    *.a
    
    # but do track lib.a, even though you're ignoring .a files above。但不忽略所有 lib.a 文件。
    !lib.a
    
    # only ignore the TODO file in the current directory, not subdir/TODO。忽略当前目录下的 TODO 文件,但不忽略子目录下的。
    /TODO
    
    # ignore all files in the build/ directory。忽略所有的 build 文件夹,无论是当前目录还是子目录。
    build/
    
    # ignore doc/notes.txt, but not doc/server/arch.txt。忽略 doc 目录下的 txt 文件,但不忽略其子目录下的。
    doc/*.txt
    
    # ignore all .pdf files in the doc/ directory。忽略 doc 目录下的 pdf 文件,包括子目录中的。
    doc/**/*.pdf
    

    相关文章

      网友评论

          本文标题:工作区域、文件状态及忽略文件

          本文链接:https://www.haomeiwen.com/subject/muymdxtx.html