Ich habe die Antwort in diesem Beitrag (libgit2 (fetch & merge & commit)) angeschaut, aber ich habe Schwierigkeiten, einen Git Pull zur Arbeit zu bekommen. Ich bekomme keine Fehlermeldungen. Der Abruf scheint zu funktionieren, aber die Zusammenführung tritt nicht auf. Doing ein Git-Status zeigt, dass mein Zweig hinter der 1. begehen ...Doing a Git Ziehen mit libgit2
On branch Branch_1_1.
Your branch is behind 'origin/Branch_1_1' by 1 commit, and can be fast-forwarded.
(use "git pull" to update your local branch)
nothing to commit, working directory clean
Mein Code ist unten ...
static int fetchhead_ref_cb(const char *name, const char *url,
const git_oid *oid, unsigned int is_merge, void *payload)
{
if (is_merge)
{
strcpy_s(branchToMerge, 100, name);
memcpy(&branchOidToMerge, oid, sizeof(git_oid));
}
return 0;
}
void GitPull()
{
git_libgit2_init();
git_repository *repo = NULL;
git_remote *remote;
int error = git_repository_open(&repo, "C:\\work\\GitTestRepos\\Repo1");
CHECK_FOR_ERROR
error = git_remote_lookup(&remote, repo, "origin");
CHECK_FOR_ERROR
git_fetch_options options = GIT_FETCH_OPTIONS_INIT;
error = git_remote_fetch(remote, NULL, &options, NULL);
CHECK_FOR_ERROR
git_repository_fetchhead_foreach(repo, fetchhead_ref_cb, NULL);
git_merge_options merge_options = GIT_MERGE_OPTIONS_INIT;
git_checkout_options checkout_options = GIT_CHECKOUT_OPTIONS_INIT;
git_annotated_commit *heads[ 1 ];
git_reference *ref;
error = git_annotated_commit_lookup(&heads[ 0 ], repo, &branchOidToMerge);
CHECK_FOR_ERROR
error = git_merge(repo, (const git_annotated_commit **)heads, 1, &merge_options, &checkout_options);
CHECK_FOR_ERROR
git_annotated_commit_free(heads[ 0 ]);
git_repository_state_cleanup(repo);
git_libgit2_shutdown();
}
Was ich das verursacht die Zusammenführung tue nicht zu arbeiten?
Danke Jason. Ich habe deinen Vorschlag ausprobiert, einen Commit zu machen. Ich gebe sowohl den lokalen als auch den entfernten Zweig als Eltern an, aber es lässt den lokalen Repo einen Commit vor dem Remote, was nicht mit einem "Git-Pull" passiert. – Anthony
Der lokale Zweig * sollte * nach dem Zusammenführen eine Commit voraus sein. Allerdings habe ich nicht erkannt, dass Sie nicht wirklich zusammenführen müssen, weil Sie Ihre lokale Geschichte nicht von der Remote-Geschichte abweichen. Sie können schnell vorspulen. Ich werde meine Antwort entsprechend aktualisieren. –