git-apply

原文: https://git-scm.com/docs/git-apply

名称

git-apply - 将补丁应用于文件和/或索引

概要

  1. git apply [--stat] [--numstat] [--summary] [--check] [--index | --intent-to-add] [--3way]
  2. [--apply] [--no-add] [--build-fake-ancestor=<file>] [-R | --reverse]
  3. [--allow-binary-replacement | --binary] [--reject] [-z]
  4. [-p<n>] [-C<n>] [--inaccurate-eof] [--recount] [--cached]
  5. [--ignore-space-change | --ignore-whitespace]
  6. [--whitespace=(nowarn|warn|fix|error|error-all)]
  7. [--exclude=<path>] [--include=<path>] [--directory=<root>]
  8. [--verbose] [--unsafe-paths] [<patch>…​]

描述

读取提供的diff输出(即“补丁”)并将其应用于文件。从存储库中的子目录运行时,将忽略目录外的修补路径。使用--index选项,补丁也会应用于索引,而使用--cached选项,补丁仅应用于索引。如果没有这些选项,该命令仅将补丁应用于文件,并且不要求它们位于Git存储库中。

此命令应用修补程序但不创建提交。使用 git-am [1]git-format-patch [1] 生成的补丁创建提交和/或通过电子邮件接收。

OPTIONS

  1. <patch>…​

从中读取补丁的文件。 - 可用于从标准输入读取。

  1. --stat

而不是应用补丁,输入diffstat作为输入。关闭“申请”。

  1. --numstat

--stat类似,但以十进制表示法显示添加和删除的行数,不使用缩写表示路径名,以使其更加机器友好。对于二进制文件,输出两个-而不是0 0。关闭“申请”。

  1. --summary

而不是应用补丁,输出从git diff扩展头获取的信息的精简摘要,例如创建,重命名和模式更改。关闭“申请”。

  1. --check

而不是应用修补程序,查看修补程序是否适用于当前工作树和/或索引文件并检测错误。关闭“申请”。

  1. --index

--check生效时,或者应用补丁时(默认情况下,如果没有禁用它的选项生效),请确保补丁适用于当前索引文件记录的内容。如果要在工作树中修补的文件不是最新的,则会将其标记为错误。此标志还会导致更新索引文件。

  1. --cached

在不触及工作树的情况下应用补丁。而是使用缓存数据,应用补丁,并将结果存储在索引中,而不使用工作树。这意味着--index

  1. --intent-to-add

仅将补丁应用于工作树时,请稍后将新文件标记为添加到索引中(请参阅 git-add [1] 中的--intent-to-add选项)。除非在Git存储库中运行并且未指定--index,否则将忽略此选项。请注意,--index可能隐含在--cached--3way等其他选项中。

  1. -3
  1. --3way

当补丁不能干净地应用时,如果补丁记录了应该应用的blob的身份,则回退到三向合并,并且我们在本地可以使用这些blob,可能会将冲突标记留在工作树中的文件中供用户解决。此选项隐含--index选项,与--reject--cached选项不兼容。

  1. --build-fake-ancestor=<file>

较新的 git diff 输出为每个blob嵌入了索引信息,以帮助识别该补丁适用的原始版本。给出此标志,并且如果Blob的原始版本在本地可用,则构建包含这些blob的临时索引。

遇到纯模式更改(没有索引信息)时,将从当前索引读取信息。

  1. -R
  1. --reverse

反向应用补丁。

  1. --reject

对于原子性,默认情况下 git apply 会使整个补丁失败,并且当某些黑客不适用时不会触及工作树。此选项使其应用适用的修补程序部分,并将拒绝的数据保留在相应的* .rej文件中。

  1. -z

当给出--numstat时,不要使用路径名,而是使用NUL终止的机器可读格式。

如果没有此选项,则会引用具有“异常”字符的路径名,如配置变量core.quotePath所述(参见 git-config [1] )。

  1. -p<n>

删除< n>传统差异路径的前导路径组件(由斜线分隔)。例如,使用-p2,针对a/dir/file的补丁将直接应用于file。默认值为1。

  1. -C<n>

确保至少< n>周围环境的线在每次更改之前和之后匹配。当存在较少的周围环境线时,它们都必须匹配。默认情况下,不会忽略任何上下文。

  1. --unidiff-zero

默认情况下, git apply 期望应用的补丁是具有至少一行上下文的统一差异。这提供了良好的安全措施,但在应用--unified=0生成的差异时会出现故障。要绕过这些检查,请使用--unidiff-zero

请注意,由于上述原因,不鼓励使用无上下文补丁。

  1. --apply

