将分阶段更改应用于新回购

时间:2017-10-23 21:45:50

标签: windows git

我在跟随的步骤中犯了什么错误?

我已在本地邮箱中的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上存在的分阶段更改外,分支是相同的。我明确地避免了原点的推/拉。

建议?

1 个答案:

答案 0 :(得分:0)

TL; DR

没有错,你可以完全忽略警告。您不需要--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=fixgit apply会找到它认为是空白错误的内容,并确定它是否可以通过以下方式自动修复它们:

  • 剥离尾随空格
  • 删除一些空格前的标签空间
  • 与CRLF和LF-only相混淆

如果可以修复它们,它会。这包括应用补丁,即使上下文不完全匹配但可以通过这种烦恼来实现,所以它不仅仅是“删除添加行中的拖尾空格”。