git - 如何告诉 `git diff` 使 diff 可与 `patch -p0` 一起使用?

标签 git diff patch git-diff

我在 git 存储库中有一个文件。我从分支release中 checkout 它,对其进行编辑以修复问题,然后将其 checkin 新分支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.m4b/myfile.m4,因为它们当然不存在。我的源代码中没有目录 ab 。请注意,如果我可以使用 patch -p1,那么 diff 将作为补丁使用。但是,由于工具限制,我无法轻松使用 patch -p1

我希望 .diff 文件省略 a/b/ 前缀。我希望 diff 文件读取如下内容:

index 87641f7482..2821725fae 100644
--- myfile.m4
+++ myfile.m4
[… rest of diff elided …]

有没有办法让 git diff 生成没有那些不存在的路径前缀的差异?

有一个解决方法:从 release 分支 check out 文件,将其重命名为 myfile.m4.orig,然后从 bugfix< check out 修改后的文件/strong> 分支,然后执行 diff -u myfile.m4.orig myfile.m4。这给了我一个可以与 patch -p0 一起使用的 diff。但我想避免使用人为的文件名创建一个单独的文件。

最佳答案

您可以使用 --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 - 如何告诉 `git diff` 使 diff 可与 `patch -p0` 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71108550/

相关文章:

svn - git-svn 分支 : how to configure git config

git - 如何从提交消息中删除 svn url?

.net - 如何判断两个 .NET DLL 是否相同?

文本的 C# 差异算法

git - 使用 git 推送和 pull 我的 conda 环境

arrays - 数组变异算法

windows - 如何在 Windows 上应用差异补丁?

linux - 如何让linux patch util在补丁文件中使用env var

svn - 应用补丁时忽略行尾差异

c++ - 无法在Windows 10的终端机上为qt5.10.1运行编译器 'cl'