我在跟随的步骤中犯了什么错误?
我已在本地邮箱中的repo Alpha
中编辑了文件。然后我意识到我希望这些更改在另一个repo Bravo
中,也在我的本地方框中。我试过这个:
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 Alpha
中的分支和repo Bravo
中的相应分支都来自同一个来源,并且都有git status
报告与上游“最新”。换句话说,除Alpha
上存在的分阶段更改外,分支是相同的。我明确地避免了原点的推/拉。
建议?
答案 0 :(得分:0)
没有错,你可以完全忽略警告。您不需要--reject
或--whitespace=fix
,但如果您确实想使用后者,请在不使用前者的情况下使用它。
如果我用于差异和应用的shell是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格式中,用两个空格结束一行插入一个分段符。请参见aslo Git ignore trailing whitespace in markdown files only。)
什么构成“空白错误”(实际上应该是“空白烦恼”或“空白警告”或“空白故障”,而不是“错误”)是可配置的。默认情况下,git diff
会突出显示此类空白故障。虽然我无法在此处显示,但请假设-
行为红色,+
行为绿色,<space>
代表尾随空白:
- blah blah
+ blah foo blah<space>
这个空间会以红色突出显示,以使其突出显示为“空白错误”(我称之为空白故障或烦恼或警告,但只要我们使用Git,我们就应该明白这句话是什么“空白错误“意味着在这里。”
使用--whitespace=fix
,git apply
会找到它认为是空白错误的内容,并确定它是否可以通过以下方式自动修复它们:
如果可以修复它们,它会。这包括应用补丁,即使上下文不完全匹配但可以通过这种烦恼来实现,所以它不仅仅是“删除添加行中的拖尾空格”。