2017-07-19 1559 views
0

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

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

研究

经研究我所遇到this answer这表明它与--color=never在补丁文件的创建时间被不设置有问题。我猜想相同的应该与我的差异文件工作,并试图通过使用perl -pe 's/\x1b.*?[mGKH]//g' changes.diff > changes_nocolor.diff,这是行不通的颜色字符。

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

回答

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.特别是,如果同一行出现在源文件的多个位置,则正常差异可能很容易在错误的位置应用错误

+0

嗯..是否有可能将普通差异转换为上下文差异?就像你已经指出安全的方式更好一样... –

+0

不,不可能安全地做到这一点:你需要的环境根本就不存在。你可以将它转换为上下文差异(没有上下文)的*表单*,但没有任何收益,除了可能使用'git apply'而不是'patch'。 (但'patch'应该被广泛使用。) – torek

+0

谢谢。我会更深入地使用'patch'命令来应用这个。 :) –