我用一个命令创建了一个diff文件:
git--无分页程序差异--无索引--统计信息路径A路径B〉\diff. log
接下来,我执行了一个命令:
git apply--索引--忽略空格更改--忽略空白\diff.log
在执行过程中,我遇到了一个错误:
错误:git diff头缺少文件名信息,当删除1个前导路径名组件时(第2138行)
第2138行通向:
2136 diff命令--git a/C:\临时文件\右键文件
2137新建文件模式100644
2138指数00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
2139差分--git ......
我尝试了一个命令"git apply--reject ...",但它也不起作用。我还添加了忽略chmod更改的config(git config core. fileMode false),但什么也没有改变。
5条答案
按热度按时间guz6ccqo1#
很可能是因为你在
git config
(~/.gitconfg)中有这样的设置:字符串
因此,您可以删除它或将其更改为false:
git config --global diff.noprefix false
thtygnil2#
你可以试试这个。
修补程序-p0〈文件名
这个补丁命令读取源文件中关于如何修改文件的指令,然后应用修改。源文件包含差异列表(或diff列表)和一个或多个diff命令输出集,称为块。
patch命令跳过补丁文件中的任何前导文本,应用实际的diff列表,并跳过任何尾随文本。因此,您可以将用作包含diff列表的补丁文件或消息,并且patch命令仍将工作。在这种情况下,如果整个diff列表缩进一致的量,则patch命令也将调整该间距。
5rgfhyps3#
这种行为可能是由于不同的文件名。
git apply
无法推断是否涉及重命名并拒绝修补程序。如果要应用二进制修补程序**,则两个文件名**必须相同。
以下格式的修补程序应该可以工作:
这可能会失败:
所以,如果你使用的是
git diff --no-index
,你必须手动修改补丁中的文件名,只有这样git apply
才知道你的补丁是什么。另请参见Linus Torvalds的评论:
顺便说一句,我认为这已经不再是一个bug了。不可能知道用户是否希望这个补丁是一个重命名。因此,因为你不知道你应该使用什么名字而拒绝应用它可能是 * 完全 * 正确的事情!
lfapxunr4#
确保当前工作目录正确。
w6mmgewl5#
我得到了
在下面的补丁上,使用
svn diff --git
(svn,版本1.14.1(r1886195)运行在Debian上)生成,我尝试使用git apply
(git版本2.30.2运行在Debian上):这个补丁所做的是创建一个新的空文件,名为
essai/essai.txt
。问题是在Windows下svn添加了一个以
diff --git
行结尾的CRLF行,这会在git中造成麻烦。尝试使用Linux,或者向git或svn提交补丁,或者破解
svn diff --git
生成的补丁。