首页 > 编程知识 正文

git合入patch,git如何生成密钥

时间:2023-05-06 09:16:18 阅读:115309 作者:3972

通常,在我们使用git管理项目时,如果客户使用git为我们生成patch,我们就需要将patch传递给客户,然后投入到我们的项目中。 基于这种场景,我们将总结git如何生成patch,以及如何将其注入patch

如何生成patch:(这里描述的生成patch是基于commit记录生成的。)。

1 .例如,首先在git log中调查有什么样的commit

2 .将初次提交commit以后的(初次提交除外)全部生成patch

命令:使用git format-patche795fefabc,如上图所示

生成的patch文件如下图所示

如何进入patch :

将生成的patch文件copy放入文件夹中。 (在此创建了patch文件夹。 如下图所示

这些patch显然是在git格式路径中生成的,因此在git工具中应该可以很好地使用。 git am正在做这件事。

在使用git am之前,可以先git am --abort,放弃以前的am信息,进行新的am。

否则你会遇到这样的错误。

. git/rebase-applystillexistsbutmboxgiven。

git am一次可以合并一个文件或一个目录中的所有路径,如下图所示。

使用git格式路径生成所需的patch:

提交当前分支目标的所有前置主节点:

git格式- patch-m master

自某次提交以来的所有patch:

git格式路径4e 16-- 4e 16是指commit名称

从根到指定提交的所有patch:

git格式路径--root 4e 16

某两次提交之间的所有patch:

git格式路径365 a . 4e16---- 365 a和4e 16分别对应于两次提交的名称

在某个提交(包括)之前的几次提交) :

git格式路径n07Fe---- n是与路径数,07fe相对应的提交的名称

因此,一次提交如下

git格式- patch-1 07fe

缺省情况下,由git format-patch生成的修补程序文件从1开始按顺序编号,并使用相应提交信息的第一行作为文件名。 如果使用-- numbered-files选项,则文件名仅包含编号,不包含提交信息。 如果指定--stdout选项,则可以指定目标,例如在将所有patch打印到一个文件中时。 可以指定-o

应用patch :

首先检查patch文件。 git apply --stat newpatch.patch

检查是否适用: git apply --check newpatch.patch

修补程序: git am --signoff newpatch.patch

(可以使用--s或--signoff选项在commit信息中包含Signed-off-by信息。)

如果APP的patch有问题:

例如,典型的git am失败可能包括:

$ git am PATCH

applying : pacth描述

error : patch failed : file.c :137

error : file.c : patchdoesnotapply

error : patch failed : makefile :24

error : libavfilter/makefile : patchdoesnotapply

patchfailedat 0001 patch描述

whenyouhaveresolvedthisproblemrun ' gitam--已解决'。

ifyouwouldprefertoskipthispatch,instead run 'git am --skip '。

torestoretheoriginalbranchandstoppatchingrun ' gitam---- abort '。

如您所见,发生冲突时,git只需输出上述信息并停止。 小冲突不会合并整个patch。

解决这些问题的最简单方法是首先使用git am --abort,然后手动添加此patch、patch -p1 PATCH,手动解决代码冲突,最后使用git commit -a提交代码但是,这样做会导致失去PATCH中原本包含的commit信息(例如,From、Date、Subject、Signed-off-by等)。 应该有更聪明的方法。

. git/rebase-apply目录包含名为" 0001 "的修补程序文件。 在更新的git版本中,存储修补程序文件的目录已重命名。 这里使用的git版本是1.7.4.1。

实际上,可以使用git apply命令进行路径(git apply是git的路径命令)。 手动解决代码冲突,就像使用patch -p1命令一样。 查看生成的. rej文件,将其与冲突文件进行比较,修改冲突内容,并最终将其添加到索引中。

$ git apply PATCH --reject

$编辑编辑编辑编辑

(注释:基于. rej文件手动解决所有冲突)

$ git add FIXED_FILES

$ git am--已解决

就这么简单!

我想多解释一下,可以吧。 git am不会改变索引。 必须使用git apply --reject手动解决路径(保存到. git/rebase-apply )和代码冲突。 (注意:使用git status列出所有相关文件),而不仅仅是导致冲突的文件。)。 这样做的好处是无需重新编辑commit信息。 而且,如果你在打一系列的patch (也就是说像git am *.patch那样打了多个patch ),那么你就不用先用git am --abort再用git am了。

参考资料:

至此,这里介绍了详细解说使用git生成patch、打入patch的方法的文章。 有关更多相关git生成patch或将其注入patch的信息,请搜索脚本房屋中的以前文章或继续查看以下相关文章。 今后,我想继续支持脚本房屋。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。