/ / libgit2: come unire e commettere dopo il recupero? - c, libgit2

libgit2: come unire e commettere dopo il recupero? - c, libgit2

Sono riuscito a recuperare dal telecomando, e sto eseguendo il codice qui sotto per ottenere le modifiche messe in scena nel ramo principale locale.

    git_annotated_commit * fetchhead_commit;

git_annotated_commit_lookup(&fetchhead_commit,
repo,
oid
);

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

Quindi ora se uso lo strumento da riga di comando git sucommit ottengo un commento di commit di merge automatico e dopo che posso vedere che il log è lo stesso del remoto. Sto cercando di ottenere lo stesso con libgit ma i miei sforzi finora nel tentativo di creare un commit dei risultati di fusione nella cronologia remota vanno persi.

Come devo eseguire un commit "corretto" delle modifiche unite per preservare la cronologia dal remoto?

MODIFICARE: Ottenuto un po 'più avanti, ma se ci sono commit locali questi vengono persi dopo l'unione in entrata. Le modifiche locali non vengono perse, ma messe in scena dopo l'unione e devono essere nuovamente eseguite.

Puoi vedere il mio codice qui: https://github.com/fintechneo/libgit2/blob/master/jsbuild/jslib.c

L'unione sta avvenendo nel fetchead_foreach_cb funzione da cui è chiamato nuovamente jsgitpull

E per la cronaca, questo hack funziona nel browser web se qualcuno si chiede di cosa si tratta.

risposte:

1 per risposta № 1

Creare l'unione di commit con git_commit_create. Il commit unione dovrebbe avere due genitori. Uno è l'attuale impegno HEAD. Il secondo è lo stesso commit annotato in cui vi siete fusi git_merge (ad esempio la testina di lettura).