如果您使用上面标记为“关闭应用”的任何选项, git apply 将读取并输出所请求的信息,而不实际应用该补丁。在这些标志之后给这个标志也应用补丁。

  1. --no-add

应用补丁时,忽略补丁所做的添加。这可用于通过首先在它们上运行 diff 并使用此选项应用结果来提取两个文件之间的公共部分,这将应用删除部分但不应用添加部分。

  1. --allow-binary-replacement
  1. --binary

从历史上看,我们不允许在没有用户明确许可的情况下应用二进制补丁,并且这个标志就是这样做的。目前我们总是允许二进制补丁应用,所以这是一个无操作。

  1. --exclude=<path-pattern>

不要对与给定路径模式匹配的文件应用更改。在导入要在其中排除某些文件或目录的补丁集时,这非常有用。

  1. --include=<path-pattern>

将更改应用于与给定路径模式匹配的文件。在导入要包含某些文件或目录的补丁集时,这非常有用。

使用--exclude--include模式时,将按照它们在命令行中出现的顺序检查它们,第一个匹配项确定是否使用了每个路径的补丁。如果命令行上没有包含模式,则默认情况下使用与任何包含/排除模式不匹配的路径的修补程序,如果存在任何包含模式,则忽略该修补程序。

  1. --ignore-space-change
  1. --ignore-whitespace

应用修补程序时,如有必要,请忽略上下文行中的空白更改。上下文行将保留其空白,并且无论--whitespace选项的值如何,它们都不会进行空白修复。不过,新线仍将被修复。

  1. --whitespace=<action>

应用修补程序时,检测具有空白错误的新行或已修改行。什么被认为是空白错误由core.whitespace配置控制。默认情况下,尾随空格(包括仅由空格组成的行)和在行的初始缩进内紧跟着制表符的空格字符被视为空格错误。

默认情况下,该命令会输出警告消息,但会应用修补程序。当git-apply用于统计而不应用补丁时,默认为nowarn

您可以使用不同的&lt;action&gt;值来控制此行为:

  • nowarn关闭尾随空白警告。

  • warn输出一些此类错误的警告,但按原样应用补丁(默认)。

  • fix输出一些此类错误的警告,并在修复它们之后应用补丁(strip是一个同义词—-用于考虑仅将空白字符作为错误尾随的工具,并且修复涉及剥离他们,但现代Gits做得更多)。

  • error输出一些此类错误的警告,并拒绝应用补丁。

  • error-all类似于error,但显示所有错误。

  1. --inaccurate-eof

在某些情况下, diff 的某些版本无法在文件末尾正确检测到丢失的换行符。因此,由 diff 程序创建的补丁不能正确记录不完整的行。此选项通过解决此错误添加了对应用此类修补程序的支持。

  1. -v
  1. --verbose

向stderr报告进度。默认情况下,仅打印有关当前正在应用的修补程序的消息。此选项将导致报告其他信息。

  1. --recount

不要信任hunk标头中的行数,而是通过检查补丁来推断它们(例如,在编辑补丁之后没有适当地调整hunk标头)。

  1. --directory=<root>

前置< root>到所有文件名。如果还传递了“-p”参数,则在添加新根之前应用它。

例如,通过运行git apply --directory=modules/git-gui,可以将关于更新a/git-gui.shb/git-gui.sh的补丁应用于工作树modules/git-gui/git-gui.sh中的文件。

  1. --unsafe-paths

默认情况下,影响工作区域外的补丁(Git控制的工作树或当“git apply”用作GNU补丁的替代时的当前工作目录)被拒绝为错误(或恶作剧)。

git apply用作“更好的GNU补丁”时,用户可以通过--unsafe-paths选项来覆盖此安全检查。使用--index--cached时,此选项无效。

组态

  1. apply.ignoreWhitespace

如果要在默认情况下忽略空白更改,请设置为更改。如果您希望空格中的更改很重要,请设置为以下之一:no,none,never,false。

  1. apply.whitespace

如果没有从命令行给出--whitespace标志,则此配置项将用作默认值。

子模

如果补丁包含对子模块的任何更改,则 git apply 会按如下方式处理这些更改。

如果指定--index(显式或隐式),则子模块提交必须与要应用的修补程序的索引完全匹配。如果检出任何子模块,则完全忽略这些检出,即,它们不需要是最新的或清洁的,并且它们不会被更新。

如果未指定--index,则忽略补丁中的子模块提交,并且仅检查相应子目录的缺失或存在,并且(如果可能)更新。

也可以看看

git-am [1]

GIT

部分 git [1] 套件