【发布时间】:2017-09-26 13:18:41
【问题描述】:
我已经设法从远程获取,并且我正在运行下面的代码以将更改暂存到本地 master 分支中。
git_annotated_commit * fetchhead_commit;
git_annotated_commit_lookup(&fetchhead_commit,
repo,
oid
);
git_merge(repo,&fetchhead_commit,1,NULL,NULL);
所以现在如果我使用 git 命令行工具提交,我会得到一个自动合并提交注释,之后我可以看到日志与远程日志相同。我正在尝试使用 libgit 获得相同的结果,但到目前为止,我在尝试创建合并的提交时所做的努力导致远程历史记录丢失。
我应该如何“正确”提交合并的更改以保留远程的历史记录?
编辑:通过快进可以更进一步,但如果有本地提交,这些在传入合并后仍然会丢失。本地更改不会丢失,而是在合并后暂存,必须再次提交。
你可以在这里看到我的代码:https://github.com/fintechneo/libgit2/blob/master/jsbuild/jslib.c
合并发生在 fetchead_foreach_cb 函数中,该函数再次从 jsgitpull 调用
如果有人想知道 emscripten 的内容是什么,这个 hack 确实可以在网络浏览器中使用。
【问题讨论】:
-
你是如何创建提交的?到目前为止,您尝试过什么?
-
我通过快进(使用 git_reference_set_target )走得更远。但是,如果我有本地更改,这些提交就会丢失,并且本地更改的文件将被暂存并且必须再次提交。见github.com/fintechneo/libgit2/blob/master/jsbuild/jslib.c中的fetchead_foreach_cb函数
-
好的,但是在你合并之后,你是如何创建提交的?你打电话给
git_commit_create? -
拉取的典型工作流程是获取然后调用
git_merge_analysis来决定您是否需要快进或合并/变基。如果您决定需要合并,则必须调用git_merge来设置工作目录和索引,解决冲突,然后提交。 -
好的,假设没有冲突,但是本地有提交应该与传入的更改合并。该提交应该是什么样的?我尝试了类似 jsgitcommit 函数中的提交,但随后丢失了远程历史记录,或者如果在两者之间进行快进丢失了本地历史记录。在原始示例中合并后从终端使用 git commit 可以正常工作,所以我的问题仍然是如何使用 libgit2 编写类似的 git commit?