1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/fibjs-libgit2

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

libgit2 — библиотечная реализация методов Git

OpenSSF Best Practices

Статус сборки
Сборка ветки main CI Build Экспериментальные возможности
Сборка ветки v1.9 CI Build Экспериментальные возможности
Сборка ветки v1.8 CI Build Экспериментальные возможности
Ночные сборки Ночная сборка Статус сканирования Coverity

Содержание ==========* Usage of libgit2

Большинство этих инструкций предполагает, что вы пишете приложение на C и хотите использовать libgit2 напрямую. Если вы не используете C, а пишете на другом языке или платформе, такой как .NET, Node.js или Ruby, то скорее всего есть "языковая привязка", которую можно использовать для выполнения сложных задач вызова в нативный код.

Но если вы хотите использовать libgit2 напрямую — потому что вы строите приложение на C — то вы можете воспользоваться существующими двоичными версиями. Есть пакеты для менеджеров пакетов vcpkg и conan. И libgit2 доступен в Homebrew и большинстве дистрибутивов Linux.

Однако эти версии могут быть устаревшими, и мы рекомендуем использовать последнюю версию, если возможно. К счастью, сборка libgit2 не представляет особого труда.

Быстрый старт

Необходимые условия для сборки libgit2:

  1. CMake и рекомендовано установить его в вашу переменную окружения PATH.
  2. Python используется нашим тестовым фреймворком и должен быть установлен в вашу переменную окружения PATH.
  3. C-компилятор: libgit2 использует C90 и должна собираться на большинстве компиляторов.
    • Windows: рекомендован Visual Studio
    • Mac: рекомендован Xcode
    • Unix: рекомендованы gcc или clang.

Сборка1. Создайте каталог сборки под директорией исходного кода libgit2, и перейдите в него: mkdir build && cd build 2. Создайте среду сборки CMake: cmake .. 3. Выполните сборку libgit2: cmake --build .

Встретили трудности с этими шагами? Прочтите наш руководство по решению проблем. Более подробные указания по сборке доступны ниже.

Получение помощи

Общение с нами

  • через IRC: присоединитесь к #libgit2 на libera.
  • через Slack: посетите slack.libgit2.org чтобы зарегистрироваться, затем присоединитесь к нам в #libgit2.

Получение помощи

Если у вас есть вопросы по библиотеке, пожалуйста, проверьте документацию API. Если у вас все еще остаются вопросы, свяжитесь с нами на Slack или опубликуйте вопрос на StackOverflow (с меткой libgit2).

Отчет о багах

Пожалуйста, создайте issue на GitHub и включите как можно больше информации. Если возможно, предоставьте пример кода, который демонстрирует проблему. Если вы видите ошибку только в конкретном репозитории, пожалуйста, предоставьте ссылку на него, если это возможно.

Мы просим вас не открывать issue на GitHub для получения помощи, только для отчета о багах.

Отчет о проблемах безопасности

Пожалуйста, ознакомьтесь с SECURITY.md.Что она может делать

Libgit2 предоставляет вам возможность управления репозиториями Git на вашем выборе языка программирования. Она используется в производстве для обеспечения множества приложений, включая GitHub.com, Plastic SCM и Azure DevOps.

Целью не является замена программы git или её команд пользователя. Некоторые API похожи на команды внутренней работы системы Git, поскольку они хорошо согласуются с концепциями системы Git, но большинство команд, которые пользователи могут вводить, находятся вне области этой библиотеки.

Библиотека предоставляет:

  • преобразования SHA, форматирование и укорачивание;
  • абстрактную систему ODB-заднего плана;
  • парсинг, редактирование и запись обратно коммитов, тегов, деревьев и блобов;
  • проход по деревьям;
  • проход по версиям;
  • манипуляцию файлом индекса (участком подготовки);
  • управление ссылками (включая упакованные ссылки);
  • управление файлом конфигурации;
  • высокий уровень управления репозиторием;
  • безопасность многопоточной работы и повторяемости;
  • детализированные сообщения об ошибках;
  • ...и многое другое (более 175 различных вызовов API).

Как libgit2 является исключительно потребителем системы Git, нам приходится адаптироваться к изменениям, внесённым выше по течению. Это имеет два основных последствия:* Некоторые изменения могут потребовать от нас изменения предоставляемых интерфейсов. Хотя мы стараемся реализовывать функции таким образом, чтобы они были универсальными и требовали минимальных изменений в будущем, мы не можем гарантировать полностью стабильный API.

  • Поскольку нам приходится следить за изменениями поведения, внесенными выше по течению, мы можем отставать в некоторых областях. Обычно мы документируем эти несоответствия в нашем трекере задач с меткой "git change".

Необязательные зависимости

