Я пытаюсь реализовать слияние с libgit2, и я всегда нажимаю это утверждение при выполнении remote_fetch или create_annotated_commit, за которым следует git_repository_free
Но я не знаю, что я сделал не так?И нет сгенерированной ошибки libgit.И я также не понимаю смысла этого утверждения.
Типичный стек вызовов следующий:
2 __GI_abort abort.c 90 0x7f35da541f5d
3 __assert_fail_base assert.c 92 0x7f35da537f17
4 __GI___assert_fail assert.c 101 0x7f35da537fc2
5 git_mwindow_put_pack mwindow.c 106 0x7f35db69725f
6 pack_backend__free odb_pack.c 565 0x7f35db6a3dda
7 odb_free odb.c 679 0x7f35db69d5c4
8 git_odb_free odb.c 696 0x7f35db69d67c
9 set_odb repository.c 95 0x7f35db6d40c3
10 git_repository__cleanup repository.c 150 0x7f35db6d42a3
11 git_repository_free repository.c 161 0x7f35db6d42da
12 GitEngine::~GitEngine GitEngine.cpp 268 0x556a9e4f067d
13 main main.cpp 24 0x556a9e4eed8e
Чтобы воспроизвести эту проблему, мне просто нужно сделать это:
git_remote *remote;
int err = git_remote_create(&remote, m_repo, "remotefetch", "./repoD/");
git_fetch_options fetch_opts = GIT_FETCH_OPTIONS_INIT;
if (err) {
qDebug() << "error";
}
err = git_remote_fetch(remote, nullptr, &fetch_opts, nullptr);
if (err) {
qDebug() << "error";
}
if (m_repo) //this is in the destructor
git_repository_free(m_repo);
если я заменим git_remote_create на git_remote_create_anonymous, проблема исчезнет.
Однако, событие с git_remote_create_anonymous, если я вызову git_annotated_commit_from_fetchhead позже, до того же самого git_repository будет возвращен, так же, как и git_repository.Я не имею понятия почему?Я проверил репозиторий git с помощью командной строки, слияние, казалось, было выполнено правильно.