libgit2を使用してリモートリポジトリにプッシュすると、何か問題が発生しました。GIT_ENNOFASTFORWARDエラーが返されますが、リモートリポジトリからクローンを作成するだけで、誰もプッシュしません。この時点で、ローカルとリモートの両方のコミットオブジェクトは同じである必要があります。なぜ???
これが私がしたことです。
リモートからgitのクローンを作成し、1つのファイルの内容を変更します。
変更をリモートgitリポジトリにプッシュします。
error:git_push_finishはエラー情報なしで-11を返します。(GIT_ENNOFASTFORWARD = -11)
構成:
[remote "origin"]
url = http://path/git/share.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
コード:
-(IBAction)push:(id)sender {
git_repository *repo = NULL;
const git_error *err;
int ret = -1;
NSArray *str = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docPath = [str objectAtIndex:0];
NSString *localPath = [docPath stringByAppendingPathComponent:@"abc/.git"];
NSLog(@"localPath:%@", localPath);
ret = git_repository_open(&repo, [localPath UTF8String]);
NSLog(@"git_repository_open ret:%d",ret);
err = giterr_last();
char *remote_url = "http://path/git/share.git";
git_remote *remote = NULL;
bool cred_acquire_called = false;
ret = git_remote_load(&remote, repo, "origin");
NSLog(@"git_remote_load ret:%d", ret);
git_remote_set_cred_acquire_cb(remote, cred_acquire_cb, &cred_acquire_called);
ret = git_remote_connect(remote, GIT_DIRECTION_PUSH);
NSLog(@"git_remote_connect ret:%d cred_acquire_called:%d", ret, cred_acquire_called);
git_push *push;
ret = git_push_new(&push, remote);
NSLog(@"git_push_new ret:%d", ret);
char* refspec = "refs/heads/master:refs/heads/master";
ret = git_push_add_refspec(push, refspec);
NSLog(@"git_push_add_refspec ret:%d", ret);
ret = git_push_finish(push);
NSLog(@"git_push_finish ret:%d", ret);
ret = git_push_unpack_ok(push);
NSLog(@"git_push_unpack_ok ret:%d", ret);
err = giterr_last();
}