Как инициализировать репозиторий git с помощью libgit2

На 32-разрядной машине с Windows XP я клонировал репозиторий libgit2, используя

git clone git://github.com/libgit2/libgit2.git trunk

Затем я настроил из trunk_build_debug для mingw, используя:

cmake ../trunk -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS=-g 

и построил его с помощью

make

С помощью этой недавно созданной библиотеки я пытаюсь создать новый репозиторий. Так что я использую

    error_code = git_repository_init( &repo, path, 0 );
    if ( error_code != 0 )
    {
        const git_error * error = giterr_last();
       /* the text representation:
        ( error == NULL || error->message == NULL ? 
        "(no description)" : 
        error->message )
        */
    }

При первой попытке это не удается с сообщением об ошибке:

Ошибка Git -1: глобальный файл «.config/git/config» не существует: система не может найти указанный файл.

Каталог .git создан, и я могу использовать git status для его запроса. Кроме того, у меня есть git, установленный в Program Files/git, и он отлично работает. Упомянутый файл не существует в каталоге пользователя, это правда. Я недоволен, потому что не могу проверить возвращенный код ошибки (ошибка может быть "настоящей").

Итак, я создал пустой файл в D:\Documents and Settings\User Name.config\git\config. Каталог .git снова создается, но я получаю тот же код ошибки -1. На этот раз giterr_last() возвращает NULL.

Отслеживание кода в отладчике указывает на то, что библиотека недовольна моим пустым файлом.

Однако я думаю, что это указывает на то, что я делаю что-то не так. Есть ли метод инициализации? Нужно ли мне создавать файл и использовать функции git_config_, чтобы указать на него библиотеку?

Кстати, это неправильное место, чтобы спросить об этом? Есть ли специальный форум, где я должен задать этот вопрос?

Спасибо


Вот обратная трассировка, где вызов завершается ошибкой: pastebin Похоже, что файл конфигурации внутри каталога .git не может быть проанализирован (в трассировке не показана ошибка 'config_parse()').


Я открыл проблему в libgit2.


person Nicu Tofan    schedule 06.03.2013    source источник


Ответы (1)


Чтобы создать новый репозиторий, скорее следует полагаться на git_repository_init(). Для получения дополнительной информации вы можете просмотреть header и тесты.

git_repository_open() лучше использовать, когда репозиторий уже существует.

Есть ли специальный форум, где я должен задать этот вопрос?

Можно задать вопрос, связанный с программированием, на StackOverflow. Кроме того, некоторые разработчики libgit2 общаются на канале #libgit2 на irc.freenode.net. Однако при обнаружении ошибок рекомендуется отправлять их в систему отслеживания ошибок< /сильный>.

Обновлять

  • В прошлом были некоторые проблемы с тем, как проверяются файлы конфигурации в Windows. Вместе с некоторыми попытками их исправить. Подробнее об этом см. в этой проблеме.
  • Помимо сложности проверки, некоторые пользователи могут захотеть явно указать альтернативные местоположения для своих файлов. Этот запрос на включение работает под этим углом.

Учитывая то, что вы обнаружили во время отладки libgit2, возможно, сейчас самое время открыть ошибку в системе отслеживания проблем. Имейте в виду, что могут возникнуть две проблемы: проблема с поиском и проблема с пустой конфигурацией.

person nulltoken    schedule 06.03.2013
comment
Спасибо! Действительно, я использую 'git_repository_init()' в своем коде; это была ошибка копирования и вставки при публикации вопроса. Проблемы остаются. - person Nicu Tofan; 06.03.2013
comment
Я только что проверил 64-битную Ubuntu 12.10 и XP, работающую внутри VirtualBox (без предыдущей установки git), и проблема никогда не возникала. Завтра я снова проверю исходную машину и могу отправить отчет об ошибке. - person Nicu Tofan; 06.03.2013