2017-09-26 5 views
0

리모컨에서 가져 오기를 관리했으며 아래 코드를 실행하여 로컬 마스터 분기에서 변경된 내용을 가져 왔습니다.libgit2 : 가져온 후에 병합하고 커밋하는 방법?

git_annotated_commit * fetchhead_commit; 

    git_annotated_commit_lookup(&fetchhead_commit, 
     repo, 
     oid 
    );      

    git_merge(repo,&fetchhead_commit,1,NULL,NULL); 

그래서 지금은 커밋하는 자식 명령 줄 도구를 사용하는 경우 나 자동 병합 코멘트를 저지 내가 로그가 원격에서와 동일한 것을 볼 수 있습니다 후 얻을. 나는 libgit을 사용하여 동일한 것을 얻으려고 노력하고 있지만, 원격 기록을 병합하는 결과를 얻기 위해 노력한 지금까지의 노력은 사라져 버렸다.

병합 된 변경 사항을 원격으로 저장하려면 어떻게해야합니까?

편집 : 빨리 감기를 수행하여 조금 더 나아졌지만 여전히 로컬 커밋이있는 경우 들어오는 병합 후에 손실됩니다. 로컬 변경 사항은 손실되지 않지만 병합 후에 준비되고 다시 커밋되어야합니다.

당신은 여기 내 코드를 볼 수 있습니다

: 병합이 사람이 궁금하면 다시 jsgitpull

에서 호출 및 기록이 해킹은 웹 브라우저에서 작업을 수행하는 fetchead_foreach_cb 기능에서 어떤 일이 일어나고 https://github.com/fintechneo/libgit2/blob/master/jsbuild/jslib.c

을 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 유형을 전달했기 때문입니다. 나는 당신의 대답에 이것을 덧붙였다. 언제든지 다시 작성할 수 있지만 지금은 효과가 있습니다. –