git-apply
名称
git-apply - 将补丁应用于文件和/或索引
概要
git apply [--stat] [--numstat] [--summary] [--check] [--index | --intent-to-add] [--3way]
[--apply] [--no-add] [--build-fake-ancestor=<file>] [-R | --reverse]
[--allow-binary-replacement | --binary] [--reject] [-z]
[-p<n>] [-C<n>] [--inaccurate-eof] [--recount] [--cached]
[--ignore-space-change | --ignore-whitespace]
[--whitespace=(nowarn|warn|fix|error|error-all)]
[--exclude=<path>] [--include=<path>] [--directory=<root>]
[--verbose] [--unsafe-paths] [<patch>…]
描述
读取提供的diff输出(即“补丁”)并将其应用于文件。从存储库中的子目录运行时,将忽略目录外的修补路径。使用--index
选项,补丁也会应用于索引,而使用--cached
选项,补丁仅应用于索引。如果没有这些选项,该命令仅将补丁应用于文件,并且不要求它们位于Git存储库中。
此命令应用修补程序但不创建提交。使用 git-am [1] 从 git-format-patch [1] 生成的补丁创建提交和/或通过电子邮件接收。
OPTIONS
<patch>…
从中读取补丁的文件。 - 可用于从标准输入读取。
--stat
而不是应用补丁,输入diffstat作为输入。关闭“申请”。
--numstat
与--stat
类似,但以十进制表示法显示添加和删除的行数,不使用缩写表示路径名,以使其更加机器友好。对于二进制文件,输出两个-
而不是0 0
。关闭“申请”。
--summary
而不是应用补丁,输出从git diff扩展头获取的信息的精简摘要,例如创建,重命名和模式更改。关闭“申请”。
--check
而不是应用修补程序,查看修补程序是否适用于当前工作树和/或索引文件并检测错误。关闭“申请”。
--index
当--check
生效时,或者应用补丁时(默认情况下,如果没有禁用它的选项生效),请确保补丁适用于当前索引文件记录的内容。如果要在工作树中修补的文件不是最新的,则会将其标记为错误。此标志还会导致更新索引文件。
--cached
在不触及工作树的情况下应用补丁。而是使用缓存数据,应用补丁,并将结果存储在索引中,而不使用工作树。这意味着--index
。
--intent-to-add
仅将补丁应用于工作树时,请稍后将新文件标记为添加到索引中(请参阅 git-add [1] 中的--intent-to-add
选项)。除非在Git存储库中运行并且未指定--index
,否则将忽略此选项。请注意,--index
可能隐含在--cached
或--3way
等其他选项中。
-3
--3way
当补丁不能干净地应用时,如果补丁记录了应该应用的blob的身份,则回退到三向合并,并且我们在本地可以使用这些blob,可能会将冲突标记留在工作树中的文件中供用户解决。此选项隐含--index
选项,与--reject
和--cached
选项不兼容。
--build-fake-ancestor=<file>
较新的 git diff 输出为每个blob嵌入了索引信息,以帮助识别该补丁适用的原始版本。给出此标志,并且如果Blob的原始版本在本地可用,则构建包含这些blob的临时索引。
遇到纯模式更改(没有索引信息)时,将从当前索引读取信息。
-R
--reverse
反向应用补丁。
--reject
对于原子性,默认情况下 git apply 会使整个补丁失败,并且当某些黑客不适用时不会触及工作树。此选项使其应用适用的修补程序部分,并将拒绝的数据保留在相应的* .rej文件中。
-z
当给出--numstat
时,不要使用路径名,而是使用NUL终止的机器可读格式。
如果没有此选项,则会引用具有“异常”字符的路径名,如配置变量core.quotePath
所述(参见 git-config [1] )。
-p<n>
删除< n>传统差异路径的前导路径组件(由斜线分隔)。例如,使用-p2
,针对a/dir/file
的补丁将直接应用于file
。默认值为1。
-C<n>
确保至少< n>周围环境的线在每次更改之前和之后匹配。当存在较少的周围环境线时,它们都必须匹配。默认情况下,不会忽略任何上下文。
--unidiff-zero
默认情况下, git apply 期望应用的补丁是具有至少一行上下文的统一差异。这提供了良好的安全措施,但在应用--unified=0
生成的差异时会出现故障。要绕过这些检查,请使用--unidiff-zero
。
请注意,由于上述原因,不鼓励使用无上下文补丁。
--apply
如果您使用上面标记为“关闭应用”的任何选项, git apply 将读取并输出所请求的信息,而不实际应用该补丁。在这些标志之后给这个标志也应用补丁。
--no-add
应用补丁时,忽略补丁所做的添加。这可用于通过首先在它们上运行 diff 并使用此选项应用结果来提取两个文件之间的公共部分,这将应用删除部分但不应用添加部分。
--allow-binary-replacement
--binary
从历史上看,我们不允许在没有用户明确许可的情况下应用二进制补丁,并且这个标志就是这样做的。目前我们总是允许二进制补丁应用,所以这是一个无操作。
--exclude=<path-pattern>
不要对与给定路径模式匹配的文件应用更改。在导入要在其中排除某些文件或目录的补丁集时,这非常有用。
--include=<path-pattern>
将更改应用于与给定路径模式匹配的文件。在导入要包含某些文件或目录的补丁集时,这非常有用。
使用--exclude
和--include
模式时,将按照它们在命令行中出现的顺序检查它们,第一个匹配项确定是否使用了每个路径的补丁。如果命令行上没有包含模式,则默认情况下使用与任何包含/排除模式不匹配的路径的修补程序,如果存在任何包含模式,则忽略该修补程序。
--ignore-space-change
--ignore-whitespace
应用修补程序时,如有必要,请忽略上下文行中的空白更改。上下文行将保留其空白,并且无论--whitespace
选项的值如何,它们都不会进行空白修复。不过,新线仍将被修复。
--whitespace=<action>
应用修补程序时,检测具有空白错误的新行或已修改行。什么被认为是空白错误由core.whitespace
配置控制。默认情况下,尾随空格(包括仅由空格组成的行)和在行的初始缩进内紧跟着制表符的空格字符被视为空格错误。
默认情况下,该命令会输出警告消息,但会应用修补程序。当git-apply
用于统计而不应用补丁时,默认为nowarn
。
您可以使用不同的<action>
值来控制此行为:
nowarn
关闭尾随空白警告。warn
输出一些此类错误的警告,但按原样应用补丁(默认)。fix
输出一些此类错误的警告,并在修复它们之后应用补丁(strip
是一个同义词—-用于考虑仅将空白字符作为错误尾随的工具,并且修复涉及剥离他们,但现代Gits做得更多)。error
输出一些此类错误的警告,并拒绝应用补丁。error-all
类似于error
,但显示所有错误。
--inaccurate-eof
在某些情况下, diff 的某些版本无法在文件末尾正确检测到丢失的换行符。因此,由 diff 程序创建的补丁不能正确记录不完整的行。此选项通过解决此错误添加了对应用此类修补程序的支持。
-v
--verbose
向stderr报告进度。默认情况下,仅打印有关当前正在应用的修补程序的消息。此选项将导致报告其他信息。
--recount
不要信任hunk标头中的行数,而是通过检查补丁来推断它们(例如,在编辑补丁之后没有适当地调整hunk标头)。
--directory=<root>
前置< root>到所有文件名。如果还传递了“-p”参数,则在添加新根之前应用它。
例如,通过运行git apply --directory=modules/git-gui
,可以将关于更新a/git-gui.sh
到b/git-gui.sh
的补丁应用于工作树modules/git-gui/git-gui.sh
中的文件。
--unsafe-paths
默认情况下,影响工作区域外的补丁(Git控制的工作树或当“git apply”用作GNU补丁的替代时的当前工作目录)被拒绝为错误(或恶作剧)。
当git apply
用作“更好的GNU补丁”时,用户可以通过--unsafe-paths
选项来覆盖此安全检查。使用--index
或--cached
时,此选项无效。
组态
apply.ignoreWhitespace
如果要在默认情况下忽略空白更改,请设置为更改。如果您希望空格中的更改很重要,请设置为以下之一:no,none,never,false。
apply.whitespace
如果没有从命令行给出--whitespace
标志,则此配置项将用作默认值。
子模
如果补丁包含对子模块的任何更改,则 git apply 会按如下方式处理这些更改。
如果指定--index
(显式或隐式),则子模块提交必须与要应用的修补程序的索引完全匹配。如果检出任何子模块,则完全忽略这些检出,即,它们不需要是最新的或清洁的,并且它们不会被更新。
如果未指定--index
,则忽略补丁中的子模块提交,并且仅检查相应子目录的缺失或存在,并且(如果可能)更新。
也可以看看
GIT
部分 git [1] 套件