如何应用github补丁?

时间:2017-01-22 15:36:43

标签: git patch

我正在阅读this关于如何修复Valgrind中的错误的问题。唯一提出的解决方案是应用this补丁。

我从未应用过补丁,但我在主题上发现了this个问题,但我无法理解如何将其应用到我的案例中。

1 个答案:

答案 0 :(得分:1)

priv/guest_amd64_helpers.c

@@ -3101,7 +3101,8 @@ void amd64g_dirtyhelper_CPUID_avx2 ( VexGuestAMD64State* st )
          SET_ABCD(0x0000000d, 0x756e6547, 0x6c65746e, 0x49656e69);
          break;
       case 0x00000001:
-         SET_ABCD(0x000306c3, 0x02100800, 0x7ffafbff, 0xbfebfbff);
+         /* Don't advertise RDRAND support, bit 30 in ECX.  */
+         SET_ABCD(0x000306c3, 0x02100800, 0x3ffafbff, 0xbfebfbff);
          break;
       case 0x00000002:
          SET_ABCD(0x76036301, 0x00f0b6ff, 0x00000000, 0x00c10000);

这个补丁非常简单。它只更改一个文件priv/guest_amd64_helpers.c。更改的行位于函数void amd64g_dirtyhelper_CPUID_avx2 ( VexGuestAMD64State* st )中。 -前缀行表示要删除此行。 +前缀行表示要添加此行。没有带前缀-+的其他行是要查找的上下文。因此,找到块,然后删除并在priv/guest_amd64_helpers.c中添加这些行。这是一种直接的方法。

对于通用git补丁或提交,如果您的代码由git存储库管理,我们也可以通过git命令应用它。您问题的最后一个链接描述了如何git应用补丁。命令git am也可以完成这项工作。以下是git cherry-pick应用此提交的方法。

cd <your_repo>
git fetch https://github.com/svn2github/valgrind-vex master
git cherry-pick 1ab61656f71e94ce12b68de87f1e28cf3dc0c18c

如果您不想保留1ab6165的作者信息,可以改用git cherry-pick -n 1ab616;git commit

补丁是一种格式化文件,用于描述更改哪些文件以及添加或删除哪些行。您可以手动或通过命令自动应用它。还有另一种常用方法。将priv/guest_amd64_helpers.c下载到本地磁盘并将其与您的版本进行比较,例如Beyond Compare。专注于相关的块并将其合并到您的版本中。