我在遵循的步骤中犯了什么错误?
我在Alpha
本地机器上的repo 中编辑了文件。然后我意识到我想要Bravo
在我本地盒子上的不同 repo中进行这些更改。我试过这个:
c:/repos/alpha/>git diff --cached > mypatch.txt
然后我将补丁文件复制到另一个 repo 位置并输入:
c:/repos/bravo/>git apply mypatch.txt
如果我用于 diff 和 apply 的 shell 是 powershell 或“Git CMD”,那么第二个命令会出错:
fatal: unrecognized input
相反,如果我使用“Git Bash”shell 来执行这两个命令,则会出现不同的错误:
5109e.patch:19: trailing whitespace.
IL.DataUsageGB,
warning: 1 line adds whitespace errors.
然后我尝试使用以下命令更仔细地应用更改:
$ git apply --reject --whitespace=fix mypatch.txt
由此我得到了许多错误的转储。例子:
error: while searching for:
);
GO
-- Anchor table ------------------------------------------------------------
-------------------------------------------
-- IL_InvoiceLine table (with 33 attributes)
----------------------------------------------------------------------------
-------------------------------------------
IF Object_ID('dbo.IL_InvoiceLine', 'U') IS NULL
CREATE TABLE [dbo].[IL_InvoiceLine] (
error: patch failed: scripts/bi/sql/Unified_ODS_Schema.sql:302
repo 中的分支和 repo 中Alpha
的相应分支Bravo
都来自同一个来源,并且都有一个git status
与上游“最新”的报告。换句话说,除了存在于 上的分阶段更改之外,分支是相同的Alpha
。我明确避免与原点进行推/拉。
建议?
没有任何问题,您可以完全忽略警告。您不需要--reject
or --whitespace=fix
,但如果您确实想使用后者,请在没有前者的情况下使用它。
如果我用于差异和应用的外壳是 powershell ...
这最终将输出写为 Unicode(通过某种我无法正确描述的机制,因为我不“做”Windows)。您必须将其过滤回 UTF-8 或 ASCII 才能应用。
相反,如果我使用“Git Bash”shell 来执行这两个命令,则会出现不同的错误:
5109e.patch:19: trailing whitespace. IL.DataUsageGB, warning: 1 line adds whitespace errors.
这不是一个真正的错误,这是一个警告。这意味着您的原始补丁在行尾之前添加了一个空白。默认情况下,git apply
称此为“错误”,但它真正的意思是“警告”。它的目的是提醒您注意,所讨论的行上有一个不可见的字符,您可能不打算这样做。(或者,也许你做到了!例如,在某些 Markdown 格式中,以两个空格结尾的行会插入一个分段符。参见Git 仅忽略Markdown文件中的尾随空格。)
什么构成“空白错误”(实际上应该是“空白烦恼”或“空白警告”或“空白故障”,而不是“错误”)是可配置的。默认情况下git diff
将突出显示此类空白故障。虽然我不能在这里展示它,但想象一下这-
条线是红色的,而这+
条线是绿色的,它<space>
代表一个尾随的空白:
- blah blah
+ blah foo blah<space>
这个空间将以红色突出显示,以使其突出显示为“空白错误”(我将其称为空白故障或烦恼或警告,但只要我们使用 Git,我们就应该理解什么是“空白错误”这里的意思)。
随着--whitespace=fix
,git apply
会发现它认为是空白的错误,并确定它是否可以通过自动修复他们的事情:
如果它可以修复它们,它就会。这包括即使上下文不完全匹配也可以应用补丁,但可以通过这种大惊小怪来这样做,所以它不仅仅是“删除添加行中的尾随空格”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句