mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-09 15:34:05 +08:00
23 lines
11 KiB
HTML
23 lines
11 KiB
HTML
<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 将该模式视为适合 fnmatch(3)使用 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*' >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> |