Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git:修补程序不适用_Git_Msysgit - Fatal编程技术网

git:修补程序不适用

git:修补程序不适用,git,msysgit,Git,Msysgit,我有一个叫做my_pcc_branch.patch的补丁 当我尝试应用它时,会收到以下消息: $ git apply --check my_pcc_branch.patch warning: src/main/java/.../AbstractedPanel.java has type 100644, expected 100755 error: patch failed: src/main/java/.../AbstractedPanel.java:13 error: src/main/jav

我有一个叫做my_pcc_branch.patch的补丁

当我尝试应用它时,会收到以下消息:

$ git apply --check my_pcc_branch.patch
warning: src/main/java/.../AbstractedPanel.java has type 100644, expected 100755
error: patch failed: src/main/java/.../AbstractedPanel.java:13
error: src/main/java/.../AbstractedPanel.java: patch does not apply
这是什么意思


如何解决此问题?

当您混合使用UNIX和Windows git客户端时会发生这种情况,因为Windows实际上没有“x”位的概念,所以您在Windows下签出的
rw-r--r--
(0644)文件由msys POSIX层“升级”为
rwx-r-xr-x
(0755)。git认为模式差异与文件中的文本差异基本相同,因此您的补丁程序不会直接应用。我认为您唯一的好选择是将
core.filemode
设置为
false
(使用
git-config


这里有一个msysgit问题和一些相关信息:(改为archive.org 2013年12月3日的副本)

Johannes Sixtmsysgit@googlegroups.com邮件列表建议使用以下命令行参数:

git apply --ignore-space-change --ignore-whitespace mychanges.patch
这解决了我的问题。

git apply--reject--whitespace=fix mychanges.patch适合我

解释
--reject
选项将指示git在无法确定如何应用修补程序时不要失败,而是应用它可以应用的单个块,并为它无法应用的块创建拒绝文件(
.rej
)。可以“应用[这些]被拒绝的补丁并执行逐字差异”

此外,
--whitespace=fix
将警告空格错误并尝试修复它们,而不是拒绝应用其他适用的hunk

这两个选项结合在一起使修补程序的应用对故障更具鲁棒性,但它们需要额外注意结果


有关整个文档,请参阅。

此命令将应用修补程序,但不会解析它,并将坏文件保留为
*。rej

git apply --reject --whitespace=fix mypath.patch
你只需要解决它们。解决后,运行:

git -am resolved
当所有其他方法都失败时,尝试一下

git apply--3way patchFile.patch

--3路
当修补程序没有干净地应用时,如果 补丁记录了它应该应用到的blob的身份,我们 让这些斑点在当地可用,可能会导致冲突 工作树中文件中供用户解析的标记。这 选项表示--index选项,并且与 --拒绝和--cached选项


典型的失败案例尽可能多地应用补丁程序,并让您在git中解决冲突,而您通常是这样做的。可能比拒绝更容易一步。

在我的情况下,我愚蠢到一开始就错误地创建了补丁文件,实际上以错误的方式进行了区分。我最终得到了完全相同的错误消息

如果您在master上并执行
git diff branch name>branch name.patch
,则会尝试删除所有希望添加的内容,反之亦然(这对于git来说是不可能完成的,因为显然,从未完成的添加内容无法删除)


因此,请确保您签出到您的分支并执行分支名称。请尝试使用此处建议的解决方案:

patch-p1

这对我很有帮助。

警告:此命令可以永久删除旧的丢失提交。尝试此操作之前,请复制整个存储库。 我找到了

我不知道为什么这样做有效,但我尝试了很多解决方法,这是唯一对我有效的方法。简而言之,运行以下三个命令:

git fsck --full
git reflog expire --expire=now --all
git gc --prune=now

我所寻找的并不是在这里明确指出的,所以,我写这篇文章是为了其他可能寻找类似信息的人。我面临一个问题,一个文件(在旧回购协议中存在)在回购协议中被删除。当我应用补丁时,它失败了,因为它找不到要应用的文件。(所以我的情况是git补丁无法删除文件)
“#git apply--reject”肯定给出了一个观点,但并没有让我完全了解问题所在。我不能使用wiggle,因为它在我们的构建服务器中不可用。在我的例子中,我通过从我尝试应用的补丁文件中删除“在回购中被删除的文件”的条目解决了这个问题,因此我在没有问题的情况下应用了所有其他更改(使用3向合并,避免空白错误),然后手动将删除文件的内容合并到其移动的位置。

我的问题是,我运行了
git diff
,然后运行了
git reset--hard HEAD
,然后意识到我想要撤销,所以我尝试将
git diff
的输出复制到一个文件中,并使用
git apply
,但我遇到了一个错误,即“补丁不适用”。在切换到
patch
并尝试使用它之后,我意识到由于某种原因重复了一大块diff,在删除了重复的之后,
patch
(大概也是
git apply
)起了作用。

git apply--reverse--reject example.patch

创建分支名称反转的修补程序文件时:


例如,如果仅应用了部分修补程序,而不是整个修补程序,则使用“
git diff-feature\u branch..master”
代替“
git diff-master..feature\u branch”
”。请确保应用修补程序时您位于正确的目录中


例如,我在父项目文件夹中创建了一个补丁文件,其中包含
.git
文件。但是,我尝试在较低级别应用补丁。它仅在该项目级别应用更改。

我尝试运行命令“git config core.filemode false”,但它没有帮助-我仍然收到相同的消息。假设您的树中没有未提交的更改,请尝试
git reset--hard HEAD
强制git使用有效的新选项重新签出您的文件。只需尝试执行“git reset--hard HEAD”。它是成功的(我看到消息“HEAD现在在…”),但是“git apply”的问题仍然存在