I 'm trying to pull from a repo with libgit2.
My steps are these:
This results in MERGE_HEAD in .git folder and then I am able to merge with an existing commit.
The question is, is the above sequence correct? Why git creates FETCH_HEAD whereas libgit2 has MERGE_HEAD?
You probably want to use git_remote_fetch
, not git_remote_download
. fetch
is a convenience function that performs the download and updates things like the remote tracking branches to point to the data that is on the server and - more importantly for you - the FETCH_HEAD
file.
You can determine which branch to feed to git_merge
by examining the FETCH_HEAD
lines and identifying the branch that is not marked as not-for-merge
. The simplest way to do this is to iterate over them using git_repository_fetchhead_foreach
. Your callback will be invoked for each line, and you simply need to make note of the one that has for_merge
set to true
. The branch marked as for-merge
will be the remote branch corresponding to the merge
line in your config.
That is to say that if your HEAD
points to master
, and your configuration is:
[branch "master"]
remote = origin
merge = refs/heads/master
Then when you fetched from origin
, the corresponding remote master
branch would be marked as for-merge
. Once you have identified this FETCH_HEAD
entry, then you can create an annotated commit from it and call git_merge
.
Note that both git core and libgit2 will create FETCH_HEAD
s when fetching and MERGE_HEAD
s when merging. You will only see the latter when the merge is ongoing - so if you run merge --no-commit
on the command-line or if you have a conflict. You can use this to compare the data that git core produces to ensure that you are producing the same data using libgit2.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With