如何告诉 `git diff` 使 diff 可以与 `patch -p0` 一起使用?
How to tell `git diff` to make a diff usable with `patch -p0`?
我在 git 存储库中有一个文件。我从分支 release 中检出它,对其进行编辑以修复问题,然后将其检入新分支 bugfix。我现在想制作一个捕获此编辑的差异文件。我想使用 patch -p0
将此 diff 文件应用于 release 分支的单独副本,该分支不受 git 控制。补丁后,我希望文件与我在分支 bugfix.
中的文件相匹配
我尝试使用命令 git diff release bugfix -- myfile.m4
。它给了我一个 .diff 文件,开头是
index 17641f7482..2b31725fae 100644
--- a/myfile.m4
+++ b/myfile.m4
[… rest of diff elided …]
当我使用 patch -p0
将此差异应用到我的单独存储库时,它失败了。补丁无法找到路径 a/myfile.m4
和 b/myfile.m4
,因为它们当然不存在。我的源代码中没有目录 a
和 b
。请注意,如果我可以使用 patch -p1
,那么 diff 将作为补丁工作。但是,由于工具限制,我无法轻松使用 patch -p1
.
我希望 .diff 文件省略 a/
和 b/
前缀。我希望差异文件读取如下内容:
index 87641f7482..2821725fae 100644
--- myfile.m4
+++ myfile.m4
[… rest of diff elided …]
有没有办法让 git diff 产生一个没有那些不存在的路径前缀的 diff?
有一个解决方法:从 release 分支中检出文件,将其重命名为 myfile.m4.orig
,然后从 bugfix分支,然后做diff -u myfile.m4.orig myfile.m4
。这给了我一个差异,我可以将其与 patch -p0
一起使用。但我想避免使用人为的文件名制作单独的文件。
您可以使用 --dst-prefix=
和 --src-prefix=
来指定目标和源前缀,我想您可以将它们设置为空字符串:
$ git diff --src-prefix= --dst-prefix= release bugfix -- myfile.m4
正如评论中指出的,您还可以使用 --no-prefix
:
$ git diff --no-prefix release bugfix -- myfile.m4
我在 git 存储库中有一个文件。我从分支 release 中检出它,对其进行编辑以修复问题,然后将其检入新分支 bugfix。我现在想制作一个捕获此编辑的差异文件。我想使用 patch -p0
将此 diff 文件应用于 release 分支的单独副本,该分支不受 git 控制。补丁后,我希望文件与我在分支 bugfix.
我尝试使用命令 git diff release bugfix -- myfile.m4
。它给了我一个 .diff 文件,开头是
index 17641f7482..2b31725fae 100644
--- a/myfile.m4
+++ b/myfile.m4
[… rest of diff elided …]
当我使用 patch -p0
将此差异应用到我的单独存储库时,它失败了。补丁无法找到路径 a/myfile.m4
和 b/myfile.m4
,因为它们当然不存在。我的源代码中没有目录 a
和 b
。请注意,如果我可以使用 patch -p1
,那么 diff 将作为补丁工作。但是,由于工具限制,我无法轻松使用 patch -p1
.
我希望 .diff 文件省略 a/
和 b/
前缀。我希望差异文件读取如下内容:
index 87641f7482..2821725fae 100644
--- myfile.m4
+++ myfile.m4
[… rest of diff elided …]
有没有办法让 git diff 产生一个没有那些不存在的路径前缀的 diff?
有一个解决方法:从 release 分支中检出文件,将其重命名为 myfile.m4.orig
,然后从 bugfix分支,然后做diff -u myfile.m4.orig myfile.m4
。这给了我一个差异,我可以将其与 patch -p0
一起使用。但我想避免使用人为的文件名制作单独的文件。
您可以使用 --dst-prefix=
和 --src-prefix=
来指定目标和源前缀,我想您可以将它们设置为空字符串:
$ git diff --src-prefix= --dst-prefix= release bugfix -- myfile.m4
正如评论中指出的,您还可以使用 --no-prefix
:
$ git diff --no-prefix release bugfix -- myfile.m4