2017-09-26 47 views
0

我已經設法從遠程獲取,並且正在運行下面的代碼以獲取在本地主分支中進行的更改。libgit2:如何在提取後合併並提交?

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

呼籲並記錄在案這個技巧確實在Web瀏覽器的工作,如果有人想知道發生emscripten的內容是關於什麼的。

+0

你是如何創建提交?你試過什麼了? –

+0

我通過快速前進得到了一點點(使用git_reference_set_target )。但是如果我有本地更改,這些提交將會丟失,並且本地更改的文件將被暫存,並且必須重新提交。請參閱https://github.com/fintechneo/libgit2/blob/master/jsbuild/jslib.c中的fetchead_foreach_cb函數 –

+0

好的,但合併之後,您如何創建提交?你在調用'git_commit_create'嗎? –

回答

1

git_commit_create創建合併提交。合併提交應該有兩個父母。一個是當前的HEAD提交。第二個是git_merge中合併的註釋提交(例如提取頭)。

+0

謝謝!我的錯誤是,當使用git_commit時,我作爲父項傳入了git_annotated_commit類型。我把這個添加到你的答案中。隨意重寫它,但現在爲我工作。 –