Хотя библиотека обеспечивает функциональность Git с очень небольшим количеством зависимостей, некоторые рекомендованные зависимости используются для повышения производительности или полной функциональности.

  • Генерация хэшей: Git использует SHA1DC (детектор столкновений SHA1) для своей базовой генерации хэшей. Поддержка SHA256 экспериментальная, и оптимизированная поддержка предоставляется системными библиотеками на macOS и Windows, или библиотекой HTTPS на Unix-системах при наличии.
  • Многопоточность: предоставляется системными библиотеками на Windows и pthreads на Unix-системах.
  • HTTPS: предоставляется системными библиотеками на macOS и Windows, или OpenSSL или mbedTLS на других Unix-системах.
  • SSH: предоставляется libssh2 или вызовом OpenSSH.
  • Юникод: предоставляется системными библиотеками на Windows и macOS.Инициализация =============

Библиотека должна отслеживать некоторое глобальное состояние. Вызовите

git_libgit2_init();

перед тем как использовать любую другую функцию libgit2. Этот метод можно вызывать несколько раз. Соответствующее количество вызовов

git_libgit2_shutdown();

освободит ресурсы. Учитывайте, что если у вас есть рабочие потоки, вы должны вызвать git_libgit2_shutdown после того, как эти потоки завершат свою работу. Если вам требуется помощь в координации этого процесса, просто сделайте так, чтобы рабочие потоки вызывали git_libgit2_init при запуске и git_libgit2_shutdown при завершении работы.

Многопоточность

См. многопоточность для получения информации.

Конвенции

См. конвенции для общего представления внешних и внутренних API/правил оформления кода, которые мы используем.

Сборка libgit2 — использование CMake

Сборка

libgit2 собирается чисто на большинстве платформ без необходимости использования внешних зависимостей. libgit2 собирается с использованием CMake (версия 2.8 или выше) на всех платформах. На большинстве систем можно создать библиотеку с помощью следующих команд:

$ mkdir build && cd build
$ cmake ..
$ cmake --build .

Чтобы включить примеры в сборку, используйте cmake -DBUILD_EXAMPLES=ON .. вместо cmake ... Собранные исполняемые файлы для примеров затем можно найти в build/examples, относительно верхнего уровня директории.Альтернативно вы можете указать CMake GUI-инструменту на файл CMakeLists.txt и сгенерировать платформозависимый проект сборки или рабочее пространство IDE.

Если вы не знакомы с CMake, более подробное объяснение может оказаться полезным.

Расширенные опции

Вы можете указать ряд опций для cmake, которые изменят способ сборки libgit2. Для использования этого, укажите -Doption=value во время начальной конфигурации cmake. Например, чтобы включить совместимость с SHA256:

$ mkdir build && cd build
$ cmake -DEXPERIMENTAL_SHA256=ON ..
$ cmake --build .

Опции для libgit2:

  • EXPERIMENTAL_SHA256=ON: включает совместимость с SHA256; обратите внимание, что это изменение API, поэтому оно помечено как "экспериментальное".

Опции сборки:

  • BUILD_EXAMPLES=ON: собирает набор примеров кода

  • BUILD_FUZZERS=ON: собирает набор тестов на отказоустойчивость

  • ENABLE_WERROR=ON: собирает с -Werror или эквивалентом, который превращает предупреждения компилятора в ошибки в кодовой базе libgit2 (но не его зависимостей).Опции зависимостей:

  • USE_SSH=type: включает поддержку SSH и опционально выбирает провайдера; type может быть установлено как libssh2 или exec (что выполнит внешнюю команду OpenSSH). ON подразумевает libssh2; по умолчанию равно OFF.

  • USE_HTTPS=type: включает поддержку HTTPS и опционально выбирает провайдера; type может быть установлено как OpenSSL, OpenSSL-Dynamic (чтобы не связывать с OpenSSL, а загружать его динамически), SecureTransport, Schannel или WinHTTP; по умолчанию это SecureTransport на macOS, WinHTTP на Windows и любой из OpenSSL или mbedTLS, который был обнаружен на других платформах. По умолчанию равно ON.

  • USE_SHA1=type: выбирает механизм SHA1 для использования; type может быть установлено как CollisionDetection, HTTPS для использования системы или провайдера HTTPS, или один из OpenSSL, OpenSSL-Dynamic, OpenSSL-FIPS (чтобы использовать процедуры, соответствующие FIPS в OpenSSL), CommonCrypto, или Schannel. По умолчанию равно CollisionDetection. Этот параметр сохраняется для обратной совместимости и не следует менять.

  • USE_SHA256=type: выбирает механизм SHA256 для использования; type может быть установлено как HTTPS для использования системы или драйвера HTTPS, builtin, или один из OpenSSL, OpenSSL-Dynamic, OpenSSL-FIPS (чтобы использовать процедуры, соответствующие FIPS в OpenSSL), CommonCrypto, или Schannel. По умолчанию равно HTTPS.

  • USE_GSSAPI=<on/off>: включает GSSAPI для аутентификации SPNEGO на Unix. По умолчанию равно OFF.

  • USE_HTTP_PARSER=type: выбирает парсер HTTP; либо http-parser для внешней зависимости от http-parser.com/nodejs/http-parser), либо llhttp для внешней зависимости от llhttp, либо builtin. По умолчанию равно builtin.

  • REGEX_BACKEND=type: выбирает регулярный выражательный движок для использования; один из regcomp_l, pcre2, pcre, regcomp, или builtin. По умолчанию используется regcomp_l, если он доступен, PCRE, если найдено, в противном случае используется встроенный.

  • USE_BUNDLED_ZLIB=type: выбирает встроенную версию zlib; либо ON или OFF. По умолчанию используется системная версия zlib, если она доступна, в противном случае используется встроенная версия. Определение зависимостей ------------------------Проект libgit2 использует cmake, так как это помогает с кросс-платформенными проектами, особенно теми, что имеют много зависимостей. Если ваши зависимости находятся в нестандартных местах, вы можете использовать опции _ROOT_DIR, чтобы указать их расположение. Например, чтобы указать расположение OpenSSL:

