uTools-Manuals/docs/git/gitignore.html
2019-04-08 23:22:26 +08:00

23 lines
11 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="c-markdown doc-markdown"><div class="doc-postil"><div class="c-markdown"><h2>名称</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>gitignore  - 指定忽略有意未被跟踪的文件</p></div></div><div class="doc-postil"><div class="c-markdown"><h2>概要</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>$HOME/.config/git/ignore, $GIT_DIR/info/exclude, .gitignore</p></div></div><div class="doc-postil"><div class="c-markdown"><h2>描述</h2></div></div><div class="doc-postil"><div class="c-markdown"><p><code>gitignore</code>文件指定 Git 应该忽略的故意未记录的文件。Git 已经跟踪的文件不受影响; 有关详细信息,请参阅下面的注释。</p></div></div><div class="doc-postil"><div class="c-markdown"><p><code>gitignore</code>文件中的每一行都指定一个模式。在决定是否忽略路径时Git 通常会检查<code>gitignore</code>来自多个来源的模式,并按以下优先级顺序从高到低(在一个优先级内,最后一个匹配模式决定结果):</p></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>从命令行为支持它们的命令读取模式。</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>从与<code>.gitignore</code>文件路径相同的目录或任何父目录中的文件中读取模式时,高级文件中的模式(直到工作树的顶层)被低层文件中的模式覆盖到包含文件。这些模式相对于<code>.gitignore</code>文件的位置相匹配。项目通常<code>.gitignore</code>在其存储库中包含这些文件,其中包含作为项目构建的一部分生成的文件的模式。</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>模式读取<code>$GIT_DIR/info/exclude</code></p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>模式从配置变量指定的文件中读取<code>core.excludesFile</code></p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><p>放置模式的文件取决于模式的使用方式。</p></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>应该通过克隆版本控制并分发到其他存储库的模式(即,所有开发人员都希望忽略的<code>.gitignore</code>文件)应该放入文件中。</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>特定于特定存储库但不需要与其他相关存储库共享的模式(例如存储在存储库内但是特定于一个用户工作流的辅助文件)应该放入该  <code>$GIT_DIR/info/exclude</code>文件中。</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>用户希望 Git 在所有情况下都忽略的模式(例如,由用户选择的编辑器生成的备份或临时文件)通常会进入<code>core.excludesFile</code>用户指定的文件<code>~/.gitconfig</code>。它的默认值是 $ XDG_CONFIG_HOME / git / ignore。如果 $ XDG_CONFIG_HOME 未设置或为空,则使用 $ HOME / .config / git / ignore。底层 Git 管道工具(例如<code>git ls-files</code><code>git read-tree</code>)读取<code>gitignore</code>由命令行选项指定的模式或从命令行指定的文件选项。更高级的 Git 工具,比如<code>git status</code><code>git add</code>,使用来自上面指定源的模式。模式格式</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>空白行不匹配任何文件,因此它可以作为可读性的分隔符。</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p> 开始的行作为评论。将<code>\</code>第一个散列前面的反斜杠(“ ”)放在以散列开头的模式中。</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>尾部空格被忽略,除非用反斜杠(“ <code>\</code>”)引用。</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>可选的前缀“ <code>!</code>”,否定模式; 任何先前模式排除的匹配文件将再次包含在内。如果排除该文件的父目录则不可能重新包含文件。由于性能原因Git 没有列出排除的目录,因此无论它们被定义在何处,包含文件的任何模式都不起作用。将反斜杠(“ <code>\</code>”)放在第一个“ <code>!</code>”之前,以“ <code>!</code>” 开头的模式,例如“ <code>\!important!.txt</code>”。</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>如果模式以斜杠结尾,则为了以下描述的目的将其删除,但它只会与目录找到匹配项。换句话说,<code>foo/</code>它将匹配一个目录<code>foo</code>和它下面的路径,但不匹配一个常规文件或符号链接<code>foo</code>这与在Git中通常如何工作的方式一致</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>如果模式不包含斜线<code>/</code>则Git将其视为 shell glob 模式,并检查与<code>.gitignore</code>文件位置相关的路径名的匹配(相对于工作树的顶层,如果不是来自<code>.gitignore</code>文件)。</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>否则Git 将该模式视为适合 fnmatch3使用 FNM_PATHNAME 标志使用的 shell glob模式中的通配符不会与路径名中的/匹配。例如“Documentation / *。html” 与 “Documentation / git.html” 匹配,但不匹配 “Documentation / ppc / ppc.html” 或 “tools / perf / Documentation / perf.html”。</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>前导斜杠匹配路径名的开头。例如,“/*.c” 与 “cat-file.c” 匹配,但不匹配 “mozilla-sha1 / sha1.c” <code>**</code>。匹配完整路径名的模式中的两个连续星号(“ ”)可能有特殊含义:</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>前面的“ <code>**</code>”后跟斜杠意味着所有目录匹配。例如,“ <code>**/foo</code><code>foo</code>在任何地方与文件或目录“ ”匹配,与模式“ <code>foo</code>” 相同。“ <code>**/foo/bar</code>”与<code>bar</code>直接在目录“ <code>foo</code>” 下的任何地方的文件或目录“ ”匹配。</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>尾随 “ <code>/**</code>” 匹配内部的所有内容。例如,“ <code>abc/**</code>” 匹配目录 “ <code>abc</code>” 内的所有文件,相对于<code>.gitignore</code>文件的位置,具有无限深度。</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>斜杠后跟两个连续的星号,则斜线匹配零个或多个目录。例如,“ <code>a/**/b</code>” 匹配“ <code>a/b</code>”,“ <code>a/x/b</code>”,“ <code>a/x/y/b</code>” 等。</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><ul class="ul-level-0 list-paddingleft-2" style="margin: 10px 0px 10px 20px;"><li><p>其他连续的星号被认为是无效的。</p></li></ul></div></div><div class="doc-postil"><div class="c-markdown"><h2>笔记</h2></div></div><div class="doc-postil"><div class="c-markdown"><p>gitignore 文件的目的是确保未被 Git 跟踪的某些文件保持未被跟踪。</p></div></div><div class="doc-postil"><div class="c-markdown"><p>要停止跟踪当前跟踪的文件,请使用<code>git rm --cached</code></p></div></div><div class="doc-postil"><div class="c-markdown"><h2>例子</h2></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">    $ git status    [...]
    # Untracked files:    [...]
    #       Documentation/foo.html
    #       Documentation/gitignore.html
    #       file.o
    #       lib.a
    #       src/internal.o    [...]
    $ cat .git/info/exclude
    # ignore objects and archives, anywhere in the tree.    *.[oa]
    $ cat Documentation/.gitignore
    # ignore generated html files,    *.html
    # except foo.html which is maintained by hand    !foo.html
    $ git status    [...]
    # Untracked files:    [...]
    #       Documentation/foo.html    [...]</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>另一个例子:</p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">    $ cat .gitignore
    vmlinux*
    $ ls arch/foo/kernel/vm*
    arch/foo/kernel/vmlinux.lds.S
    $ echo '!/vmlinux*' &gt;arch/foo/kernel/.gitignore</pre></div></div><div class="doc-postil"><div class="c-markdown"><p>第二个 .gitignore 防止 Git 忽略<code>arch/foo/kernel/vmlinux.lds.S</code></p></div></div><div class="doc-postil"><div class="c-markdown"><p>示例排除除特定目录以外的所有内容<code>foo/bar</code>(请注意<code>/*</code>- 没有斜杠,通配符也会排除所有内容<code>foo/bar</code></p></div></div><div class="doc-postil"><div class="c-markdown"><pre class="prism-token token language-javascript">    $ cat .gitignore
    # exclude everything except directory foo/bar    /*
    !/foo
    /foo/*
    !/foo/bar</pre></div></div></div>