I have a relatively short Gist which is supposed to use libgit2
to emulate the functionality of the git pull
command. Unfortunately, it's not quite working.
In summary, the snippet:
- calls
git_repository_open()
to open the repository on disk - calls
git_remote_load()
to get agit_remote *
to the remote named "origin" - calls
git_remote_connect()
with theGIT_DIRECTION_FETCH
flag - calls
git_remote_download()
to fetch objects from the remote
According to git_remote_stats()
, objects are indeed being fetched. But the working directory doesn't change to reflect the latest commit. I tried adding:
git_checkout_head(repo, NULL);
...but that made no difference.
Entering:
git checkout master
...in a terminal results in the following output:
Already on 'master' Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
How do I fast-forward?
You should run
git pull origin master
or
git fetch origin
+git merge origin/master
Then means you need the equivalent libgit2 merge function.
merge function is available in libgit2 v0.20