$ cmake -DOPENSSL_ROOT_DIR=/tmp/openssl-3.3.2 ..

Эти опции являются общими для CMake, поэтому их документация может оказаться полезной. Если у вас есть вопросы относительно зависимостей, пожалуйста, обратитесь к нам.

Запуск тестов

После сборки вы можете запустить тесты из директории build командой

$ ctest -V

Альтернативно вы можете запустить набор тестов непосредственно с помощью команды,

$ ./libgit2_tests

Непосредственный вызов набора тестов полезен потому, что он позволяет вам выполнять отдельные тесты или группы тестов с использованием флага -s. Например, чтобы запустить тесты индекса:

$ ./libgit2_tests -s index

Чтобы запустить конкретный тест с именем index::racy::diff, который соответствует тестовой функции test_index_racy__diff:

$ ./libgit2_tests -s index::racy::diff

Набор тестов будет выводить точку . для каждого успешного теста и букву F для любого провалившегося теста. Буква S указывает, что тест был пропущен, поскольку он не применим к вашей платформе или является слишком затратным.Примечание: При сборке нетроненного исходного дерева из выпуска или из основной ветки должны отсутствовать провальные тесты. Пожалуйста, обратитесь к нам или откройте проблему в случае обнаружения провальных тестов.

Установка

Для установки библиотеки вы можете указать префикс установки, установив:

$ cmake .. -DCMAKE_INSTALL_PREFIX=/install/prefix
$ cmake --build . --target install

Расширенное использование

Для более продвинутого использования или вопросов о CMake прочитайте CMake FAQ.

Следующие переменные CMake объявлены:

  • CMAKE_INSTALL_BINDIR: Куда устанавливать исполняемые файлы.
  • CMAKE_INSTALL_LIBDIR: Куда устанавливать библиотеки.
  • CMAKE_INSTALL_INCLUDEDIR: Куда устанавливать заголовочные файлы.
  • BUILD_SHARED_LIBS: Создание libgit2 в виде общедоступной библиотеки (по умолчанию включено).
  • BUILD_TESTS: Создание набора модульных и интеграционных тестов (по умолчанию включено).
  • USE_THREADS: Создание libgit2 с поддержкой многопоточности (по умолчанию включено).

Чтобы вывести все варианты сборки и их текущие значения, выполните следующее:

# Создайте и настройте каталог сборки
$ mkdir build && cd build
$ cmake ..

# Выведите все варианты сборки и их значения
$ cmake -L

Параметры компилятора и линковщика -----------------------------------Существует несколько параметров, контролирующих поведение компилятора и линковщика. Эти флаги могут быть полезны при кросс-компиляции или специализированных конфигурациях.

  • CMAKE_C_FLAGS: Установка собственных флагов компилятора
  • CMAKE_C_STANDARD: стандарт C для компиляции; по умолчанию C90
  • CMAKE_C_EXTENSIONS: поддержка расширений компилятора; по умолчанию OFF
  • CMAKE_FIND_ROOT_PATH: Переопределение пути поиска библиотек
  • ZLIB_LIBRARY, OPENSSL_SSL_LIBRARY и OPENSSL_CRYPTO_LIBRARY: Указание CMake местоположения этих конкретных библиотек
  • LINK_WITH_STATIC_LIBRARIES: Линковка только с статическими версиями системных библиотек

macOS

