A short permissive license, compatible with GPL. Requires altered source versions to be documented as such.
Статус сборки | |
---|---|
Сборка ветки main |
|
Сборка ветки v1.9 |
|
Сборка ветки v1.8 |
|
Ночные сборки |
|
Содержание ==========* Usage of libgit2
Большинство этих инструкций предполагает, что вы пишете приложение
на C и хотите использовать libgit2
напрямую. Если вы не
используете C, а пишете на другом языке или платформе, такой как .NET,
Node.js или Ruby, то скорее всего есть "языковая привязка", которую можно использовать для выполнения сложных задач вызова в нативный код.
Но если вы хотите использовать libgit2
напрямую — потому что вы строите
приложение на C — то вы можете воспользоваться существующими двоичными версиями.
Есть пакеты для менеджеров пакетов
vcpkg и
conan.
И libgit2
доступен в
Homebrew и большинстве дистрибутивов Linux.
Однако эти версии могут быть устаревшими, и мы рекомендуем использовать последнюю версию, если возможно. К счастью, сборка libgit2
не представляет особого труда.
Необходимые условия для сборки libgit2
:
PATH
.PATH
.libgit2
использует C90 и должна собираться на большинстве компиляторов.
Сборка1. Создайте каталог сборки под директорией исходного кода libgit2, и перейдите в него: mkdir build && cd build
2. Создайте среду сборки CMake: cmake ..
3. Выполните сборку libgit2: cmake --build .
Встретили трудности с этими шагами? Прочтите наш руководство по решению проблем. Более подробные указания по сборке доступны ниже.
Общение с нами
#libgit2
.Получение помощи
Если у вас есть вопросы по библиотеке, пожалуйста, проверьте документацию API.
Если у вас все еще остаются вопросы, свяжитесь с нами на Slack или опубликуйте вопрос на StackOverflow (с меткой libgit2
).
Отчет о багах
Пожалуйста, создайте issue на GitHub и включите как можно больше информации. Если возможно, предоставьте пример кода, который демонстрирует проблему. Если вы видите ошибку только в конкретном репозитории, пожалуйста, предоставьте ссылку на него, если это возможно.
Мы просим вас не открывать issue на GitHub для получения помощи, только для отчета о багах.
Отчет о проблемах безопасности
Libgit2 предоставляет вам возможность управления репозиториями Git на вашем выборе языка программирования. Она используется в производстве для обеспечения множества приложений, включая GitHub.com, Plastic SCM и Azure DevOps.
Целью не является замена программы git или её команд пользователя. Некоторые API похожи на команды внутренней работы системы Git, поскольку они хорошо согласуются с концепциями системы Git, но большинство команд, которые пользователи могут вводить, находятся вне области этой библиотеки.
Библиотека предоставляет:
Как libgit2 является исключительно потребителем системы Git, нам приходится адаптироваться к изменениям, внесённым выше по течению. Это имеет два основных последствия:* Некоторые изменения могут потребовать от нас изменения предоставляемых интерфейсов. Хотя мы стараемся реализовывать функции таким образом, чтобы они были универсальными и требовали минимальных изменений в будущем, мы не можем гарантировать полностью стабильный API.
Хотя библиотека обеспечивает функциональность Git с очень небольшим количеством зависимостей, некоторые рекомендованные зависимости используются для повышения производительности или полной функциональности.
Библиотека должна отслеживать некоторое глобальное состояние. Вызовите
git_libgit2_init();
перед тем как использовать любую другую функцию libgit2. Этот метод можно вызывать несколько раз. Соответствующее количество вызовов
git_libgit2_shutdown();
освободит ресурсы. Учитывайте, что если у вас есть рабочие потоки, вы должны вызвать git_libgit2_shutdown
после того, как эти потоки завершат свою работу. Если вам требуется помощь в координации этого процесса, просто сделайте так, чтобы рабочие потоки вызывали git_libgit2_init
при запуске и git_libgit2_shutdown
при завершении работы.
См. многопоточность для получения информации.
См. конвенции для общего представления внешних и внутренних API/правил оформления кода, которые мы используем.
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
: Линковка только с статическими версиями системных библиотекЕсли вы хотите работать с 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"
, при конфигурировании.
Вы можете использовать существующий файл toolchain, такой как ios-cmake или написать свой собственный.2. Укажите файл toolchain и имя системы:
CMAKE_TOOLCHAIN_FILE
указывает на файл toolchain для iOS.CMAKE_SYSTEM_NAME
должна быть установлена в значение iOS
.Предположим, что вы используете toolchain ios-cmake
, команда может выглядеть так:
cmake -G Xcode -DCMAKE_TOOLCHAIN_FILE={ПУТЬ}/ios.toolchain.cmake -DCMAKE_SYSTEM_NAME=iOS -DPLATFORM=OS64 ..
После генерации проекта откройте файл .xcodeproj
в Xcode, выберите ваше устройство iOS или симулятор как целевой объект, а затем соберите проект.
Извлечение toolchain из NDK с помощью скрипта make-standalone-toolchain.sh
.
Опционально, кросс-компиляция и установка OpenSSL внутри него. Затем создайте файл toolchain CMake, который настраивает пути до вашего кросс-компилятора (замените {ПУТЬ}
полным путём до toolchain):
cmake -DCMAKE_TOOLCHAIN_FILE={ПУТЬ}/android.toolchain.cmake ..
Установите(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 )