git diff:致命失败:无法识别的输入

时间:2017-07-19 05:12:18

标签: git perl diff apply

我有一个diff文件,其中包含多个文件的差异。我希望它应用于当前分支。到目前为止,我已尝试使用git apply changes.diff失败的fatal: Unrecognized input。 Diff文件如下所示。

#*#*#*DIFFS FOR FILE ./reporting/report/sso_usage_dd_report.rptdesign #*#*#*
74c74
<             <property name="odaURL">jdbc:mysql://db.mysql.domain:3306/sso_user_data</property>
---
>             <property name="odaURL">jdbc:mysql://localhost:3306/sso_user_data</property>
#*#*#*DIFFS FOR FILE ./reporting/report/sso_usage_monthly_dd_report.rptdesign #*#*#*
67c67
<             <property name="odaURL">jdbc:mysql://db.mysql.domain:3306/sso_user_data</property>
---
>             <property name="odaURL">jdbc:mysql://localhost:3306/sso_user_data</property>
#*#*#*DIFFS FOR FILE ./reporting/report/system_wise_access_information_report.rptdesign #*#*#*
94c94
<             <property name="odaURL">jdbc:mysql://db.mysql.domain:3306/sso_user_data</property>
---
>             <property name="odaURL">jdbc:mysql://localhost:3306/sso_user_data</property>

请注意,在当前情况下,我无法重新创建差异文件。

研究

经过研究,我遇到了this answer,这表明在补丁文件创建期间未设置--color=never是一个问题。我猜这同样应该与我的差异文件一起使用,并尝试使用perl -pe 's/\x1b.*?[mGKH]//g' changes.diff > changes_nocolor.diff删除颜色字符,但这并不起作用。

问题是,我是在正确的大道上吗?我究竟做错了什么?我怎样才能解决这个问题?或者我可以解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

该差异不是上下文差异,而是what the Wikipedia entry calls normal diff output。另请参阅How to make "git diff" output normal diff format (non-unified, non-context)? Git无法应用此非上下文类型的差异。

patch utility可以应用普通差异输出。 There are good reasons to prefer context or unified diffs, though.特别是,如果同一行出现在源文件的多个位置,则正常差异很容易错误 - 应用于错误的位置。