Если вы хотите работать с Xcode, вы можете создать проект Xcode с помощью ключа -G Xcode.

# Создайте и настройте каталог сборки
$ mkdir build && cd build
$ cmake -G Xcode ..

[!TIP] Поддержка универсальных двоичных файлов:

Если вам требуется создать универсальный двоичный файл для macOS 11.0+, CMake автоматически настроит всё это, если вы используете -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64", при конфигурировании.

[Устарело] Если вам требуется создать универсальный двоичный файл для Mac OS X (10.4.4 ~ 10.6), CMake автоматически настроит всё это, если вы используете -DCMAKE_OSX_ARCHITECTURES="i386;x86_64", при конфигурировании.

iOS

  1. Получите файл toolchain для iOS:

Вы можете использовать существующий файл toolchain, такой как ios-cmake или написать свой собственный.2. Укажите файл toolchain и имя системы:

  • Переменная CMAKE_TOOLCHAIN_FILE указывает на файл toolchain для iOS.
  • Переменная CMAKE_SYSTEM_NAME должна быть установлена в значение iOS.
  1. Пример команды:

Предположим, что вы используете toolchain ios-cmake, команда может выглядеть так:

cmake -G Xcode -DCMAKE_TOOLCHAIN_FILE={ПУТЬ}/ios.toolchain.cmake -DCMAKE_SYSTEM_NAME=iOS -DPLATFORM=OS64 ..
  1. Сборка проекта:

После генерации проекта откройте файл .xcodeproj в Xcode, выберите ваше устройство iOS или симулятор как целевой объект, а затем соберите проект.

Android

Извлечение toolchain из NDK с помощью скрипта make-standalone-toolchain.sh. Опционально, кросс-компиляция и установка OpenSSL внутри него. Затем создайте файл toolchain CMake, который настраивает пути до вашего кросс-компилятора (замените {ПУТЬ} полным путём до toolchain):

cmake -DCMAKE_TOOLCHAIN_FILE={ПУТЬ}/android.toolchain.cmake ..

MinGW

Установите(CMAKE_SYSTEM_NAME Windows) Установите(CMAKE_SYSTEM_VERSION 5.2)

Установите(CMAKE_C_COMPILER {ПУТЬ}/mingw32-gcc.exe) Установите(CMAKE_CXX_COMPILER {ПУТЬ}/mingw32-g++.exe) Установите(CMAKE_FIND_ROOT_PATH {ПУТЬ}/sysroot/)

Установите(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) Установите(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) Установите(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

Добавьте -DCMAKE_TOOLCHAIN_FILE={pathToToolchainFile} в команду cmake при конфигурировании.Если вы хотите скомпилировать библиотеку в окружении MinGW с включённой поддержкой SSH, вам может потребоваться передать -DCMAKE_LIBRARY_PATH="${MINGW_PREFIX}/${MINGW_CHOST}/lib/" при вызове CMake во время конфигурации. Это связано с тем, что CMake по умолчанию не может найти библиотеки Win32 в папках MinGW, и вы можете получить сообщение об ошибке, указывающее на то, что CMake не смог распознать библиотеку ws2_32.Другой вариант — установить пакет msys2-w32api-runtime до конфигурирования. Этот пакет устанавливает библиотеки Win32 в папку /usr/lib, которая по умолчанию распознается как путь к библиотекам CMake. Обратите внимание, однако, что этот пакет предназначен для подсистемы MSYS, которая отличается от MinGW.

Привязки к языку

Здесь представлены привязки к libgit2, доступные в настоящее время: ```Обратите внимание, что пути {ПУТЬ}, `{pathToToolchainFile}`, `${MINGW_PREFIX}/${MINGW_CHOST}/lib/` остаются без изменения согласно правилам перевода.

Мы рады новым участникам! У нас есть несколько задач, помеченных как "готовых для взятия" и "лёгких исправлений", которые являются хорошими местами для начала работы. Подробнее смотрите наш список высокоургентных проектов.

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

Лицензия

libgit2 распространяется под лицензией GPL2 с исключением по поводу связи. Это значит, что вы можете использовать библиотеку и связывать её с любыми программами, будь то проприетарные или открытые; платные или бесплатные. Однако, если вы модифицируете сам libgit2, вам необходимо распространять исходный код вашей модификации.

См. файл COPYING для полного текста лицензии.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

libgit2 — это портативная реализация основных методов Git на чистом C, представленная в виде библиотеки, которую можно подключить, с надёжным API, что позволяет встроить функциональность Git в ваше приложение. Развернуть Свернуть
C и 5 других языков
Zlib
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/fibjs-libgit2.git
git@api.gitlife.ru:oschina-mirror/fibjs-libgit2.git
oschina-mirror
fibjs-libgit2
fibjs-libgit2
main