2017-09-26 3 views
0

Ich habe es geschafft, von der Fernbedienung zu holen, und ich führe den folgenden Code aus, um die Änderungen im lokalen Master-Zweig abzurufen.libgit2: Wie füge ich zusammen und begehe nach fetch?

git_annotated_commit * fetchhead_commit; 

    git_annotated_commit_lookup(&fetchhead_commit, 
     repo, 
     oid 
    );      

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

So, jetzt, wenn ich das git Kommandozeilen-Tool verwenden, um befehle ich bekomme eine automatische Zusammenführung Commit-Kommentar und nachdem ich kann sehen, dass das Protokoll die gleichen wie von der Fernbedienung ist. Ich versuche, das gleiche mit libgit zu erreichen, aber meine bisherigen Bemühungen, ein Commit der Zusammenführung zu erstellen, führen dazu, dass die entfernte Geschichte verloren geht.

Wie soll ich ein "richtiges" Commit der zusammengeführten Änderungen vornehmen, um die Historie von der Remote zu erhalten?

BEARBEITEN: Ein bisschen weiter, indem Sie einen schnellen Vorlauf machen, aber immer noch, wenn es lokale Commits gibt, sind diese nach dem eingehenden Merge verloren. Lokale Änderungen gehen nicht verloren, sondern werden nach der Zusammenführung in Szene gesetzt und müssen erneut übergeben werden.

Sie meinen Code hier sehen können: https://github.com/fintechneo/libgit2/blob/master/jsbuild/jslib.c

Die Zusammenführung in der fetchead_foreach_cb Funktion geschieht, die wiederum von jsgitpull

genannt wird und für die Aufzeichnung dieser Hack funktioniert im Web-Browser, wenn jemand fragt, worum es bei den emscripten geht.

+0

Wie erstellen Sie das Commit? Was hast du bisher versucht? –

+0

Ich bin ein bisschen weiter gegangen, indem ich einen schnellen Vorlauf gemacht habe (mit git_reference_set_target ). Aber wenn ich lokale Änderungen habe, gehen diese Commits verloren und die lokal geänderten Dateien werden inszeniert und müssen erneut committen. Sehen Sie sich die Funktion fetchead_foreach_cb in https://github.com/fintechneo/libgit2/blob/master/jsbuild/jslib.c an. –

+0

Okay, aber nach dem Zusammenführen, wie erstellen Sie das Commit? Rufst du 'git_commit_create' an? –

Antwort

1

Erstellen Sie das Merge-Commit mit git_commit_create. Das Zusammenführungs-Commit sollte zwei Eltern haben. Einer ist der aktuelle HEAD Commit. Die zweite ist dieselbe Annotation Commit, die Sie in git_merge zusammengeführt haben (z. B. der Abrufkopf).

+0

Danke! Mein Fehler war, dass ich den git_annotated_commit-Typ als Eltern übergeben habe, wenn ich git_commit benutze. Ich habe das zu deiner Antwort hinzugefügt. Fühlen Sie sich frei, es umzuschreiben, aber arbeitet jetzt für mich. –