LibGit2
Модуль LibGit2 предоставляет привязки к libgit2, портативной библиотеке C, которая реализует основные функции для системы управления версиями Git. Эти привязки в настоящее время используются для работы менеджера пакетов Julia. Ожидается, что этот модуль в конечном итоге будет перемещен в отдельный пакет.
Functionality
Некоторые из этих документов предполагают наличие предварительных знаний о API libgit2. Для получения дополнительной информации о некоторых объектах и методах, упомянутых здесь, обратитесь к upstream libgit2 API reference.
LibGit2.Buffer
— TypeLibGit2.Buffer
Буфер данных для экспорта данных из libgit2. Соответствует структуре git_buf
.
При получении данных из LibGit2 типичное использование будет выглядеть следующим образом:
buf_ref = Ref(Buffer())
@check ccall(..., (Ptr{Buffer},), buf_ref)
# операция над buf_ref
free(buf_ref)
В частности, обратите внимание, что LibGit2.free
должен быть вызван после этого на объекте Ref
.
LibGit2.CheckoutOptions
— TypeLibGit2.CheckoutOptions
Соответствует структуре git_checkout_options
.
Поля представляют собой:
version
: версия используемой структуры, на случай, если это изменится позже. На данный момент всегда1
.checkout_strategy
: определяет, как обрабатывать конфликты и следует ли принудительно выполнять checkout/воссоздавать отсутствующие файлы.disable_filters
: если ненулевое, не применять фильтры, такие как CLRF (для преобразования перевода строк файлов между UNIX и DOS).dir_mode
: режим чтения/записи/доступа для любых каталогов, участвующих в checkout. По умолчанию0755
.file_mode
: режим чтения/записи/доступа для любых файлов, участвующих в checkout. По умолчанию0755
или0644
, в зависимости от блоба.file_open_flags
: битовые флаги, используемые для открытия любых файлов во время checkout.notify_flags
: Флаги для того, о каких конфликтах пользователь должен быть уведомлен.notify_cb
: Необязательная функция обратного вызова для уведомления пользователя, если возникает конфликт при checkout. Если эта функция возвращает ненулевое значение, checkout будет отменен.notify_payload
: Полезная нагрузка для функции обратного вызова уведомления.progress_cb
: Необязательная функция обратного вызова для отображения прогресса checkout.progress_payload
: Полезная нагрузка для функции обратного вызова прогресса.paths
: Если не пусто, описывает, какие пути искать во время checkout. Если пусто, checkout будет выполнен для всех файлов в репозитории.baseline
: Ожидаемое содержимоеworkdir
, зафиксированное в (указателе на)GitTree
. По умолчанию соответствует состоянию дерева на HEAD.baseline_index
: Ожидаемое содержимоеworkdir
, зафиксированное в (указателе на)GitIndex
. По умолчанию соответствует состоянию индекса на HEAD.target_directory
: Если не пусто, выполнить checkout в этот каталог вместоworkdir
.ancestor_label
: В случае конфликтов, имя стороны общего предка.our_label
: В случае конфликтов, имя "нашей" стороны.their_label
: В случае конфликтов, имя "их" стороны.perfdata_cb
: Необязательная функция обратного вызова для отображения данных о производительности.perfdata_payload
: Полезная нагрузка для функции обратного вызова производительности.
LibGit2.CloneOptions
— TypeLibGit2.CloneOptions
Соответствует структуре git_clone_options
.
Поля представляют собой:
version
: версия используемой структуры, на случай, если это изменится позже. На данный момент всегда1
.checkout_opts
: Опции для выполнения проверки удаленного репозитория в рамках клонирования.fetch_opts
: Опции для выполнения предварительного получения удаленного репозитория в рамках клонирования.bare
: Если0
, клонировать полный удаленный репозиторий. Если ненулевое значение, выполнить "bare" клон, в котором нет локальной копии исходных файлов в репозитории, иgitdir
иworkdir
совпадают.localclone
: Флаг, указывающий, следует ли клонировать локальную базу данных объектов или выполнять получение. По умолчанию позволяет git решать. Он не будет использовать git-осведомленный транспорт для локального клона, но будет использовать его для URL, начинающихся сfile://
.checkout_branch
: Имя ветки для проверки. Если строка пуста, будет проверена ветка по умолчанию удаленного репозитория.repository_cb
: Необязательный обратный вызов, который будет использоваться для создания нового репозитория, в который выполняется клон.repository_cb_payload
: Полезная нагрузка для обратного вызова репозитория.remote_cb
: Необязательный обратный вызов, используемый для созданияGitRemote
перед выполнением клона из него.remote_cb_payload
: Полезная нагрузка для обратного вызова удаленного репозитория.
LibGit2.DescribeOptions
— TypeLibGit2.DescribeOptions
Соответствует структуре git_describe_options
.
Поля представляют собой:
version
: версия используемой структуры, на случай, если она изменится позже. На данный момент всегда1
.max_candidates_tags
: учитывайте это количество самых последних тегов вrefs/tags
, чтобы описать коммит. По умолчанию 10 (так что будут проверены 10 самых последних тегов, чтобы увидеть, описывают ли они коммит).describe_strategy
: следует ли учитывать все записи вrefs/tags
(эквивалентноgit-describe --tags
) или все записи вrefs/
(эквивалентноgit-describe --all
). По умолчанию отображаются только аннотированные теги. Если переданConsts.DESCRIBE_TAGS
, будут учитываться все теги, аннотированные или нет. Если переданConsts.DESCRIBE_ALL
, будет учитываться любой реф вrefs/
.pattern
: учитывайте только теги, которые соответствуютpattern
. Поддерживает расширение glob.only_follow_first_parent
: при нахождении расстояния от соответствующей ссылки до описанного объекта учитывайте только расстояние от первого родителя.show_commit_oid_as_fallback
: если не удается найти соответствующую ссылку, которая описывает коммит, покажитеGitHash
коммита вместо того, чтобы выдать ошибку (поведение по умолчанию).
LibGit2.DescribeFormatOptions
— TypeLibGit2.DescribeFormatOptions
Соответствует структуре git_describe_format_options
.
Поля представляют собой:
version
: версия используемой структуры, на случай, если она изменится позже. На данный момент всегда1
.abbreviated_size
: нижняя граница размера сокращенногоGitHash
, который следует использовать, по умолчанию7
.always_use_long_format
: установите в1
, чтобы использовать длинный формат для строк, даже если можно использовать короткий формат.dirty_suffix
: если установлено, это будет добавлено в конец строки описания, еслиworkdir
грязный.
LibGit2.DiffDelta
— TypeLibGit2.DiffDelta
Описание изменений для одной записи. Соответствует структуре git_diff_delta
.
Поля представляют собой:
status
: Один изConsts.DELTA_STATUS
, указывающий, был ли файл добавлен/изменен/удален.flags
: Флаги для дельты и объектов с каждой стороны. Определяет, следует ли рассматривать файл(ы) как бинарные/текстовые, существуют ли они с каждой стороны диффа и известны ли идентификаторы объектов как корректные.similarity
: Используется для указания, был ли файл переименован или скопирован.nfiles
: Количество файлов в дельте (например, если дельта была выполнена на идентификаторе коммита подмодуля, она может содержать более одного файла).old_file
:DiffFile
, содержащий информацию о файле(ах) до изменений.new_file
:DiffFile
, содержащий информацию о файле(ах) после изменений.
LibGit2.DiffFile
— TypeLibGit2.DiffFile
Описание одной стороны дельты. Соответствует структуре git_diff_file
.
Поля представляют:
id
:GitHash
элемента в диффе. Если элемент пуст на этой стороне диффа (например, если дифф касается удаления файла), это будетGitHash(0)
.path
: путь, заканчивающийся наNULL
, к элементу относительно рабочего каталога репозитория.size
: размер элемента в байтах.flags
: комбинация флаговgit_diff_flag_t
.i
-й бит этого целого числа устанавливаетi
-й флаг.mode
: режимstat
для элемента.id_abbrev
: присутствует только в версиях LibGit2, равных или более новых, чем0.25.0
. Длина поляid
, когда оно преобразовано с помощьюstring
. Обычно равноOID_HEXSZ
(40).
LibGit2.DiffOptionsStruct
— TypeLibGit2.DiffOptionsStruct
Соответствует структуре git_diff_options
.
Поля представляют собой:
version
: версия используемой структуры, на случай, если она изменится позже. На данный момент всегда1
.flags
: флаги, контролирующие, какие файлы будут отображаться в диффе. По умолчаниюDIFF_NORMAL
.ignore_submodules
: следует ли учитывать файлы в подмодулях или нет. По умолчаниюSUBMODULE_IGNORE_UNSPECIFIED
, что означает, что конфигурация подмодуля будет контролировать, будет ли он отображаться в диффе или нет.pathspec
: путь к файлам, которые следует включить в дифф. По умолчанию используются все файлы в репозитории.notify_cb
: необязательный обратный вызов, который уведомит пользователя об изменениях в диффе по мере добавления дельт файлов.progress_cb
: необязательный обратный вызов, который будет отображать прогресс диффа. Актуально только для версий libgit2 не ниже 0.24.0.payload
: полезная нагрузка, передаваемая вnotify_cb
иprogress_cb
.context_lines
: количество неизмененных строк, используемых для определения границ хунка. Это также количество строк, которые будут показаны до/после хунка для предоставления контекста. По умолчанию 3.interhunk_lines
: максимальное количество неизмененных строк между двумя отдельными хунками, разрешенное перед объединением хунков. По умолчанию 0.id_abbrev
: устанавливает длину сокращенногоGitHash
для печати. По умолчанию7
.max_size
: максимальный размер файла блоба. Выше этого размера он будет рассматриваться как бинарный блоб. По умолчанию 512 МБ.old_prefix
: виртуальный каталог файлов, в который помещаются старые файлы с одной стороны диффа. По умолчанию"a"
.new_prefix
: виртуальный каталог файлов, в который помещаются новые файлы с одной стороны диффа. По умолчанию"b"
.
LibGit2.FetchHead
— TypeLibGit2.FetchHead
Содержит информацию о HEAD во время извлечения, включая имя и URL ветки, из которой было извлечено, oid HEAD и информацию о том, был ли извлеченный HEAD объединен локально.
Поля представляют собой:
name
: Имя в локальной базе данных ссылок извлечения, например,"refs/heads/master"
.url
: URL извлеченного HEAD.oid
:GitHash
конца извлеченного HEAD.ismerge
: Булевый флаг, указывающий, были ли изменения на удаленном сервере объединены с локальной копией или нет. Еслиtrue
, локальная копия актуальна по сравнению с удаленным извлеченным HEAD.
LibGit2.FetchOptions
— TypeLibGit2.FetchOptions
Соответствует структуре git_fetch_options
.
Поля представляют собой:
version
: версия используемой структуры, на случай, если она изменится позже. На данный момент всегда1
.callbacks
: удаленные обратные вызовы, которые следует использовать во время извлечения.prune
: следует ли выполнять очистку после извлечения или нет. По умолчанию используется настройка изGitConfig
.update_fetchhead
: следует ли обновлятьFetchHead
после извлечения. По умолчанию выполняется обновление, что является нормальным поведением git.download_tags
: следует ли загружать теги, присутствующие на удаленном сервере, или нет. По умолчанию запрашиваются теги для объектов, которые все равно загружаются с сервера.proxy_opts
: параметры для подключения к удаленному серверу через прокси. См.ProxyOptions
. Присутствует только в версиях libgit2, более новых или равных 0.25.0.custom_headers
: любые дополнительные заголовки, необходимые для извлечения. Присутствует только в версиях libgit2, более новых или равных 0.24.0.
LibGit2.GitAnnotated
— TypeGitAnnotated(repo::GitRepo, commit_id::GitHash)
GitAnnotated(repo::GitRepo, ref::GitReference)
GitAnnotated(repo::GitRepo, fh::FetchHead)
GitAnnotated(repo::GitRepo, committish::AbstractString)
Аннотированное git-сообщение содержит информацию о том, как оно было найдено и почему, так что операции rebase или merge имеют больше информации о контексте коммита. Файлы конфликтов содержат информацию о конфликтующих исходных/целевых ветках в слиянии, например. Аннотированный коммит может ссылаться на вершину удаленной ветки, например, когда передан FetchHead
, или на голову ветки, описанную с помощью GitReference
.
LibGit2.GitBlame
— TypeGitBlame(repo::GitRepo, path::AbstractString; options::BlameOptions=BlameOptions())
Создайте объект GitBlame
для файла по пути path
, используя информацию о изменениях, полученную из истории repo
. Объект GitBlame
фиксирует, кто изменил какие части файла, когда и как. Параметр options
управляет тем, как разделять содержимое файла и какие коммиты исследовать - смотрите BlameOptions
для получения дополнительной информации.
LibGit2.GitBlob
— TypeGitBlob(repo::GitRepo, hash::AbstractGitHash)
GitBlob(repo::GitRepo, spec::AbstractString)
Возвращает объект GitBlob
из repo
, указанный hash
/spec
.
hash
— это полный (GitHash
) или частичный (GitShortHash
) хеш.spec
— это текстовая спецификация: см. документацию git для полного списка.
LibGit2.GitCommit
— TypeGitCommit(repo::GitRepo, hash::AbstractGitHash)
GitCommit(repo::GitRepo, spec::AbstractString)
Возвращает объект GitCommit
из repo
, указанный hash
/spec
.
hash
— это полный (GitHash
) или частичный (GitShortHash
) хеш.spec
— это текстовая спецификация: см. документацию git для полного списка.
LibGit2.GitConfig
— TypeGitConfig(path::AbstractString, level::Consts.GIT_CONFIG=Consts.CONFIG_LEVEL_APP, force::Bool=false)
Создайте новый GitConfig
, загрузив информацию о конфигурации из файла по пути path
. См. addfile
для получения дополнительной информации о параметрах level
, repo
и force
.
GitConfig(repo::GitRepo)
Получите сохраненную конфигурацию для репозитория git repo
. Если у repo
нет установленного конкретного файла конфигурации, будет использована конфигурация git по умолчанию.
GitConfig(level::Consts.GIT_CONFIG=Consts.CONFIG_LEVEL_DEFAULT)
Получите конфигурацию git по умолчанию, загрузив глобальные и системные файлы конфигурации в приоритетную конфигурацию. Это можно использовать для доступа к параметрам конфигурации по умолчанию вне конкретного репозитория git.
LibGit2.GitHash
— TypeGitHash
Идентификатор объекта git, основанный на хеше sha-1. Это строка длиной 20 байт (40 шестнадцатеричных цифр), используемая для идентификации GitObject
в репозитории.
LibGit2.GitObject
— TypeGitObject(repo::GitRepo, hash::AbstractGitHash)
GitObject(repo::GitRepo, spec::AbstractString)
Верните указанный объект (GitCommit
, GitBlob
, GitTree
или GitTag
) из repo
, указанный hash
/spec
.
hash
— это полный (GitHash
) или частичный (GitShortHash
) хеш.spec
— это текстовая спецификация: смотрите документацию git для полного списка.
LibGit2.GitRemote
— TypeGitRemote(repo::GitRepo, rmt_name::AbstractString, rmt_url::AbstractString) -> GitRemote
Ищите удаленный git-репозиторий по его имени и URL. Использует рефспецификацию по умолчанию для получения.
Примеры
repo = LibGit2.init(repo_path)
remote = LibGit2.GitRemote(repo, "upstream", repo_url)
GitRemote(repo::GitRepo, rmt_name::AbstractString, rmt_url::AbstractString, fetch_spec::AbstractString) -> GitRemote
Ищите удаленный git-репозиторий, используя имя и URL репозитория, а также спецификации для того, как извлекать данные из удаленного репозитория (например, какую удаленную ветку извлекать).
Примеры
repo = LibGit2.init(repo_path)
refspec = "+refs/heads/mybranch:refs/remotes/origin/mybranch"
remote = LibGit2.GitRemote(repo, "upstream", repo_url, refspec)
LibGit2.GitRemoteAnon
— FunctionGitRemoteAnon(repo::GitRepo, url::AbstractString) -> GitRemote
Ищите удаленный git-репозиторий, используя только его URL, а не его имя.
Примеры
repo = LibGit2.init(repo_path)
remote = LibGit2.GitRemoteAnon(repo, repo_url)
LibGit2.GitRepo
— TypeLibGit2.GitRepo(path::AbstractString)
Открыть git-репозиторий по адресу path
.
LibGit2.GitRepoExt
— FunctionLibGit2.GitRepoExt(path::AbstractString, flags::Cuint = Cuint(Consts.REPOSITORY_OPEN_DEFAULT))
Открыть git-репозиторий по path
с расширенными параметрами управления (например, если текущий пользователь должен быть членом специальной группы доступа для чтения path
).
LibGit2.GitRevWalker
— TypeGitRevWalker(repo::GitRepo)
GitRevWalker
проходит через ревизии (т.е. коммиты) git-репозитория repo
. Это коллекция коммитов в репозитории, и она поддерживает итерацию и вызовы к LibGit2.map
и LibGit2.count
(например, LibGit2.count
можно использовать для определения, какой процент коммитов в репозитории был сделан определенным автором).
cnt = LibGit2.with(LibGit2.GitRevWalker(repo)) do walker
LibGit2.count((oid,repo)->(oid == commit_oid1), walker, oid=commit_oid1, by=LibGit2.Consts.SORT_TIME)
end
Здесь LibGit2.count
находит количество коммитов вдоль прохода с определенным GitHash
. Поскольку GitHash
уникален для коммита, cnt
будет равен 1
.
LibGit2.GitShortHash
— TypeGitShortHash(hash::GitHash, len::Integer)
Сокращенный идентификатор объекта git, который можно использовать для идентификации объекта git, когда он уникален, состоящий из первых len
шестнадцатеричных цифр hash
(оставшиеся цифры игнорируются).
LibGit2.GitSignature
— TypeLibGit2.GitSignature
Это обертка Julia вокруг указателя на объект git_signature
.
LibGit2.GitStatus
— TypeLibGit2.GitStatus(repo::GitRepo; status_opts=StatusOptions())
Соберите информацию о статусе каждого файла в репозитории git repo
(например, изменен ли файл, добавлен в индекс и т.д.). status_opts
можно использовать для установки различных параметров, например, следует ли учитывать неотслеживаемые файлы или включать подмодули. См. StatusOptions
для получения дополнительной информации.
LibGit2.GitTag
— TypeGitTag(repo::GitRepo, hash::AbstractGitHash)
GitTag(repo::GitRepo, spec::AbstractString)
Возвращает объект GitTag
из repo
, указанный hash
/spec
.
hash
— это полный (GitHash
) или частичный (GitShortHash
) хеш.spec
— это текстовая спецификация: см. документацию git для полного списка.
LibGit2.GitTree
— TypeGitTree(repo::GitRepo, hash::AbstractGitHash)
GitTree(repo::GitRepo, spec::AbstractString)
Возвращает объект GitTree
из repo
, указанный hash
/spec
.
hash
— это полный (GitHash
) или частичный (GitShortHash
) хеш.spec
— это текстовая спецификация: смотрите документацию git для полного списка.
LibGit2.IndexEntry
— TypeLibGit2.IndexEntry
Внутренняя репрезентация записи файла в индексе. Соответствует структуре git_index_entry
.
LibGit2.IndexTime
— TypeLibGit2.IndexTime
Соответствует структуре git_index_time
.
LibGit2.BlameOptions
— TypeLibGit2.BlameOptions
Соответствует структуре git_blame_options
.
Поля представляют собой:
version
: версия используемой структуры, на случай, если она изменится позже. На данный момент всегда1
.flags
: один изConsts.BLAME_NORMAL
илиConsts.BLAME_FIRST_PARENT
(другие флаги blame еще не реализованы в libgit2).min_match_characters
: минимальное количество алфавитно-цифровых символов, которые должны измениться в коммите, чтобы это изменение было связано с этим коммитом. По умолчанию 20. Вступает в силу только если используется один из флаговConsts.BLAME_*_COPIES
, которые libgit2 еще не реализовал.newest_commit
:GitHash
самого нового коммита, с которого следует смотреть изменения.oldest_commit
:GitHash
самого старого коммита, с которого следует смотреть изменения.min_line
: первая строка файла, с которой начинается blame. По умолчанию1
.max_line
: последняя строка файла, к которой следует применять blame. По умолчанию0
, что означает последнюю строку файла.
LibGit2.MergeOptions
— TypeLibGit2.MergeOptions
Соответствует структуре git_merge_options
.
Поля представляют собой:
version
: версия используемой структуры, на случай, если она изменится позже. На данный момент всегда1
.flags
: перечисление для флагов, описывающих поведение слияния. Определено вgit_merge_flag_t
. Соответствующее перечисление Julia -GIT_MERGE
и имеет значения:MERGE_FIND_RENAMES
: определяет, было ли переименовано файл между общим предком и стороной "наша" или "их". Позволяет слияния, где файл был переименован.MERGE_FAIL_ON_CONFLICT
: немедленно выйти, если обнаружен конфликт, а не пытаться его разрешить.MERGE_SKIP_REUC
: не записывать расширение REUC в индекс, полученный в результате слияния.MERGE_NO_RECURSIVE
: если сливаемые коммиты имеют несколько баз слияния, использовать первую, а не пытаться рекурсивно объединить базы.
rename_threshold
: насколько похожи два файла, чтобы считать один переименованием другого. Это целое число, которое устанавливает процентное сходство. По умолчанию 50.target_limit
: максимальное количество файлов для сравнения с целью поиска переименований. По умолчанию 200.metric
: необязательная пользовательская функция, используемая для определения сходства между двумя файлами для обнаружения переименований.recursion_limit
: верхний предел на количество слияний общих предков, которые необходимо выполнить, чтобы попытаться создать новую виртуальную базу слияния для слияния. По умолчанию нет предела. Это поле присутствует только в версиях libgit2 новее 0.24.0.default_driver
: драйвер слияния, который следует использовать, если обе стороны изменены. Это поле присутствует только в версиях libgit2 новее 0.25.0.file_favor
: как обрабатывать конфликтующие содержимое файлов для драйвераtext
.MERGE_FILE_FAVOR_NORMAL
: если обе стороны слияния имеют изменения в разделе, сделайте заметку о конфликте в индексе, которыйgit checkout
будет использовать для создания файла слияния, на который пользователь затем может сослаться для разрешения конфликтов. Это значение по умолчанию.MERGE_FILE_FAVOR_OURS
: если обе стороны слияния имеют изменения в разделе, используйте версию со стороны "наша" в индексе.MERGE_FILE_FAVOR_THEIRS
: если обе стороны слияния имеют изменения в разделе, используйте версию со стороны "их" в индексе.MERGE_FILE_FAVOR_UNION
: если обе стороны слияния имеют изменения в разделе, включите каждую уникальную строку с обеих сторон в файл, который помещается в индекс.
file_flags
: рекомендации по слиянию файлов.
LibGit2.ProxyOptions
— TypeLibGit2.ProxyOptions
Опции для подключения через прокси.
Соответствует структуре git_proxy_options
.
Поля представляют:
version
: версия используемой структуры, на случай, если это изменится позже. На данный момент всегда1
.proxytype
:enum
для типа прокси, который следует использовать. Определен вgit_proxy_t
. Соответствующий Julia enum -GIT_PROXY
и имеет значения:PROXY_NONE
: не пытаться установить соединение через прокси.PROXY_AUTO
: попытаться определить конфигурацию прокси из конфигурации git.PROXY_SPECIFIED
: подключиться, используя URL, указанный в полеurl
этой структуры.
По умолчанию используется автоматическое определение типа прокси.
url
: URL прокси.credential_cb
: указатель на функцию обратного вызова, которая будет вызвана, если удаленный сервер требует аутентификации для подключения.certificate_cb
: указатель на функцию обратного вызова, которая будет вызвана, если проверка сертификата не удалась. Это позволяет пользователю решить, продолжать ли подключение. Если функция возвращает1
, подключение будет разрешено. Если возвращает0
, подключение не будет разрешено. Отрицательное значение может быть использовано для возврата ошибок.payload
: полезная нагрузка, которая будет предоставлена двум функциям обратного вызова.
Примеры
julia> fo = LibGit2.FetchOptions(
proxy_opts = LibGit2.ProxyOptions(url = Cstring("https://my_proxy_url.com")))
julia> fetch(remote, "master", options=fo)
LibGit2.PushOptions
— TypeLibGit2.PushOptions
Соответствует структуре git_push_options
.
Поля представляют собой:
version
: версия используемой структуры, на случай, если она изменится позже. На данный момент всегда1
.parallelism
: если необходимо создать файл пакета, эта переменная устанавливает количество рабочих потоков, которые будут запущены сборщиком пакетов. Если0
, сборщик пакетов автоматически установит количество используемых потоков. По умолчанию1
.callbacks
: обратные вызовы (например, для аутентификации с удаленным сервером), которые будут использоваться для отправки.proxy_opts
: актуально только если версия LibGit2 больше или равна0.25.0
. Устанавливает параметры для использования прокси для связи с удаленным сервером. См.ProxyOptions
для получения дополнительной информации.custom_headers
: актуально только если версия LibGit2 больше или равна0.24.0
. Дополнительные заголовки, необходимые для операции отправки.
LibGit2.RebaseOperation
— TypeLibGit2.RebaseOperation
Описывает одну инструкцию/операцию, которая должна быть выполнена во время ребейза. Соответствует структуре git_rebase_operation
.
Поля представляют:
optype
: тип операции ребейза, которая в настоящее время выполняется. Варианты:REBASE_OPERATION_PICK
: выбрать коммит, о котором идет речь.REBASE_OPERATION_REWORD
: выбрать коммит, о котором идет речь, но переписать его сообщение с помощью подсказки.REBASE_OPERATION_EDIT
: выбрать коммит, о котором идет речь, но позволить пользователю редактировать содержимое коммита и его сообщение.REBASE_OPERATION_SQUASH
: объединить коммит, о котором идет речь, с предыдущим коммитом. Сообщения коммитов будут объединены.REBASE_OPERATION_FIXUP
: объединить коммит, о котором идет речь, с предыдущим коммитом. Будет использовано только сообщение предыдущего коммита.REBASE_OPERATION_EXEC
: не выбирать коммит. Выполнить команду и продолжить, если команда завершится успешно.
id
:GitHash
коммита, над которым ведется работа на этом этапе ребейза.exec
: в случае использованияREBASE_OPERATION_EXEC
команда, которую нужно выполнить на этом этапе (например, запуск тестового набора после каждого коммита).
LibGit2.RebaseOptions
— TypeLibGit2.RebaseOptions
Соответствует структуре git_rebase_options
.
Поля представляют собой:
version
: версия используемой структуры, на случай, если это изменится позже. На данный момент всегда1
.quiet
: информировать другие git-клиенты, помогающие с/работающие над ребейзом, что ребейз должен быть выполнен "тихо". Используется для совместимости. По умолчанию1
.inmemory
: начать ребейз в памяти. Вызывающие функции, работающие над ребейзом, могут проходить через его этапы и фиксировать любые изменения, но не могут перематывать HEAD или обновлять репозиторий.workdir
не будет изменен. Присутствует только в версиях libgit2, более новых или равных 0.24.0.rewrite_notes_ref
: имя ссылки на заметки, которые будут использоваться для переписывания заметок коммита по завершении ребейза.merge_opts
: параметры слияния, контролирующие, как деревья будут объединяться на каждом этапе ребейза. Присутствует только в версиях libgit2, более новых или равных 0.24.0.checkout_opts
: параметры проверки для записи файлов при инициализации ребейза, прохождении через него и его отмене. См.CheckoutOptions
для получения дополнительной информации.
LibGit2.RemoteCallbacks
— TypeLibGit2.RemoteCallbacks
Настройки обратных вызовов. Соответствует структуре git_remote_callbacks
.
LibGit2.SignatureStruct
— TypeLibGit2.SignatureStruct
Подпись действия (например, для коммитеров, теггеров и т. д.). Соответствует структуре git_signature
.
Поля представляют собой:
name
: Полное имя коммитера или автора коммита.email
: Электронная почта, по которой можно связаться с коммитером/автором.when
: структураTimeStruct
, указывающая, когда коммит был создан/закоммичен в репозиторий.
LibGit2.StatusEntry
— TypeLibGit2.StatusEntry
Предоставляет различия между файлом, как он существует в HEAD, и индексом, а также предоставляет различия между индексом и рабочим каталогом. Соответствует структуре git_status_entry
.
Поля представляют:
status
: содержит флаги состояния для файла, указывая, является ли он актуальным или был изменен каким-либо образом в индексе или рабочем дереве.head_to_index
: указатель наDiffDelta
, который инкапсулирует различия между файлом, как он существует в HEAD, и в индексе.index_to_workdir
: указатель наDiffDelta
, который инкапсулирует различия между файлом, как он существует в индексе, и вworkdir
.
LibGit2.StatusOptions
— TypeLibGit2.StatusOptions
Опции для управления тем, как git_status_foreach_ext()
будет вызывать обратные вызовы. Соответствует структуре git_status_opt_t
.
Поля представляют собой:
version
: версия используемой структуры, на случай, если это изменится позже. На данный момент всегда1
.show
: флаг, указывающий, какие файлы проверять и в каком порядке. По умолчаниюConsts.STATUS_SHOW_INDEX_AND_WORKDIR
.flags
: флаги для управления любыми обратными вызовами, используемыми в вызове статуса.pathspec
: массив путей, используемых для сопоставления путей. Поведение сопоставления путей будет варьироваться в зависимости от значенийshow
иflags
.baseline
- это дерево, которое будет использоваться для сравнения с рабочим каталогом и индексом; по умолчанию HEAD.
LibGit2.StrArrayStruct
— TypeLibGit2.StrArrayStruct
Представление массива строк в LibGit2. Соответствует структуре git_strarray
.
При получении данных из LibGit2 типичное использование будет выглядеть следующим образом:
sa_ref = Ref(StrArrayStruct())
@check ccall(..., (Ptr{StrArrayStruct},), sa_ref)
res = convert(Vector{String}, sa_ref[])
free(sa_ref)
В частности, обратите внимание, что LibGit2.free
следует вызывать после этого на объекте Ref
.
Напротив, при передаче вектора строк в LibGit2 обычно проще полагаться на неявное преобразование:
strs = String[...]
@check ccall(..., (Ptr{StrArrayStruct},), strs)
Обратите внимание, что вызов free
не требуется, так как данные выделяются Julia.
LibGit2.TimeStruct
— TypeLibGit2.TimeStruct
Время в подписи. Соответствует структуре git_time
.
LibGit2.addfile
— Functionaddfile(cfg::GitConfig, path::AbstractString,
level::Consts.GIT_CONFIG=Consts.CONFIG_LEVEL_APP,
repo::Union{GitRepo, Nothing} = nothing,
force::Bool=false)
Добавляет существующий файл конфигурации git, расположенный по пути path
, в текущий GitConfig
cfg
. Если файл не существует, он будет создан.
level
устанавливает уровень приоритета конфигурации git и определяется
repo
является необязательным репозиторием, чтобы разрешить парсинг условных включений.- Если
force
равноfalse
и конфигурация для данного уровня приоритета уже существует,
addfile
вызовет ошибку. Если force
равно true
, существующая конфигурация будет заменена на ту, что в файле по пути path
.
LibGit2.add!
— Functionadd!(repo::GitRepo, files::AbstractString...; flags::Cuint = Consts.INDEX_ADD_DEFAULT)
add!(idx::GitIndex, files::AbstractString...; flags::Cuint = Consts.INDEX_ADD_DEFAULT)
Добавьте все файлы с путями, указанными в files
, в индекс idx
(или индекс repo
). Если файл уже существует, запись в индексе будет обновлена. Если файл еще не существует, он будет добавлен в индекс. files
может содержать шаблоны glob, которые будут расширены, и любые соответствующие файлы будут добавлены (если не установлен INDEX_ADD_DISABLE_PATHSPEC_MATCH
, см. ниже). Если файл был проигнорирован (в .gitignore
или в конфигурации), он не будет добавлен, если только он уже не отслеживается в индексе, в этом случае он будет обновлен. Ключевой аргумент flags
представляет собой набор битовых флагов, которые контролируют поведение в отношении проигнорированных файлов:
Consts.INDEX_ADD_DEFAULT
- по умолчанию, описано выше.Consts.INDEX_ADD_FORCE
- игнорировать существующие правила игнорирования и принудительно добавить файл в индекс, даже если он уже проигнорирован.Consts.INDEX_ADD_CHECK_PATHSPEC
- не может использоваться одновременно сINDEX_ADD_FORCE
. Проверяет, что каждый файл вfiles
, который существует на диске, не находится в списке игнорируемых. Если один из файлов игнорируется, функция вернетEINVALIDSPEC
.Consts.INDEX_ADD_DISABLE_PATHSPEC_MATCH
- отключить соответствие glob и добавлять в индекс только файлы, которые точно соответствуют путям, указанным вfiles
.
LibGit2.add_fetch!
— Functionadd_fetch!(repo::GitRepo, rmt::GitRemote, fetch_spec::String)
Добавляет fetch refspec для указанного rmt
. Этот refspec будет содержать информацию о том, какие ветки загружать.
Примеры
julia> LibGit2.add_fetch!(repo, remote, "upstream");
julia> LibGit2.fetch_refspecs(remote)
String["+refs/heads/*:refs/remotes/upstream/*"]
LibGit2.add_push!
— Functionadd_push!(repo::GitRepo, rmt::GitRemote, push_spec::String)
Добавляет push refspec для указанного rmt
. Этот refspec будет содержать информацию о том, какие ветки нужно отправить.
Примеры
julia> LibGit2.add_push!(repo, remote, "refs/heads/master");
julia> remote = LibGit2.get(LibGit2.GitRemote, repo, branch);
julia> LibGit2.push_refspecs(remote)
String["refs/heads/master"]
LibGit2.addblob!
— FunctionLibGit2.addblob!(repo::GitRepo, path::AbstractString)
Читает файл по path
и добавляет его в объектную базу данных repo
как отдельный блоб. Возвращает GitHash
полученного блоба.
Примеры
hash_str = string(commit_oid)
blob_file = joinpath(repo_path, ".git", "objects", hash_str[1:2], hash_str[3:end])
id = LibGit2.addblob!(repo, blob_file)
LibGit2.author
— Functionauthor(c::GitCommit)
Возвращает Signature
автора коммита c
. Автор — это человек, который внес изменения в соответствующий(ие) файл(ы). См. также committer
.
LibGit2.authors
— Functionauthors(repo::GitRepo) -> Vector{Signature}
Возвращает всех авторов коммитов в репозитории repo
.
Примеры
repo = LibGit2.GitRepo(repo_path)
repo_file = open(joinpath(repo_path, test_file), "a")
println(repo_file, commit_msg)
flush(repo_file)
LibGit2.add!(repo, test_file)
sig = LibGit2.Signature("TEST", "TEST@TEST.COM", round(time(), 0), 0)
commit_oid1 = LibGit2.commit(repo, "commit1"; author=sig, committer=sig)
println(repo_file, randstring(10))
flush(repo_file)
LibGit2.add!(repo, test_file)
commit_oid2 = LibGit2.commit(repo, "commit2"; author=sig, committer=sig)
# будет вектор [sig, sig]
auths = LibGit2.authors(repo)
LibGit2.branch
— Functionbranch(repo::GitRepo)
Эквивалентно git branch
. Создает новую ветку от текущего HEAD.
LibGit2.branch!
— Functionbranch!(repo::GitRepo, branch_name::AbstractString, commit::AbstractString=""; kwargs...)
Создайте новую ветку git в репозитории repo
. commit
— это GitHash
, в строковом формате, который будет началом новой ветки. Если commit
— это пустая строка, будет использован текущий HEAD.
Ключевые аргументы:
track::AbstractString=""
: имя удаленной ветки, которую должна отслеживать эта новая ветка, если такая есть. Если пусто (по умолчанию), удаленная ветка отслеживаться не будет.force::Bool=false
: еслиtrue
, создание ветки будет принудительным.set_head::Bool=true
: еслиtrue
, после завершения создания ветки голова ветки будет установлена как HEAD репозиторияrepo
.
Эквивалентно git checkout [-b|-B] <branch_name> [<commit>] [--track <track>]
.
Примеры
repo = LibGit2.GitRepo(repo_path)
LibGit2.branch!(repo, "new_branch", set_head=false)
LibGit2.checkout!
— Functioncheckout!(repo::GitRepo, commit::AbstractString=""; force::Bool=true)
Эквивалентно git checkout [-f] --detach <commit>
. Выполняет checkout git-коммита commit
(в виде строки GitHash
) в repo
. Если force
равно true
, принудительно выполняет checkout и отменяет все текущие изменения. Обратите внимание, что это отсоединяет текущий HEAD.
Примеры
repo = LibGit2.GitRepo(repo_path)
open(joinpath(LibGit2.path(repo), "file1"), "w") do f
write(f, "111
")
end
LibGit2.add!(repo, "file1")
commit_oid = LibGit2.commit(repo, "add file1")
open(joinpath(LibGit2.path(repo), "file1"), "w") do f
write(f, "112
")
end
# не сработает без force=true
# так как есть изменения в файле
LibGit2.checkout!(repo, string(commit_oid), force=true)
LibGit2.clone
— Functionclone(repo_url::AbstractString, repo_path::AbstractString, clone_opts::CloneOptions)
Клонируйте удаленный репозиторий по repo_url
(который может быть удаленным URL или путем на локальной файловой системе) в repo_path
(который должен быть путем на локальной файловой системе). Опции для клонирования, такие как необходимость выполнения "bare" клонирования или нет, задаются с помощью CloneOptions
.
Примеры
repo_url = "https://github.com/JuliaLang/Example.jl"
repo = LibGit2.clone(repo_url, "/home/me/projects/Example")
clone(repo_url::AbstractString, repo_path::AbstractString; kwargs...)
Клонировать удаленный репозиторий, расположенный по адресу repo_url
, в локальное файловое хранилище по пути repo_path
.
Ключевые аргументы:
branch::AbstractString=""
: какую ветку удаленного репозитория клонировать, если не ветку по умолчанию (обычноmaster
).isbare::Bool=false
: еслиtrue
, клонировать удаленный репозиторий как "bare", что сделаетrepo_path
самой git-директория вместоrepo_path/.git
. Это означает, что рабочее дерево не может быть проверено. Играет роль аргумента командной строки git--bare
.remote_cb::Ptr{Cvoid}=C_NULL
: обратный вызов, который будет использован для создания удаленного репозитория перед его клонированием. ЕслиC_NULL
(по умолчанию), попытка создать удаленный репозиторий не будет предпринята - предполагается, что он уже существует.credentials::Creds=nothing
: предоставляет учетные данные и/или настройки при аутентификации против частного репозитория.callbacks::Callbacks=Callbacks()
: предоставленные пользователем обратные вызовы и полезные нагрузки.
Эквивалентно git clone [-b <branch>] [--bare] <repo_url> <repo_path>
.
Примеры
repo_url = "https://github.com/JuliaLang/Example.jl"
repo1 = LibGit2.clone(repo_url, "test_path")
repo2 = LibGit2.clone(repo_url, "test_path", isbare=true)
julia_url = "https://github.com/JuliaLang/julia"
julia_repo = LibGit2.clone(julia_url, "julia_path", branch="release-0.6")
LibGit2.commit
— Functioncommit(repo::GitRepo, msg::AbstractString; kwargs...) -> GitHash
Обертка вокруг git_commit_create
. Создает коммит в репозитории repo
. msg
— это сообщение коммита. Возвращает OID нового коммита.
Ключевые аргументы:
refname::AbstractString=Consts.HEAD_FILE
: если не NULL, имя ссылки, которую нужно обновить, чтобы она указывала на новый коммит. Например,"HEAD"
обновит HEAD текущей ветки. Если ссылка еще не существует, она будет создана.author::Signature = Signature(repo)
— этоSignature
, содержащая информацию о человеке, который авторизовал коммит.committer::Signature = Signature(repo)
— этоSignature
, содержащая информацию о человеке, который закоммитил коммит в репозиторий. Не обязательно тот же, что иauthor
, например, еслиauthor
отправил патчcommitter
, который его закоммитил.tree_id::GitHash = GitHash()
— это git-дерево, которое будет использовано для создания коммита, показывающее его предков и связь с любой другой историей.tree
должно принадлежатьrepo
.parent_ids::Vector{GitHash}=GitHash[]
— это список коммитов поGitHash
, которые будут использоваться в качестве родительских коммитов для нового, и может быть пустым. Коммит может иметь несколько родителей, если это коммит слияния, например.
LibGit2.commit(rb::GitRebase, sig::GitSignature)
Зафиксируйте текущий патч в ребейзе rb
, используя sig
в качестве автора коммита. Не выдает сообщений, если коммит уже был применен.
LibGit2.committer
— Functioncommitter(c::GitCommit)
Возвращает Signature
коммитера коммита c
. Коммитер — это человек, который изначально зафиксировал изменения, автором которых является author
, но это не обязательно тот же человек, что и author
, например, если author
отправил патч коммитеру, который его зафиксировал.
LibGit2.count
— FunctionLibGit2.count(f::Function, walker::GitRevWalker; oid::GitHash=GitHash(), by::Cint=Consts.SORT_NONE, rev::Bool=false)
Используя GitRevWalker
walker
для "прогулки" по каждому коммиту в истории репозитория, найдите количество коммитов, которые возвращают true
, когда к ним применяется f
. Ключевые аргументы: * oid
: GitHash
коммита, с которого начинается прогулка. По умолчанию используется push_head!
и, следовательно, коммит HEAD и все его предки. * by
: Метод сортировки. По умолчанию сортировка не выполняется. Другие варианты - сортировка по топологии (LibGit2.Consts.SORT_TOPOLOGICAL
), сортировка по времени (LibGit2.Consts.SORT_TIME
, сначала самые древние) или сортировка в обратном порядке времени (LibGit2.Consts.SORT_REVERSE
, сначала самые недавние). * rev
: Нужно ли обратить отсортированный порядок (например, если используется топологическая сортировка).
Примеры
cnt = LibGit2.with(LibGit2.GitRevWalker(repo)) do walker
LibGit2.count((oid, repo)->(oid == commit_oid1), walker, oid=commit_oid1, by=LibGit2.Consts.SORT_TIME)
end
LibGit2.count
находит количество коммитов вдоль прогулки с определенным GitHash
commit_oid1
, начиная прогулку с этого коммита и двигаясь вперед во времени от него. Поскольку GitHash
уникален для коммита, cnt
будет равен 1
.
LibGit2.counthunks
— Functioncounthunks(blame::GitBlame)
Возвращает количество различных "хунков" с файлом. Хунк может содержать несколько строк. Хунк обычно представляет собой часть файла, которая была добавлена/изменена/удалена вместе, например, функция, добавленная в исходный файл, или внутренний цикл, который был оптимизирован из этой функции позже.
LibGit2.create_branch
— FunctionLibGit2.create_branch(repo::GitRepo, bname::AbstractString, commit_obj::GitCommit; force::Bool=false)
Создайте новую ветку в репозитории repo
с именем bname
, которая указывает на коммит commit_obj
(который должен быть частью repo
). Если force
равно true
, перезапишите существующую ветку с именем bname
, если она существует. Если force
равно false
и ветка с именем bname
уже существует, эта функция вызовет ошибку.
LibGit2.credentials_callback
— Functioncredential_callback(...) -> Cint
Функция обратного вызова учетных данных LibGit2, которая предоставляет различные функции получения учетных данных в зависимости от протокола соединения. Указатель payload_ptr
должен содержать объект LibGit2.CredentialPayload
, который будет отслеживать состояние и настройки.
allowed_types
содержит битовую маску значений LibGit2.Consts.GIT_CREDTYPE
, указывающую, какие методы аутентификации следует пытаться использовать.
Аутентификация учетных данных выполняется в следующем порядке (если поддерживается):
- SSH-агент
- Пара SSH-ключей (приватный/публичный)
- Имя пользователя/пароль в открытом виде
Если пользователю будет предложено ввести учетные данные, он может прервать запрос, нажав ^D
(нажимая клавишу управления вместе с клавишей d
).
Примечание: Из-за особенностей процедуры аутентификации libgit2
, когда аутентификация не удалась, эта функция вызывается снова без каких-либо указаний на то, была ли аутентификация успешной или нет. Чтобы избежать бесконечного цикла из-за повторного использования одних и тех же ошибочных учетных данных, мы будем отслеживать состояние с помощью полезной нагрузки.
Для получения дополнительных сведений см. руководство LibGit2 по аутентификации на сервере.
LibGit2.credentials_cb
— FunctionУказатель на функцию C для credentials_callback
LibGit2.default_signature
— FunctionВернуть объект подписи. Освободите его после использования.
LibGit2.delete_branch
— FunctionLibGit2.delete_branch(branch::GitReference)
Удаляет ветку, на которую указывает branch
.
LibGit2.diff_files
— Functiondiff_files(repo::GitRepo, branch1::AbstractString, branch2::AbstractString; kwarg...) -> Vector{AbstractString}
Показать, какие файлы изменились в репозитории git repo
между ветками branch1
и branch2
.
Ключевой аргумент:
filter::Set{Consts.DELTA_STATUS}=Set([Consts.DELTA_ADDED, Consts.DELTA_MODIFIED, Consts.DELTA_DELETED]))
, и он устанавливает параметры для диффа. По умолчанию показываются файлы, добавленные, измененные или удаленные.
Возвращает только имена файлов, которые изменились, а не их содержимое.
Примеры
LibGit2.branch!(repo, "branch/a")
LibGit2.branch!(repo, "branch/b")
# добавляем файл в репозиторий
open(joinpath(LibGit2.path(repo),"file"),"w") do f
write(f, "hello repo
")
end
LibGit2.add!(repo, "file")
LibGit2.commit(repo, "add file")
# возвращает ["file"]
filt = Set([LibGit2.Consts.DELTA_ADDED])
files = LibGit2.diff_files(repo, "branch/a", "branch/b", filter=filt)
# возвращает [] потому что существующие файлы не были изменены
filt = Set([LibGit2.Consts.DELTA_MODIFIED])
files = LibGit2.diff_files(repo, "branch/a", "branch/b", filter=filt)
Эквивалентно git diff --name-only --diff-filter=<filter> <branch1> <branch2>
.
LibGit2.entryid
— Functionentryid(te::GitTreeEntry)
Возвращает GitHash
объекта, на который ссылается te
.
LibGit2.entrytype
— Functionentrytype(te::GitTreeEntry)
Возвращает тип объекта, на который ссылается te
. Результат будет одним из типов, которые возвращает objtype
, например, GitTree
или GitBlob
.
LibGit2.fetch
— Functionfetch(rmt::GitRemote, refspecs; options::FetchOptions=FetchOptions(), msg="")
Получите из указанного удаленного git-репозитория rmt
, используя refspecs
для определения, какие удаленные ветки загружать. Ключевые аргументы:
options
: определяет параметры для загрузки, например, следует ли обрезать после этого. См.FetchOptions
для получения дополнительной информации.msg
: сообщение для вставки в рефлоги.
fetch(repo::GitRepo; kwargs...)
Получает обновления из upstream репозитория repo
.
Ключевые аргументы:
remote::AbstractString="origin"
: какой удаленный репозиторий, указанный по имени, использовать для получения данных изrepo
. Если это поле пустое, будет использован URL для создания анонимного удаленного репозитория.remoteurl::AbstractString=""
: URLremote
. Если не указано, будет предполагаться на основе данного имениremote
.refspecs=AbstractString[]
: определяет свойства получения данных.credentials=nothing
: предоставляет учетные данные и/или настройки при аутентификации против частногоremote
.callbacks=Callbacks()
: пользовательские обратные вызовы и полезные нагрузки.
Эквивалентно git fetch [<remoteurl>|<repo>] [<refspecs>]
.
LibGit2.fetchheads
— Functionfetchheads(repo::GitRepo) -> Vector{FetchHead}
Возвращает список всех fetch heads для repo
, каждый из которых представлен как FetchHead
, включая их имена, URL и статусы слияния.
Примеры
julia> fetch_heads = LibGit2.fetchheads(repo);
julia> fetch_heads[1].name
"refs/heads/master"
julia> fetch_heads[1].ismerge
true
julia> fetch_heads[2].name
"refs/heads/test_branch"
julia> fetch_heads[2].ismerge
false
LibGit2.fetch_refspecs
— Functionfetch_refspecs(rmt::GitRemote) -> Vector{String}
Получите fetch референсные спецификации для указанного rmt
. Эти референсные спецификации содержат информацию о том, какие ветки загружать.
Примеры
julia> remote = LibGit2.get(LibGit2.GitRemote, repo, "upstream");
julia> LibGit2.add_fetch!(repo, remote, "upstream");
julia> LibGit2.fetch_refspecs(remote)
String["+refs/heads/*:refs/remotes/upstream/*"]
LibGit2.fetchhead_foreach_cb
— FunctionУказатель функции C для fetchhead_foreach_callback
LibGit2.merge_base
— Functionmerge_base(repo::GitRepo, one::AbstractString, two::AbstractString) -> GitHash
Найдите базу слияния (общего предка) между коммитами one
и two
. one
и two
могут быть в строковом формате. Верните GitHash
базы слияния.
LibGit2.merge!
— Methodmerge!(repo::GitRepo; kwargs...) -> Bool
Выполните слияние git в репозитории repo
, объединяя коммиты с расходящейся историей в текущую ветку. Верните true
, если слияние прошло успешно, false
в противном случае.
Ключевые аргументы:
committish::AbstractString=""
: Объедините указанные коммиты вcommittish
.branch::AbstractString=""
: Объедините веткуbranch
и все ее коммиты с тех пор, как она разошлась с текущей веткой.fastforward::Bool=false
: Еслиfastforward
равноtrue
, объединяйте только в том случае, если слияние является быстрым (голова текущей ветки является предком коммитов, которые нужно объединить), в противном случае откажитесь от слияния и вернитеfalse
. Это эквивалентно опции CLI git--ff-only
.merge_opts::MergeOptions=MergeOptions()
:merge_opts
указывает параметры для слияния, такие как стратегия слияния в случае конфликтов.checkout_opts::CheckoutOptions=CheckoutOptions()
:checkout_opts
указывает параметры для шага проверки.
Эквивалентно git merge [--ff-only] [<committish> | <branch>]
.
Если вы указываете branch
, это должно быть сделано в формате ссылки, так как строка будет преобразована в GitReference
. Например, если вы хотите объединить ветку branch_a
, вы должны вызвать merge!(repo, branch="refs/heads/branch_a")
.
LibGit2.merge!
— Methodmerge!(repo::GitRepo, anns::Vector{GitAnnotated}; kwargs...) -> Bool
Слияние изменений из аннотированных коммитов (захваченных как GitAnnotated
объекты) anns
в HEAD репозитория repo
. Ключевые аргументы:
merge_opts::MergeOptions = MergeOptions()
: параметры для выполнения слияния, включая разрешение на fastforward. См.MergeOptions
для получения дополнительной информации.checkout_opts::CheckoutOptions = CheckoutOptions()
: параметры для выполнения checkout. См.CheckoutOptions
для получения дополнительной информации.
anns
может ссылаться на удаленные или локальные ветки. Возвращает true
, если слияние прошло успешно, в противном случае возвращает false
(например, если слияние невозможно, потому что ветки не имеют общего предка).
Примеры
upst_ann = LibGit2.GitAnnotated(repo, "branch/a")
# слияние ветки
LibGit2.merge!(repo, [upst_ann])
LibGit2.merge!
— Methodmerge!(repo::GitRepo, anns::Vector{GitAnnotated}, fastforward::Bool; kwargs...) -> Bool
Слияние изменений из аннотированных коммитов (захваченных как GitAnnotated
объекты) anns
в HEAD репозитория repo
. Если fastforward
равно true
, только быстрое слияние разрешено. В этом случае, если возникнут конфликты, слияние завершится неудачей. В противном случае, если fastforward
равно false
, слияние может привести к конфликтному файлу, который пользователю нужно будет разрешить.
Ключевые аргументы:
merge_opts::MergeOptions = MergeOptions()
: параметры для выполнения слияния, включая разрешение на быстрое слияние. См.MergeOptions
для получения дополнительной информации.checkout_opts::CheckoutOptions = CheckoutOptions()
: параметры для выполнения проверки. См.CheckoutOptions
для получения дополнительной информации.
anns
может ссылаться на удаленные или локальные ветки. Верните true
, если слияние прошло успешно, в противном случае верните false
(например, если слияние невозможно, потому что у веток нет общего предка).
Примеры
upst_ann_1 = LibGit2.GitAnnotated(repo, "branch/a")
# слияние ветки, быстрое слияние
LibGit2.merge!(repo, [upst_ann_1], true)
# конфликты слияния!
upst_ann_2 = LibGit2.GitAnnotated(repo, "branch/b")
# слияние ветки, попытка быстрого слияния
LibGit2.merge!(repo, [upst_ann_2], true) # вернет false
LibGit2.merge!(repo, [upst_ann_2], false) # вернет true
LibGit2.ffmerge!
— Functionffmerge!(repo::GitRepo, ann::GitAnnotated)
Слияние изменений с быстрым перемещением в текущий HEAD. Это возможно только в том случае, если коммит, на который ссылается ann
, является потомком текущего HEAD (например, если изменения извлекаются из удаленной ветки, которая просто опережает локальный конец ветки).
LibGit2.fullname
— FunctionLibGit2.fullname(ref::GitReference)
Вернуть имя ссылки, на которую указывает символическая ссылка ref
. Если ref
не является символической ссылкой, вернуть пустую строку.
LibGit2.features
— Functionfeatures()
Возвращает список функций git, которые поддерживает текущая версия libgit2, такие как многопоточность или использование HTTPS или SSH.
LibGit2.filename
— Functionfilename(te::GitTreeEntry)
Возвращает имя файла объекта на диске, на который ссылается te
.
LibGit2.filemode
— Functionfilemode(te::GitTreeEntry) -> Cint
Возвращает UNIX filemode объекта на диске, на который ссылается te
, в виде целого числа.
LibGit2.gitdir
— FunctionLibGit2.gitdir(repo::GitRepo)
Возвращает местоположение файлов "git" репозитория repo
:
- для обычных репозиториев это местоположение папки
.git
. - для голых репозиториев это местоположение самого репозитория.
LibGit2.git_url
— FunctionLibGit2.git_url(; kwargs...) -> String
Создайте строку на основе предоставленных компонентов URL. Когда ключевое слово scheme
не указано, сгенерированный URL будет использовать альтернативный scp-подобный синтаксис.
Ключевые слова
scheme::AbstractString=""
: схема URL, которая определяет используемый протокол. Для HTTP используйте "http", для SSH используйте "ssh" и т.д. Когдаscheme
не указано, формат вывода будет "ssh", но с использованием scp-подобного синтаксиса.username::AbstractString=""
: имя пользователя, которое будет использоваться в выводе, если указано.password::AbstractString=""
: пароль, который будет использоваться в выводе, если указан.host::AbstractString=""
: имя хоста, которое будет использоваться в выводе. Имя хоста обязательно должно быть указано.port::Union{AbstractString,Integer}=""
: номер порта, который будет использоваться в выводе, если указан. Не может быть указан при использовании scp-подобного синтаксиса.path::AbstractString=""
: путь, который будет использоваться в выводе, если указан.
!!! предупреждение Избегайте использования паролей в URL. В отличие от объектов учетных данных, Julia не может безопасно обнулить или уничтожить конфиденциальные данные после использования, и пароль может остаться в памяти; возможно, он будет раскрыт неинициализированной памятью.
Примеры
julia> LibGit2.git_url(username="git", host="github.com", path="JuliaLang/julia.git")
"git@github.com:JuliaLang/julia.git"
julia> LibGit2.git_url(scheme="https", host="github.com", path="/JuliaLang/julia.git")
"https://github.com/JuliaLang/julia.git"
julia> LibGit2.git_url(scheme="ssh", username="git", host="github.com", port=2222, path="JuliaLang/julia.git")
"ssh://git@github.com:2222/JuliaLang/julia.git"
LibGit2.@githash_str
— Macro@githash_str -> AbstractGitHash
Создайте объект git hash из данной строки, возвращая GitShortHash
, если строка короче 40 шестнадцатеричных цифр, в противном случае GitHash
.
Примеры
julia> LibGit2.githash"d114feb74ce633"
GitShortHash("d114feb74ce633")
julia> LibGit2.githash"d114feb74ce63307afe878a5228ad014e0289a85"
GitHash("d114feb74ce63307afe878a5228ad014e0289a85")
LibGit2.head
— FunctionLibGit2.head(repo::GitRepo) -> GitReference
Возвращает GitReference
для текущего HEAD репозитория repo
.
head(pkg::AbstractString) -> String
Возвращает текущий HEAD GitHash
репозитория pkg
в виде строки.
LibGit2.head!
— FunctionLibGit2.head!(repo::GitRepo, ref::GitReference) -> GitReference
Установите HEAD репозитория repo
на объект, на который указывает ref
.
LibGit2.head_oid
— FunctionLibGit2.head_oid(repo::GitRepo) -> GitHash
Получите идентификатор объекта текущего HEAD git-репозитория repo
.
LibGit2.headname
— FunctionLibGit2.headname(repo::GitRepo)
Получите имя текущего HEAD git-репозитория repo
. Если repo
в данный момент отсоединен, верните имя HEAD, от которого он отсоединен.
LibGit2.init
— FunctionLibGit2.init(path::AbstractString, bare::Bool=false) -> GitRepo
Откройте новый git-репозиторий по адресу path
. Если bare
равно false
, рабочее дерево будет создано в path/.git
. Если bare
равно true
, рабочий каталог создан не будет.
LibGit2.is_ancestor_of
— Functionis_ancestor_of(a::AbstractString, b::AbstractString, repo::GitRepo) -> Bool
Возвращает true
, если a
, GitHash
в строковом формате, является предком b
, GitHash
в строковом формате.
Примеры
julia> repo = GitRepo(repo_path);
julia> LibGit2.add!(repo, test_file1);
julia> commit_oid1 = LibGit2.commit(repo, "commit1");
julia> LibGit2.add!(repo, test_file2);
julia> commit_oid2 = LibGit2.commit(repo, "commit2");
julia> LibGit2.is_ancestor_of(string(commit_oid1), string(commit_oid2), repo)
true
LibGit2.isbinary
— Functionisbinary(blob::GitBlob) -> Bool
Используйте эвристику, чтобы угадать, является ли файл бинарным: ищите нулевые байты и смотрите на разумное соотношение печатных и непечатных символов среди первых 8000 байтов.
LibGit2.iscommit
— Functioniscommit(id::AbstractString, repo::GitRepo) -> Bool
Проверьте, находится ли коммит id
(который является GitHash
в строковом формате) в репозитории.
Примеры
julia> repo = GitRepo(repo_path);
julia> LibGit2.add!(repo, test_file);
julia> commit_oid = LibGit2.commit(repo, "add test_file");
julia> LibGit2.iscommit(string(commit_oid), repo)
true
LibGit2.isdiff
— FunctionLibGit2.isdiff(repo::GitRepo, treeish::AbstractString, pathspecs::AbstractString=""; cached::Bool=false)
Проверяет, есть ли какие-либо различия между деревом, указанным treeish
, и отслеживаемыми файлами в рабочем дереве (если cached=false
) или в индексе (если cached=true
). pathspecs
— это спецификации для опций для диффа.
Примеры
repo = LibGit2.GitRepo(repo_path)
LibGit2.isdiff(repo, "HEAD") # должно быть false
open(joinpath(repo_path, new_file), "a") do f
println(f, "вот мой классный новый файл")
end
LibGit2.isdiff(repo, "HEAD") # теперь true
Эквивалентно git diff-index <treeish> [-- <pathspecs>]
.
LibGit2.isdirty
— FunctionLibGit2.isdirty(repo::GitRepo, pathspecs::AbstractString=""; cached::Bool=false) -> Bool
Проверьте, были ли изменения в отслеживаемых файлах в рабочем дереве (если cached=false
) или в индексе (если cached=true
). pathspecs
— это спецификации для параметров для диффа.
Примеры
repo = LibGit2.GitRepo(repo_path)
LibGit2.isdirty(repo) # должно быть false
open(joinpath(repo_path, new_file), "a") do f
println(f, "вот мой классный новый файл")
end
LibGit2.isdirty(repo) # теперь true
LibGit2.isdirty(repo, new_file) # теперь true
Эквивалентно git diff-index HEAD [-- <pathspecs>]
.
LibGit2.isorphan
— FunctionLibGit2.isorphan(repo::GitRepo)
Проверьте, является ли текущая ветка "сиротой", т.е. не имеет коммитов. Первый коммит в этой ветке не будет иметь родителей.
LibGit2.isset
— Functionisset(val::Integer, flag::Integer)
Проверьте, установлены ли биты val
, индексируемые flag
, (1
) или не установлены (0
).
LibGit2.iszero
— Functioniszero(id::GitHash) -> Bool
Определите, являются ли все шестнадцатеричные цифры данного GitHash
нулями.
LibGit2.lookup_branch
— Functionlookup_branch(repo::GitRepo, branch_name::AbstractString, remote::Bool=false) -> Union{GitReference, Nothing}
Определите, существует ли ветка, указанная branch_name
, в репозитории repo
. Если remote
равно true
, repo
предполагается как удаленный git-репозиторий. В противном случае он является частью локальной файловой системы.
Верните либо GitReference
на запрашиваемую ветку, если она существует, либо nothing
, если нет.
LibGit2.map
— FunctionLibGit2.map(f::Function, walker::GitRevWalker; oid::GitHash=GitHash(), range::AbstractString="", by::Cint=Consts.SORT_NONE, rev::Bool=false)
Используя GitRevWalker
walker
для "прогулки" по каждому коммиту в истории репозитория, примените f
к каждому коммиту в ходе. Ключевые аргументы: * oid
: GitHash
коммита, с которого начинается прогулка. По умолчанию используется push_head!
и, следовательно, коммит HEAD и все его предки. * range
: Диапазон GitHash
в формате oid1..oid2
. f
будет применен ко всем коммитам между двумя. * by
: Метод сортировки. По умолчанию сортировка не выполняется. Другие варианты - сортировка по топологии (LibGit2.Consts.SORT_TOPOLOGICAL
), сортировка по времени (LibGit2.Consts.SORT_TIME
, сначала самые древние) или сортировка в обратном порядке времени (LibGit2.Consts.SORT_REVERSE
, сначала самые недавние). * rev
: Нужно ли обратить отсортированный порядок (например, если используется топологическая сортировка).
Примеры
oids = LibGit2.with(LibGit2.GitRevWalker(repo)) do walker
LibGit2.map((oid, repo)->string(oid), walker, by=LibGit2.Consts.SORT_TIME)
end
Здесь LibGit2.map
посещает каждый коммит, используя GitRevWalker
, и находит его GitHash
.
LibGit2.mirror_callback
— FunctionФункция устанавливает +refs/*:refs/*
референсные спецификации и флаг mirror
для удаленной ссылки.
LibGit2.mirror_cb
— FunctionУказатель функции C для mirror_callback
LibGit2.message
— Functionmessage(c::GitCommit, raw::Bool=false)
Возвращает сообщение коммита, описывающее изменения, внесенные в коммит c
. Если raw
равно false
, возвращается немного "очищенное" сообщение (в котором удалены любые ведущие переносы строк). Если raw
равно true
, сообщение не очищается от таких переносов строк.
LibGit2.merge_analysis
— Functionmerge_analysis(repo::GitRepo, anns::Vector{GitAnnotated}) -> analysis, preference
Запустите анализ на ветках, на которые указывают аннотированные концы веток anns
, и определите, при каких обстоятельствах их можно объединить. Например, если anns[1]
является просто предком ann[2]
, то merge_analysis
сообщит, что возможен быстрый переход (fast-forward) при слиянии.
Возвращает два вывода: analysis
и preference
. analysis
может иметь несколько возможных значений: * MERGE_ANALYSIS_NONE
: невозможно объединить элементы anns
. * MERGE_ANALYSIS_NORMAL
: обычное слияние, когда HEAD и коммиты, которые пользователь хочет объединить, все разошлись от общего предка. В этом случае изменения должны быть разрешены, и могут возникнуть конфликты. * MERGE_ANALYSIS_UP_TO_DATE
: все входные коммиты, которые пользователь хочет объединить, могут быть достигнуты из HEAD, поэтому слияние не требуется. * MERGE_ANALYSIS_FASTFORWARD
: входной коммит является потомком HEAD, и поэтому слияние не требуется - вместо этого пользователь может просто переключиться на входные коммиты. * MERGE_ANALYSIS_UNBORN
: HEAD репозитория ссылается на коммит, который не существует. Объединение невозможно, но может быть возможно переключение на входные коммиты. preference
также может иметь несколько возможных значений: * MERGE_PREFERENCE_NONE
: у пользователя нет предпочтений. * MERGE_PREFERENCE_NO_FASTFORWARD
: не разрешать никаких быстрых переходов (fast-forward) при слиянии. * MERGE_PREFERENCE_FASTFORWARD_ONLY
: разрешать только быстрые переходы (fast-forward) и никакие другие типы (что может привести к конфликтам). preference
можно контролировать через конфигурацию репозитория или глобальную конфигурацию git.
LibGit2.name
— FunctionLibGit2.name(ref::GitReference)
Вернуть полное имя ref
.
name(rmt::GitRemote)
Получите имя удаленного репозитория, например, "origin"
. Если удаленный репозиторий анонимный (см. GitRemoteAnon
), имя будет пустой строкой ""
.
Примеры
julia> repo_url = "https://github.com/JuliaLang/Example.jl";
julia> repo = LibGit2.clone(cache_repo, "test_directory");
julia> remote = LibGit2.GitRemote(repo, "origin", repo_url);
julia> name(remote)
"origin"
LibGit2.name(tag::GitTag)
Имя tag
(например, "v0.5"
).
LibGit2.need_update
— Functionneed_update(repo::GitRepo)
Эквивалентно git update-index
. Возвращает true
, если repo
нуждается в обновлении.
LibGit2.objtype
— Functionobjtype(obj_type::Consts.OBJECT)
Вернуть тип, соответствующий значению перечисления.
LibGit2.path
— FunctionLibGit2.path(repo::GitRepo)
Возвращает базовый путь к файлу репозитория repo
.
- для обычных репозиториев это обычно родительский каталог директории ".git" (заметьте: это может отличаться от рабочего каталога, смотрите
workdir
для получения дополнительных сведений). - для голых репозиториев это местоположение "git" файлов.
LibGit2.peel
— Functionpeel([T,] ref::GitReference)
Рекурсивно снимает ref
до тех пор, пока не будет получен объект типа T
. Если T
не предоставлен, то ref
будет снят до тех пор, пока не будет получен объект, отличный от GitTag
.
Только аннотированные теги могут быть сняты до объектов GitTag
. Легкие теги (по умолчанию) являются ссылками под refs/tags/
, которые указывают непосредственно на объекты GitCommit
.
peel([T,] obj::GitObject)
Рекурсивно снимает obj
, пока не будет получен объект типа T
. Если T
не предоставлен, то obj
будет снят до изменения типа.
GitTag
будет снят до объекта, на который он ссылается.GitCommit
будет снят доGitTree
.
LibGit2.posixpath
— FunctionLibGit2.posixpath(path)
Стандартизируйте строку пути path
, чтобы использовать разделители POSIX.
LibGit2.push
— Functionpush(rmt::GitRemote, refspecs; force::Bool=false, options::PushOptions=PushOptions())
Отправьте в указанный удаленный git-репозиторий rmt
, используя refspecs
для определения, в какие удаленные ветки отправлять. Ключевые аргументы:
force
: еслиtrue
, произойдет принудительная отправка, игнорируя конфликты.options
: определяет параметры для отправки, например, какие заголовки прокси использовать. См.PushOptions
для получения дополнительной информации.
Вы можете добавить информацию о refspecs отправки двумя другими способами: установив параметр в GitConfig
репозитория (с push.default
в качестве ключа) или вызвав add_push!
. В противном случае вам нужно будет явно указать refspec отправки в вызове push
, чтобы это имело эффект, например: LibGit2.push(repo, refspecs=["refs/heads/master"])
.
push(repo::GitRepo; kwargs...)
Отправляет обновления в upstream репозитория repo
.
Ключевые аргументы:
remote::AbstractString="origin"
: имя upstream remote, в который будет выполнена отправка.remoteurl::AbstractString=""
: URLremote
.refspecs=AbstractString[]
: определяет свойства отправки.force::Bool=false
: определяет, будет ли отправка принудительной, перезаписывающей удалённую ветку.credentials=nothing
: предоставляет учетные данные и/или настройки при аутентификации против частногоremote
.callbacks=Callbacks()
: пользовательские обратные вызовы и полезные нагрузки.
Эквивалентно git push [<remoteurl>|<repo>] [<refspecs>]
.
LibGit2.push!
— MethodLibGit2.push!(w::GitRevWalker, cid::GitHash)
Начинает GitRevWalker
walker
с коммита cid
. Эта функция может быть использована для применения функции ко всем коммитам с определенного года, передав первый коммит этого года в качестве cid
, а затем передав полученный w
в LibGit2.map
.
LibGit2.push_head!
— FunctionLibGit2.push_head!(w::GitRevWalker)
Отправьте коммит HEAD и его предков в GitRevWalker
w
. Это гарантирует, что HEAD и все его предковые коммиты будут встречены во время обхода.
LibGit2.push_refspecs
— Functionpush_refspecs(rmt::GitRemote) -> Vector{String}
Получите push референс-спецификации для указанного rmt
. Эти референс-спецификации содержат информацию о том, какие ветки нужно отправить.
Примеры
julia> remote = LibGit2.get(LibGit2.GitRemote, repo, "upstream");
julia> LibGit2.add_push!(repo, remote, "refs/heads/master");
julia> close(remote);
julia> remote = LibGit2.get(LibGit2.GitRemote, repo, "upstream");
julia> LibGit2.push_refspecs(remote)
String["refs/heads/master"]
LibGit2.raw
— Functionraw(id::GitHash) -> Vector{UInt8}
Получите необработанные байты GitHash
в виде вектора длиной 20.
LibGit2.read_tree!
— FunctionLibGit2.read_tree!(idx::GitIndex, tree::GitTree)
LibGit2.read_tree!(idx::GitIndex, treehash::AbstractGitHash)
Считывает дерево tree
(или дерево, на которое указывает treehash
, в репозитории, принадлежащем idx
) в индекс idx
. Содержимое текущего индекса будет заменено.
LibGit2.rebase!
— FunctionLibGit2.rebase!(repo::GitRepo, upstream::AbstractString="", newbase::AbstractString="")
Попытка автоматического слияния с перемещением текущей ветки, из upstream
, если он предоставлен, или в противном случае из ветки отслеживания upstream. newbase
— это ветка, на которую нужно переместить. По умолчанию это upstream
.
Если возникнут конфликты, которые не могут быть автоматически разрешены, перемещение будет прервано, оставив репозиторий и рабочее дерево в исходном состоянии, и функция выбросит GitError
. Это примерно эквивалентно следующему оператору командной строки:
git rebase --merge [<upstream>]
if [ -d ".git/rebase-merge" ]; then
git rebase --abort
fi
LibGit2.ref_list
— FunctionLibGit2.ref_list(repo::GitRepo) -> Vector{String}
Получите список всех имен ссылок в репозитории repo
.
LibGit2.reftype
— FunctionLibGit2.reftype(ref::GitReference) -> Cint
Возвращает Cint
, соответствующий типу ref
:
0
, если ссылка недействительна1
, если ссылка является идентификатором объекта2
, если ссылка символическая
LibGit2.remotes
— FunctionLibGit2.remotes(repo::GitRepo)
Возвращает вектор имен удаленных репозиториев repo
.
LibGit2.remove!
— Functionremove!(repo::GitRepo, files::AbstractString...)
remove!(idx::GitIndex, files::AbstractString...)
Удалите все файлы с путями, указанными в files
, из индекса idx
(или из индекса repo
).
LibGit2.reset
— Functionreset(val::Integer, flag::Integer)
Сбросьте биты val
, индексируемые flag
, вернув их к 0
.
LibGit2.reset!
— Functionreset!(payload, [config]) -> CredentialPayload
Сбросьте состояние payload
обратно к начальным значениям, чтобы его можно было использовать снова в колбэке учетных данных. Если предоставлен config
, конфигурация также будет обновлена.
Обновляет некоторые записи, определяемые pathspecs
, в индексе из дерева целевого коммита.
Устанавливает текущую ветку на указанный идентификатор коммита oid и при необходимости сбрасывает индекс и рабочее дерево, чтобы они соответствовали.
git reset [<committish>] [–] <pathspecs>...
reset!(repo::GitRepo, id::GitHash, mode::Cint=Consts.RESET_MIXED)
Сбросить репозиторий repo
в его состояние на id
, используя один из трех режимов, заданных mode
:
Consts.RESET_SOFT
- переместить HEAD наid
.Consts.RESET_MIXED
- по умолчанию, переместить HEAD наid
и сбросить индекс наid
.Consts.RESET_HARD
- переместить HEAD наid
, сбросить индекс наid
и отбросить все изменения в рабочем каталоге.
Примеры
# получить изменения
LibGit2.fetch(repo)
isfile(joinpath(repo_path, our_file)) # будет false
# быстрое слияние изменений
LibGit2.merge!(repo, fastforward=true)
# поскольку локально не было никаких файлов, но есть
# файл удаленно, нам нужно сбросить ветку
head_oid = LibGit2.head_oid(repo)
new_head = LibGit2.reset!(repo, head_oid, LibGit2.Consts.RESET_HARD)
В этом примере удаленный репозиторий, из которого выполняется получение, имеет файл под названием our_file
в своем индексе, поэтому мы должны сбросить.
Эквивалентно git reset [--soft | --mixed | --hard] <id>
.
Примеры
repo = LibGit2.GitRepo(repo_path)
head_oid = LibGit2.head_oid(repo)
open(joinpath(repo_path, "file1"), "w") do f
write(f, "111
")
end
LibGit2.add!(repo, "file1")
mode = LibGit2.Consts.RESET_HARD
# отбросит изменения в file1
# и уберет его из индекса
new_head = LibGit2.reset!(repo, head_oid, mode)
LibGit2.restore
— Functionrestore(s::State, repo::GitRepo)
Вернуть репозиторий repo
в предыдущее состояние State
s
, например, HEAD ветки до попытки слияния. s
можно сгенерировать с помощью функции snapshot
.
LibGit2.revcount
— FunctionLibGit2.revcount(repo::GitRepo, commit1::AbstractString, commit2::AbstractString)
Список количества ревизий между commit1
и commit2
(committish OIDs в строковом формате). Поскольку commit1
и commit2
могут находиться на разных ветках, revcount
выполняет список ревизий "лево-право" (и подсчет), возвращая кортеж Int
- количество левых и правых коммитов соответственно. Левый (или правый) коммит относится к тому, с какой стороны симметричной разности в дереве коммит доступен.
Эквивалентно git rev-list --left-right --count <commit1> <commit2>
.
Примеры
repo = LibGit2.GitRepo(repo_path)
repo_file = open(joinpath(repo_path, test_file), "a")
println(repo_file, "hello world")
flush(repo_file)
LibGit2.add!(repo, test_file)
commit_oid1 = LibGit2.commit(repo, "commit 1")
println(repo_file, "hello world again")
flush(repo_file)
LibGit2.add!(repo, test_file)
commit_oid2 = LibGit2.commit(repo, "commit 2")
LibGit2.revcount(repo, string(commit_oid1), string(commit_oid2))
Это вернет (-1, 0)
.
LibGit2.set_remote_url
— Functionset_remote_url(repo::GitRepo, remote_name, url)
set_remote_url(repo::String, remote_name, url)
Установите как url
для получения, так и url
для отправки для remote_name
для GitRepo
или git-репозитория, расположенного по path
. Обычно git-репозитории используют "origin"
в качестве имени удаленного репозитория.
Примеры
repo_path = joinpath(tempdir(), "Example")
repo = LibGit2.init(repo_path)
LibGit2.set_remote_url(repo, "upstream", "https://github.com/JuliaLang/Example.jl")
LibGit2.set_remote_url(repo_path, "upstream2", "https://github.com/JuliaLang/Example2.jl")
LibGit2.shortname
— FunctionLibGit2.shortname(ref::GitReference)
Возвращает сокращенную версию имени ref
, которая "читаема для человека".
julia> repo = GitRepo(path_to_repo);
julia> branch_ref = LibGit2.head(repo);
julia> LibGit2.name(branch_ref)
"refs/heads/master"
julia> LibGit2.shortname(branch_ref)
"master"
LibGit2.snapshot
— Functionsnapshot(repo::GitRepo) -> State
Сделайте снимок текущего состояния репозитория repo
, сохраняя текущий HEAD, индекс и любые незавершенные работы. Выходной State
может быть использован позже во время вызова restore
, чтобы вернуть репозиторий в состояние, зафиксированное в снимке.
LibGit2.split_cfg_entry
— FunctionLibGit2.split_cfg_entry(ce::LibGit2.ConfigEntry) -> Tuple{String,String,String,String}
Разделите ConfigEntry
на следующие части: секция, подсекция, имя и значение.
Примеры
Учитывая файл конфигурации git, содержащий:
[credential "https://example.com"]
username = me
ConfigEntry
будет выглядеть следующим образом:
julia> entry
ConfigEntry("credential.https://example.com.username", "me")
julia> LibGit2.split_cfg_entry(entry)
("credential", "https://example.com", "username", "me")
Смотрите документацию по синтаксису git config для получения дополнительной информации.
LibGit2.status
— FunctionLibGit2.status(repo::GitRepo, path::String) -> Union{Cuint, Cvoid}
Проверьте статус файла по пути path
в репозитории git repo
. Например, это можно использовать для проверки, был ли файл по пути path
изменен и нуждается в подготовке и коммите.
LibGit2.stage
— Functionstage(ie::IndexEntry) -> Cint
Получите номер стадии ie
. Номер стадии 0
представляет текущее состояние рабочей директории, но другие номера могут использоваться в случае конфликта слияния. В таком случае различные номера стадий в IndexEntry
описывают, к какой стороне(ам) конфликта принадлежит текущее состояние файла. Стадия 0
— это состояние до попытки слияния, стадия 1
— это изменения, которые были внесены локально, стадии 2
и выше предназначены для изменений из других веток (например, в случае многоветвевого "октопусного" слияния могут использоваться стадии 2
, 3
и 4
).
LibGit2.tag_create
— FunctionLibGit2.tag_create(repo::GitRepo, tag::AbstractString, commit; kwargs...)
Создайте новый git-тег tag
(например, "v0.5"
) в репозитории repo
, на коммите commit
.
Ключевые аргументы:
msg::AbstractString=""
: сообщение для тега.force::Bool=false
: еслиtrue
, существующие ссылки будут перезаписаны.sig::Signature=Signature(repo)
: подпись теггера.
LibGit2.tag_delete
— FunctionLibGit2.tag_delete(repo::GitRepo, tag::AbstractString)
Удалите git-тег tag
из репозитория repo
.
LibGit2.tag_list
— FunctionLibGit2.tag_list(repo::GitRepo) -> Vector{String}
Получите список всех тегов в репозитории git repo
.
LibGit2.target
— FunctionLibGit2.target(tag::GitTag)
GitHash
целевого объекта tag
.
LibGit2.toggle
— Functiontoggle(val::Integer, flag::Integer)
Переверните биты val
, индексируемые flag
, так что если бит равен 0
, он станет 1
после переключения, и наоборот.
LibGit2.transact
— Functiontransact(f::Function, repo::GitRepo)
Примените функцию f
к репозиторию git repo
, сделав snapshot
перед применением f
. Если в f
произойдет ошибка, repo
будет возвращен в состояние снимка с помощью restore
. Ошибка, которая произошла, будет повторно выброшена, но состояние repo
не будет повреждено.
LibGit2.treewalk
— Functiontreewalk(f, tree::GitTree, post::Bool=false)
Обход записей в tree
и его поддеревьях в пост- или пре- порядке. Пре- порядок означает, что мы начинаем с корня, а затем обходим самое левое поддерево (и рекурсивно продолжаем вниз по самым левым поддеревьям этого поддерева), перемещаясь вправо по поддеревьям. Пост- порядок означает, что мы начинаем с низа самого левого поддерева, поднимаемся вверх по нему, затем обходим следующее правое поддерево (снова начиная с низа) и, наконец, посещаем корень дерева последним.
Параметр функции f
должен иметь следующую сигнатуру:
(String, GitTreeEntry) -> Cint
Отрицательное значение, возвращаемое из f
, останавливает обход дерева. Положительное значение означает, что запись будет пропущена, если post
равно false
.
LibGit2.upstream
— Functionupstream(ref::GitReference) -> Union{GitReference, Nothing}
Определите, имеет ли ветка, содержащая ref
, указанную ветку upstream.
Возвращает либо GitReference
на ветку upstream, если она существует, либо nothing
, если запрашиваемая ветка не имеет соответствующей ветки upstream.
LibGit2.update!
— Functionupdate!(repo::GitRepo, files::AbstractString...)
update!(idx::GitIndex, files::AbstractString...)
Обновите все файлы с путями, указанными в files
, в индексе idx
(или в индексе repo
). Сравните состояние каждого файла в индексе с текущим состоянием на диске, удаляя его, если он был удален на диске, или обновляя его запись в объектной базе данных.
LibGit2.url
— Functionurl(rmt::GitRemote)
Получите URL для извлечения удаленного git-репозитория.
Примеры
julia> repo_url = "https://github.com/JuliaLang/Example.jl";
julia> repo = LibGit2.init(mktempdir());
julia> remote = LibGit2.GitRemote(repo, "origin", repo_url);
julia> LibGit2.url(remote)
"https://github.com/JuliaLang/Example.jl"
LibGit2.version
— Functionversion() -> VersionNumber
Возвращает версию используемой libgit2 в виде VersionNumber
.
LibGit2.with
— Functionwith(f::Function, obj)
Вспомогательная функция управления ресурсами. Применяет f
к obj
, гарантируя вызов close
на obj
после успешного завершения f
или возникновения ошибки. Обеспечивает, чтобы выделенные ресурсы git были завершены, как только они больше не нужны.
LibGit2.with_warn
— Functionwith_warn(f::Function, ::Type{T}, args...)
Вспомогательная функция управления ресурсами. Применяет f
к args
, сначала создавая экземпляр типа T
из args
. Убедитесь, что close
вызывается на результирующем объекте после успешного возврата f
или выбрасывания ошибки. Обеспечивает, чтобы выделенные ресурсы git были завершены, как только они больше не нужны. Если f
выбрасывает ошибку, отображается предупреждение, содержащее ошибку.
LibGit2.workdir
— FunctionLibGit2.workdir(repo::GitRepo)
Возвращает местоположение рабочей директории repo
. Это вызовет ошибку для голых репозиториев.
Обычно это будет родительская директория gitdir(repo)
, но в некоторых случаях может быть другим: например, если установлена переменная конфигурации core.worktree
или переменная окружения GIT_WORK_TREE
.
LibGit2.GitObject
— Method(::Type{T})(te::GitTreeEntry) где T<:GitObject
Получите объект git, на который ссылается te
, и верните его в качестве его фактического типа (тип entrytype
покажет), например, GitBlob
или GitTag
.
Примеры
tree = LibGit2.GitTree(repo, "HEAD^{tree}")
tree_entry = tree[1]
blob = LibGit2.GitBlob(tree_entry)
LibGit2.UserPasswordCredential
— TypeУчетные данные, которые поддерживают только параметры user
и password
LibGit2.SSHCredential
— TypeТип учетных данных SSH
LibGit2.isfilled
— Functionisfilled(cred::AbstractCredential) -> Bool
Проверяет, что учетные данные готовы к использованию для аутентификации.
LibGit2.CachedCredentials
— TypeКэширует информацию о учетных данных для повторного использования
LibGit2.CredentialPayload
— TypeLibGit2.CredentialPayload
Сохраняет состояние между несколькими вызовами обратного вызова учетных данных для одного и того же URL. Ожидается, что экземпляр CredentialPayload
будет reset!
, когда он будет использоваться с другим URL.
LibGit2.approve
— Functionapprove(payload::CredentialPayload; shred::Bool=true) -> Nothing
Сохраните учетные данные payload
для повторного использования в будущем при аутентификации. Должен вызываться только после успешной аутентификации.
Ключевое слово shred
управляет тем, следует ли уничтожить конфиденциальную информацию в поле учетных данных payload
. Должно быть установлено в false
только во время тестирования.
LibGit2.reject
— Functionreject(payload::CredentialPayload; shred::Bool=true) -> Nothing
Отменяет учетные данные payload
от повторного использования в будущей аутентификации. Должен вызываться только в случае неудачной аутентификации.
Ключевое слово shred
управляет тем, следует ли уничтожить конфиденциальную информацию в поле учетных данных. Должно быть установлено в false
только во время тестирования.
LibGit2.Consts.GIT_CONFIG
— TypeПриоритет уровня конфигурационного файла.
Эти уровни приоритета соответствуют естественной логике эскалации (от более высокого к более низкому) при поиске записей конфигурации в git.
CONFIG_LEVEL_DEFAULT
- Открыть глобальные, XDG и системные конфигурационные файлы, если они доступны.CONFIG_LEVEL_PROGRAMDATA
- Системный уровень в Windows, для совместимости с портативным gitCONFIG_LEVEL_SYSTEM
- Системный конфигурационный файл;/etc/gitconfig
на системах LinuxCONFIG_LEVEL_XDG
- Конфигурационный файл, совместимый с XDG; обычно~/.config/git/config
CONFIG_LEVEL_GLOBAL
- Конфигурационный файл, специфичный для пользователя (также называемый глобальным конфигурационным файлом); обычно~/.gitconfig
CONFIG_LEVEL_LOCAL
- Конфигурационный файл, специфичный для репозитория;$WORK_DIR/.git/config
на непустых репозиторияхCONFIG_LEVEL_APP
- Конфигурационный файл, специфичный для приложения; свободно определяемый приложениямиCONFIG_HIGHEST_LEVEL
- Представляет собой конфигурационный файл самого высокого доступного уровня (т.е. наиболее специфичный конфигурационный файл, который фактически загружен)