LibGit2
The LibGit2 모듈은 libgit2에 대한 바인딩을 제공하는 포터블 C 라이브러리로, Git 버전 관리 시스템의 핵심 기능을 구현합니다. 이 바인딩은 현재 Julia의 패키지 관리자를 지원하는 데 사용되고 있습니다. 이 모듈은 결국 별도의 패키지로 이동될 것으로 예상됩니다.
Functionality
이 문서의 일부는 libgit2 API에 대한 사전 지식이 있다고 가정합니다. 여기에서 언급된 일부 객체 및 메서드에 대한 자세한 정보는 상위 문서 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)
특히, Ref
객체에 대해 이후에 LibGit2.free
를 호출해야 한다는 점에 유의하십시오.
LibGit2.CheckoutOptions
— TypeLibGit2.CheckoutOptions
git_checkout_options
구조체와 일치합니다.
필드는 다음을 나타냅니다:
version
: 나중에 변경될 경우를 대비하여 사용 중인 구조체의 버전. 현재는 항상1
입니다.checkout_strategy
: 충돌을 처리하는 방법과 체크아웃/누락된 파일을 재생성할지 여부를 결정합니다.disable_filters
: 0이 아닌 경우, UNIX와 DOS 간의 파일 개행을 변환하는 CLRF와 같은 필터를 적용하지 않습니다.dir_mode
: 체크아웃에 관련된 모든 디렉토리에 대한 읽기/쓰기/접근 모드. 기본값은0755
입니다.file_mode
: 체크아웃에 관련된 모든 파일에 대한 읽기/쓰기/접근 모드. 기본값은 blob에 따라0755
또는0644
입니다.file_open_flags
: 체크아웃 중에 파일을 열기 위해 사용되는 비트 플래그입니다.notify_flags
: 사용자에게 어떤 종류의 충돌에 대해 알릴지에 대한 플래그입니다.notify_cb
: 체크아웃 충돌이 발생할 경우 사용자에게 알리기 위한 선택적 콜백 함수입니다. 이 함수가 0이 아닌 값을 반환하면 체크아웃이 취소됩니다.notify_payload
: 알림 콜백 함수에 대한 페이로드입니다.progress_cb
: 체크아웃 진행 상황을 표시하기 위한 선택적 콜백 함수입니다.progress_payload
: 진행 콜백에 대한 페이로드입니다.paths
: 비어 있지 않은 경우 체크아웃 중 검색할 경로를 설명합니다. 비어 있으면 체크아웃은 리포지토리의 모든 파일에 대해 발생합니다.baseline
:workdir
의 예상 내용으로, (포인터가 있는)GitTree
에 캡처됩니다. 기본값은 HEAD에서의 트리 상태입니다.baseline_index
:workdir
의 예상 내용으로, (포인터가 있는)GitIndex
에 캡처됩니다. 기본값은 HEAD에서의 인덱스 상태입니다.target_directory
: 비어 있지 않은 경우,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
이면 전체 원격 저장소를 클론합니다. 0이 아닌 경우, 저장소에 소스 파일의 로컬 복사본이 없는 베어 클론을 수행하며,gitdir
와workdir
가 동일합니다.localclone
: 로컬 객체 데이터베이스를 클론할지 또는 페치를 수행할지를 나타내는 플래그입니다. 기본값은 git이 결정하도록 하는 것입니다. 로컬 클론에 대해 git 인식 전송을 사용하지 않지만,file://
로 시작하는 URL에 대해서는 사용합니다.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
과 일치하는 태그만 고려합니다. 글로브 확장을 지원합니다.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
: 델타 및 양쪽 객체에 대한 플래그. 파일을 이진/텍스트로 처리할지, 델타의 양쪽에 존재하는지, 객체 ID가 올바른지 여부를 결정합니다.similarity
: 파일이 이름이 변경되었거나 복사되었는지를 나타내는 데 사용됩니다.nfiles
: 델타에 있는 파일 수(예: 델타가 서브모듈 커밋 ID에서 실행된 경우, 하나 이상의 파일이 포함될 수 있습니다).old_file
: 변경 사항 이전의 파일에 대한 정보를 포함하는DiffFile
.new_file
: 변경 사항 이후의 파일에 대한 정보를 포함하는DiffFile
.
LibGit2.DiffFile
— TypeLibGit2.DiffFile
델타의 한 쪽에 대한 설명. git_diff_file
구조체와 일치합니다.
필드는 다음을 나타냅니다:
id
: diff에서 항목의GitHash
. 이 diff의 이 쪽에서 항목이 비어 있는 경우(예: 파일 제거의 diff인 경우), 이는GitHash(0)
이 됩니다.path
: 리포지토리의 작업 디렉토리에 상대적인 항목에 대한NULL
로 종료된 경로.size
: 항목의 크기(바이트 단위).flags
:git_diff_flag_t
플래그의 조합. 이 정수의i
번째 비트는i
번째 플래그를 설정합니다.mode
: 항목에 대한stat
모드.id_abbrev
:0.25.0
이상 버전의 LibGit2에서만 존재합니다.string
으로 변환할 때id
필드의 길이. 일반적으로OID_HEXSZ
(40)와 같습니다.
LibGit2.DiffOptionsStruct
— TypeLibGit2.DiffOptionsStruct
git_diff_options
구조체와 일치합니다.
필드는 다음을 나타냅니다:
version
: 나중에 변경될 경우를 대비하여 사용 중인 구조체의 버전. 현재는 항상1
입니다.flags
: 어떤 파일이 diff에 나타날지를 제어하는 플래그. 기본값은DIFF_NORMAL
입니다.ignore_submodules
: 서브모듈의 파일을 볼 것인지 여부. 기본값은SUBMODULE_IGNORE_UNSPECIFIED
로, 이는 서브모듈의 설정이 diff에 나타날지 여부를 제어함을 의미합니다.pathspec
: diff에 포함할 파일의 경로. 기본값은 저장소의 모든 파일을 사용하는 것입니다.notify_cb
: 파일 델타가 추가될 때 diff의 변경 사항을 사용자에게 알리는 선택적 콜백입니다.progress_cb
: diff 진행 상황을 표시하는 선택적 콜백입니다. libgit2 버전이 최소 0.24.0 이상일 때만 관련이 있습니다.payload
:notify_cb
및progress_cb
에 전달할 페이로드입니다.context_lines
: 헌크의 가장자리를 정의하는 데 사용되는 변경되지 않은 라인의 수입니다. 이는 헌크 앞뒤에 제공되는 컨텍스트를 위해 표시될 라인의 수이기도 합니다. 기본값은 3입니다.interhunk_lines
: 두 개의 별도 헌크 사이에 허용되는 최대 변경되지 않은 라인의 수입니다. 기본값은 0입니다.id_abbrev
: 인쇄할 축약된GitHash
의 길이를 설정합니다. 기본값은7
입니다.max_size
: blob의 최대 파일 크기입니다. 이 크기를 초과하면 이진 blob으로 처리됩니다. 기본값은 512 MB입니다.old_prefix
: diff의 한쪽에 오래된 파일을 배치할 가상 파일 디렉토리입니다. 기본값은"a"
입니다.new_prefix
: diff의 한쪽에 새로운 파일을 배치할 가상 파일 디렉토리입니다. 기본값은"b"
입니다.
LibGit2.FetchHead
— TypeLibGit2.FetchHead
가져오기 중 HEAD에 대한 정보를 포함하며, 가져온 브랜치의 이름과 URL, HEAD의 oid, 가져온 HEAD가 로컬에 병합되었는지 여부를 포함합니다.
필드는 다음을 나타냅니다:
name
: 가져오기 헤드의 로컬 참조 데이터베이스에서의 이름, 예를 들어,"refs/heads/master"
.url
: 가져오기 헤드의 URL.oid
: 가져오기 헤드의 끝 부분의GitHash
.ismerge
: 원격의 변경 사항이 로컬 복사본에 병합되었는지 여부를 나타내는 부울 플래그입니다.true
인 경우, 로컬 복사본은 원격 가져오기 헤드와 최신 상태입니다.
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 커밋은 어떻게 조회되었는지와 그 이유에 대한 정보를 담고 있어, 리베이스나 병합 작업이 커밋의 맥락에 대한 더 많은 정보를 가질 수 있도록 합니다. 충돌 파일은 예를 들어 충돌하는 병합의 소스/대상 브랜치에 대한 정보를 포함합니다. 주석이 달린 커밋은 예를 들어 FetchHead
가 전달될 때 원격 브랜치의 끝을 참조하거나 GitReference
를 사용하여 설명된 브랜치 헤드를 참조할 수 있습니다.
LibGit2.GitBlame
— TypeGitBlame(repo::GitRepo, path::AbstractString; options::BlameOptions=BlameOptions())
path
에 있는 파일에 대한 GitBlame
객체를 생성하며, repo
의 기록에서 얻은 변경 정보를 사용합니다. GitBlame
객체는 누가 파일의 어떤 부분을 언제, 어떻게 변경했는지를 기록합니다. options
는 파일의 내용을 분리하는 방법과 조사할 커밋을 제어합니다 - 더 많은 정보는 BlameOptions
를 참조하세요.
LibGit2.GitBlob
— TypeGitBlob(repo::GitRepo, hash::AbstractGitHash)
GitBlob(repo::GitRepo, spec::AbstractString)
hash
/spec
로 지정된 repo
에서 GitBlob
객체를 반환합니다.
hash
는 전체(GitHash
) 또는 부분(GitShortHash
) 해시입니다.spec
은 텍스트 사양입니다: 전체 목록은 git 문서를 참조하십시오.
LibGit2.GitCommit
— TypeGitCommit(repo::GitRepo, hash::AbstractGitHash)
GitCommit(repo::GitRepo, spec::AbstractString)
hash
/spec
로 지정된 repo
에서 GitCommit
객체를 반환합니다.
hash
는 전체(GitHash
) 또는 부분(GitShortHash
) 해시입니다.spec
은 텍스트 사양입니다: 전체 목록은 git 문서를 참조하세요.
LibGit2.GitConfig
— TypeGitConfig(path::AbstractString, level::Consts.GIT_CONFIG=Consts.CONFIG_LEVEL_APP, force::Bool=false)
path
에 있는 파일에서 구성 정보를 로드하여 새로운 GitConfig
를 생성합니다. level
, repo
및 force
옵션에 대한 자세한 내용은 addfile
를 참조하십시오.
GitConfig(repo::GitRepo)
저장된 git 저장소 repo
의 구성을 가져옵니다. repo
에 특정 구성 파일이 설정되어 있지 않은 경우 기본 git 구성이 사용됩니다.
GitConfig(level::Consts.GIT_CONFIG=Consts.CONFIG_LEVEL_DEFAULT)
기본 git 구성을 가져오려면 전역 및 시스템 구성 파일을 우선 순위가 있는 구성으로 로드합니다. 이는 특정 git 리포지토리 외부에서 기본 구성 옵션에 접근하는 데 사용할 수 있습니다.
LibGit2.GitHash
— TypeGitHash
git 객체 식별자로, sha-1 해시를 기반으로 합니다. 이는 저장소에서 GitObject
를 식별하는 데 사용되는 20바이트 문자열(40개의 16진수 숫자)입니다.
LibGit2.GitObject
— TypeGitObject(repo::GitRepo, hash::AbstractGitHash)
GitObject(repo::GitRepo, spec::AbstractString)
지정된 객체(GitCommit
, GitBlob
, GitTree
또는 GitTag
)를 hash
/spec
으로 지정된 repo
에서 반환합니다.
hash
는 전체(GitHash
) 또는 부분(GitShortHash
) 해시입니다.spec
은 텍스트 사양입니다: 전체 목록은 git 문서를 참조하십시오.
LibGit2.GitRemote
— TypeGitRemote(repo::GitRepo, rmt_name::AbstractString, rmt_url::AbstractString) -> GitRemote
원격 git 저장소를 이름과 URL을 사용하여 조회합니다. 기본 가져오기 refspec을 사용합니다.
예제
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
URL만 사용하여 원격 git 저장소를 조회합니다. 이름은 사용하지 않습니다.
예제
repo = LibGit2.init(repo_path)
remote = LibGit2.GitRemoteAnon(repo, repo_url)
LibGit2.GitRepo
— TypeLibGit2.GitRepo(path::AbstractString)
path
에 있는 git 저장소를 엽니다.
LibGit2.GitRepoExt
— FunctionLibGit2.GitRepoExt(path::AbstractString, flags::Cuint = Cuint(Consts.REPOSITORY_OPEN_DEFAULT))
path
에서 git 저장소를 열고 확장된 제어를 제공합니다 (예를 들어, 현재 사용자가 path
를 읽기 위해 특별 접근 그룹의 구성원이어야 하는 경우).
LibGit2.GitRevWalker
— TypeGitRevWalker(repo::GitRepo)
GitRevWalker
는 git 저장소 repo
의 수정 (즉, 커밋)을 탐색합니다. 이는 저장소의 커밋 모음이며, 반복(iteration) 및 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 객체 식별자로, hash
의 처음 len
개 16진수 숫자로 구성되며 (나머지 숫자는 무시됨).
LibGit2.GitSignature
— TypeLibGit2.GitSignature
이것은 git_signature
객체에 대한 포인터를 감싸는 Julia 래퍼입니다.
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)
hash
/spec
로 지정된 repo
에서 GitTag
객체를 반환합니다.
hash
는 전체(GitHash
) 또는 부분(GitShortHash
) 해시입니다.spec
은 텍스트 사양입니다: 전체 목록은 git 문서를 참조하십시오.
LibGit2.GitTree
— TypeGitTree(repo::GitRepo, hash::AbstractGitHash)
GitTree(repo::GitRepo, spec::AbstractString)
hash
/spec
로 지정된 repo
에서 GitTree
객체를 반환합니다.
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
: 블레임을 시작할 파일의 첫 번째 줄. 기본값은1
입니다.max_line
: 블레임을 적용할 파일의 마지막 줄. 기본값은0
, 즉 파일의 마지막 줄을 의미합니다.
LibGit2.MergeOptions
— TypeLibGit2.MergeOptions
git_merge_options
구조체와 일치합니다.
필드는 다음을 나타냅니다:
version
: 나중에 변경될 경우를 대비하여 사용 중인 구조체의 버전. 현재는 항상1
입니다.flags
: 병합 동작을 설명하는 플래그에 대한enum
.git_merge_flag_t
에서 정의됩니다. 해당하는 Julia enum은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
구조체와 일치합니다.
필드는 다음을 나타냅니다:
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)
특히, Ref
객체에 대해 LibGit2.free
를 호출해야 한다는 점에 유의하십시오.
반대로, 문자열 벡터를 LibGit2에 전달할 때는 일반적으로 암시적 변환에 의존하는 것이 가장 간단합니다:
strs = String[...]
@check ccall(..., (Ptr{StrArrayStruct},), strs)
데이터가 Julia에 의해 할당되므로 free
를 호출할 필요가 없다는 점에 유의하십시오.
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)
현재 GitConfig
cfg
에 path
에 위치한 기존 git 구성 파일을 추가합니다. 파일이 존재하지 않으면 생성됩니다.
level
은 git 구성 우선 순위 수준을 설정하며, 이는
Consts.GIT_CONFIG
에 의해 결정됩니다.
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)
지정된 rmt
에 대한 fetch refspec을 추가합니다. 이 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)
지정된 rmt
에 대한 push refspec을 추가합니다. 이 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)
커밋 c
의 작성자의 Signature
를 반환합니다. 작성자는 관련 파일에 변경을 가한 사람입니다. 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...)
repo
저장소에서 새로운 git 브랜치를 체크아웃합니다. commit
은 새로운 브랜치의 시작점이 될 문자열 형태의 GitHash
입니다. commit
이 빈 문자열인 경우 현재 HEAD가 사용됩니다.
키워드 인자는 다음과 같습니다:
track::AbstractString=""
: 이 새로운 브랜치가 추적해야 하는 원격 브랜치의 이름입니다. 비어 있으면(기본값) 원격 브랜치를 추적하지 않습니다.force::Bool=false
:true
인 경우 브랜치 생성이 강제로 이루어집니다.set_head::Bool=true
:true
인 경우 브랜치 생성이 완료된 후 브랜치 헤드가repo
의 HEAD로 설정됩니다.
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>
와 동등합니다. repo
에서 git 커밋 commit
(문자열 형식의 GitHash
)을 체크아웃합니다. force
가 true
인 경우 체크아웃을 강제로 수행하고 현재 변경 사항을 모두 무시합니다. 현재 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
(로컬 파일 시스템의 경로여야 함)로 복제합니다. 복제 옵션, 예를 들어 베어 복제를 수행할지 여부는 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
인 경우, 원격을 베어 저장소로 복제하며, 이 경우repo_path
자체가 git 디렉토리가 되고repo_path/.git
가 아닙니다. 이는 작업 트리를 체크아웃할 수 없음을 의미합니다. git CLI 인수--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
에게 보내고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)
커밋 c
의 커미터의 Signature
를 반환합니다. 커미터는 원래 author
로 작성된 변경 사항을 커밋한 사람이며, author
와 동일할 필요는 없습니다. 예를 들어, author
가 패치를 이메일로 보내고 이를 커밋한 committer
가 있을 수 있습니다.
LibGit2.count
— FunctionLibGit2.count(f::Function, walker::GitRevWalker; oid::GitHash=GitHash(), by::Cint=Consts.SORT_NONE, rev::Bool=false)
GitRevWalker
walker
를 사용하여 저장소의 역사에서 모든 커밋을 "걷는" 동안, f
가 적용될 때 true
를 반환하는 커밋의 수를 찾습니다. 키워드 인자는 다음과 같습니다: * 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
— FunctionC 함수 포인터 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}
repo
라는 git 저장소에서 branch1
과 branch2
사이에 변경된 파일을 보여줍니다.
키워드 인자는 다음과 같습니다:
filter::Set{Consts.DELTA_STATUS}=Set([Consts.DELTA_ADDED, Consts.DELTA_MODIFIED, Consts.DELTA_DELETED]))
이며, diff에 대한 옵션을 설정합니다. 기본값은 추가, 수정 또는 삭제된 파일을 보여주는 것입니다.
변경된 파일의 이름만 반환하며, 내용은 반환하지 않습니다.
예시
LibGit2.branch!(repo, "branch/a")
LibGit2.branch!(repo, "branch/b")
# repo에 파일 추가
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)
te
가 참조하는 객체의 GitHash
를 반환합니다.
LibGit2.entrytype
— Functionentrytype(te::GitTreeEntry)
te
가 참조하는 객체의 유형을 반환합니다. 결과는 objtype
가 반환하는 유형 중 하나가 될 것입니다. 예를 들어, GitTree
또는 GitBlob
입니다.
LibGit2.fetch
— Functionfetch(rmt::GitRemote, refspecs; options::FetchOptions=FetchOptions(), msg="")
지정된 rmt
원격 git 저장소에서 가져오고, refspecs
를 사용하여 가져올 원격 브랜치를 결정합니다. 키워드 인자는 다음과 같습니다:
options
: 가져오기 옵션을 결정합니다. 예를 들어, 이후에 가지치기를 할지 여부입니다. 더 많은 정보는FetchOptions
를 참조하세요.msg
: reflogs에 삽입할 메시지입니다.
fetch(repo::GitRepo; kwargs...)
저장소 repo
의 업스트림에서 업데이트를 가져옵니다.
키워드 인자는 다음과 같습니다:
remote::AbstractString="origin"
: 가져올repo
의 원격 이름입니다. 비어 있으면 URL을 사용하여 익명 원격을 구성합니다.remoteurl::AbstractString=""
:remote
의 URL입니다. 지정되지 않으면 주어진remote
이름을 기반으로 가정됩니다.refspecs=AbstractString[]
: 가져오기 속성을 결정합니다.credentials=nothing
: 개인remote
에 대해 인증할 때 자격 증명 및/또는 설정을 제공합니다.callbacks=Callbacks()
: 사용자가 제공한 콜백 및 페이로드입니다.
git fetch [<remoteurl>|<repo>] [<refspecs>]
와 동등합니다.
LibGit2.fetchheads
— Functionfetchheads(repo::GitRepo) -> Vector{FetchHead}
repo
에 대한 모든 fetch head의 목록을 반환하며, 각 fetch head는 이름, URL 및 병합 상태를 포함하는 FetchHead
로 표현됩니다.
예제
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}
지정된 rmt
에 대한 fetch refspecs를 가져옵니다. 이 refspecs는 어떤 브랜치를 가져올지에 대한 정보를 포함하고 있습니다.
예제
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
— FunctionC 함수 포인터 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
저장소 repo
에서 git 병합을 수행하여 분기된 이력을 가진 커밋을 현재 브랜치에 병합합니다. 병합이 성공하면 true
를 반환하고, 그렇지 않으면 false
를 반환합니다.
키워드 인자는 다음과 같습니다:
committish::AbstractString=""
:committish
에 있는 명명된 커밋을 병합합니다.branch::AbstractString=""
: 브랜치branch
와 현재 브랜치에서 분기된 이후의 모든 커밋을 병합합니다.fastforward::Bool=false
:fastforward
가true
인 경우, 병합이 패스트 포워드인 경우에만 병합합니다(현재 브랜치 헤드가 병합할 커밋의 조상인 경우). 그렇지 않으면 병합을 거부하고false
를 반환합니다. 이는 git CLI 옵션--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](@ref) 객체로 캡처됨)
anns의 변경 사항을 저장소
repo`의 HEAD에 병합합니다. 키워드 인수는 다음과 같습니다:
merge_opts::MergeOptions = MergeOptions()
: 병합을 수행하는 방법에 대한 옵션으로, 패스트 포워딩이 허용되는지 여부를 포함합니다. 자세한 내용은MergeOptions
를 참조하십시오.checkout_opts::CheckoutOptions = CheckoutOptions()
: 체크아웃을 수행하는 방법에 대한 옵션입니다. 자세한 내용은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](@ref)
객체로 캡처됨) anns
의 변경 사항을 저장소 repo
의 HEAD에 병합합니다. 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()
현재 버전의 libgit2가 지원하는 git 기능 목록을 반환합니다. 예를 들어 스레딩, HTTPS 또는 SSH 사용 등이 있습니다.
LibGit2.filename
— Functionfilename(te::GitTreeEntry)
te
가 참조하는 디스크상의 객체의 파일 이름을 반환합니다.
LibGit2.filemode
— Functionfilemode(te::GitTreeEntry) -> Cint
te
가 참조하는 디스크상의 객체의 UNIX 파일 모드를 정수로 반환합니다.
LibGit2.gitdir
— FunctionLibGit2.gitdir(repo::GitRepo)
repo
의 "git" 파일의 위치를 반환합니다:
- 일반 저장소의 경우, 이는
.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 해시 객체를 생성하며, 문자열이 40개의 16진수 숫자보다 짧으면 GitShortHash
를 반환하고, 그렇지 않으면 GitHash
를 반환합니다.
예제
julia> LibGit2.githash"d114feb74ce633"
GitShortHash("d114feb74ce633")
julia> LibGit2.githash"d114feb74ce63307afe878a5228ad014e0289a85"
GitHash("d114feb74ce63307afe878a5228ad014e0289a85")
LibGit2.head
— FunctionLibGit2.head(repo::GitRepo) -> GitReference
현재 repo
의 HEAD에 대한 GitReference
를 반환합니다.
head(pkg::AbstractString) -> String
현재 pkg
레포의 HEAD GitHash
를 문자열로 반환합니다.
LibGit2.head!
— FunctionLibGit2.head!(repo::GitRepo, ref::GitReference) -> GitReference
repo
의 HEAD를 ref
가 가리키는 객체로 설정합니다.
LibGit2.head_oid
— FunctionLibGit2.head_oid(repo::GitRepo) -> GitHash
git 저장소 repo
의 현재 HEAD의 객체 ID를 조회합니다.
LibGit2.headname
— FunctionLibGit2.headname(repo::GitRepo)
git 저장소 repo
의 현재 HEAD 이름을 조회합니다. 만약 repo
가 현재 분리(detached) 상태라면, 분리된 HEAD의 이름을 반환합니다.
LibGit2.init
— FunctionLibGit2.init(path::AbstractString, bare::Bool=false) -> GitRepo
path
에 새 git 저장소를 엽니다. bare
가 false
인 경우 작업 트리가 path/.git
에 생성됩니다. bare
가 true
인 경우 작업 디렉토리가 생성되지 않습니다.
LibGit2.is_ancestor_of
— Functionis_ancestor_of(a::AbstractString, b::AbstractString, repo::GitRepo) -> Bool
a
가 b
의 조상인 경우 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
파일이 이진 파일인지 추측하기 위해 휴리스틱을 사용합니다: NULL 바이트를 검색하고 처음 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
는 diff에 대한 옵션의 사양입니다.
예제
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
는 diff에 대한 옵션의 사양입니다.
예제
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
의 모든 16진수 자리가 0인지 여부를 결정합니다.
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
: oid1..oid2
형식의 GitHash
범위. 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/*
refspecs와 mirror
플래그를 설정합니다.
LibGit2.mirror_cb
— FunctionC 함수 포인터를 위한 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]
이 단순히 anns[2]
의 조상인 경우, merge_analysis
는 패스트 포워드 병합이 가능하다고 보고할 것입니다.
두 개의 출력을 반환합니다: 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
: 패스트 포워드 병합을 허용하지 않습니다.MERGE_PREFERENCE_FASTFORWARD_ONLY
: 패스트 포워드 병합만 허용하고 다른 유형(충돌을 초래할 수 있음)은 허용하지 않습니다.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
와 동등합니다. repo
가 업데이트가 필요하면 true
를 반환합니다.
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())
지정된 rmt
원격 git 저장소에 푸시하며, refspecs
를 사용하여 푸시할 원격 브랜치를 결정합니다. 키워드 인자는 다음과 같습니다:
force
:true
인 경우, 충돌을 무시하고 강제 푸시가 발생합니다.options
: 푸시에 대한 옵션을 결정하며, 예를 들어 사용할 프록시 헤더를 설정합니다. 더 많은 정보는PushOptions
를 참조하세요.
푸시 refspecs에 대한 정보를 두 가지 다른 방법으로 추가할 수 있습니다: 저장소의 GitConfig
에서 옵션을 설정하거나(push.default
를 키로 사용) add_push!
를 호출하는 것입니다. 그렇지 않으면 push
호출에서 푸시 refspec을 명시적으로 지정해야 효과가 있습니다. 예를 들어: LibGit2.push(repo, refspecs=["refs/heads/master"])
.
push(repo::GitRepo; kwargs...)
repo
의 업스트림에 업데이트를 푸시합니다.
키워드 인자는 다음과 같습니다:
remote::AbstractString="origin"
: 푸시할 업스트림 원격의 이름입니다.remoteurl::AbstractString=""
:remote
의 URL입니다.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}
지정된 rmt
에 대한 push refspecs를 가져옵니다. 이 refspecs는 어떤 브랜치를 푸시할지에 대한 정보를 포함합니다.
예제
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
(또는 idx
가 소유한 리포지토리에서 treehash
가 가리키는 트리)를 인덱스 idx
로 읽어옵니다. 현재 인덱스 내용은 대체됩니다.
LibGit2.rebase!
— FunctionLibGit2.rebase!(repo::GitRepo, upstream::AbstractString="", newbase::AbstractString="")
현재 브랜치에서 자동 병합 리베이스를 시도합니다. 제공된 경우 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
ref
의 유형에 해당하는 Cint
를 반환합니다:
- 참조가 유효하지 않으면
0
- 참조가 객체 ID이면
1
- 참조가 상징적이면
2
LibGit2.remotes
— FunctionLibGit2.remotes(repo::GitRepo)
repo
의 원격 이름의 벡터를 반환합니다.
LibGit2.remove!
— Functionremove!(repo::GitRepo, files::AbstractString...)
remove!(idx::GitIndex, files::AbstractString...)
repo
의 인덱스(또는 repo
의 인덱스)에서 files
로 지정된 경로의 모든 파일을 제거합니다.
LibGit2.reset
— Functionreset(val::Integer, flag::Integer)
flag
에 의해 인덱스된 val
의 비트를 해제하고, 이를 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 OID). 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)
remote_name
에 대한 fetch 및 push url
을 GitRepo
또는 path
에 위치한 git 저장소에 설정합니다. 일반적으로 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}
repo
에 있는 path
의 파일 상태를 조회합니다. 예를 들어, 이 기능은 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...)
저장소 repo
에서 커밋 commit
에 새로운 git 태그 tag
(예: "v0.5"
)를 생성합니다.
키워드 인자는 다음과 같습니다:
msg::AbstractString=""
: 태그에 대한 메시지.force::Bool=false
:true
인 경우, 기존 참조가 덮어씌워집니다.sig::Signature=Signature(repo)
: 태그 작성자의 서명.
LibGit2.tag_delete
— FunctionLibGit2.tag_delete(repo::GitRepo, tag::AbstractString)
저장소 repo
에서 git 태그 tag
를 제거합니다.
LibGit2.tag_list
— FunctionLibGit2.tag_list(repo::GitRepo) -> Vector{String}
git 저장소 repo
의 모든 태그 목록을 가져옵니다.
LibGit2.target
— FunctionLibGit2.target(tag::GitTag)
tag
의 대상 객체의 GitHash
.
LibGit2.toggle
— Functiontoggle(val::Integer, flag::Integer)
flag
에 의해 인덱스된 val
의 비트를 뒤집습니다. 즉, 비트가 0
이면 토글 후 1
이 되고, 그 반대도 마찬가지입니다.
LibGit2.transact
— Functiontransact(f::Function, repo::GitRepo)
함수 f
를 git 저장소 repo
에 적용하며, f
를 적용하기 전에 snapshot
를 찍습니다. f
내에서 오류가 발생하면, restore
를 사용하여 repo
를 스냅샷 상태로 되돌립니다. 발생한 오류는 다시 발생하지만, 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
를 포함하는 브랜치에 지정된 업스트림 브랜치가 있는지 확인합니다.
업스트림 브랜치가 존재하면 GitReference
를 반환하고, 요청한 브랜치에 업스트림 대응 브랜치가 없으면 nothing
을 반환합니다.
LibGit2.update!
— Functionupdate!(repo::GitRepo, files::AbstractString...)
update!(idx::GitIndex, files::AbstractString...)
files
로 지정된 경로의 모든 파일을 인덱스 idx
(또는 repo
의 인덱스)에서 업데이트합니다. 인덱스의 각 파일 상태를 디스크의 현재 상태와 일치시켜, 디스크에서 제거된 경우 제거하고, 객체 데이터베이스에서 해당 항목을 업데이트합니다.
LibGit2.url
— Functionurl(rmt::GitRemote)
원격 git 저장소의 fetch URL을 가져옵니다.
예제
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
에 적용하며, f
가 성공적으로 반환되거나 오류를 발생시킨 후 obj
에서 close
를 호출하는 것을 보장합니다. 할당된 git 리소스가 더 이상 필요하지 않을 때 즉시 정리되도록 보장합니다.
LibGit2.with_warn
— Functionwith_warn(f::Function, ::Type{T}, args...)
리소스 관리 도우미 함수. args
로부터 T
유형의 인스턴스를 먼저 구성한 후 f
를 args
에 적용합니다. f
가 성공적으로 반환되거나 오류를 발생시킨 후 결과 객체에서 close
를 호출하도록 보장합니다. 할당된 git 리소스가 더 이상 필요하지 않을 때 즉시 정리되도록 보장합니다. f
에서 오류가 발생하면 오류를 포함하는 경고가 표시됩니다.
LibGit2.workdir
— FunctionLibGit2.workdir(repo::GitRepo)
repo
의 작업 디렉토리 위치를 반환합니다. 이는 베어 리포지토리에서는 오류를 발생시킵니다.
일반적으로 이는 gitdir(repo)
의 상위 디렉토리가 되지만, 경우에 따라 다를 수 있습니다: 예를 들어 core.worktree
구성 변수나 GIT_WORK_TREE
환경 변수가 설정된 경우입니다.
LibGit2.GitObject
— Method(::Type{T})(te::GitTreeEntry) where T<:GitObject
te
가 참조하는 git 객체를 가져와서 그것의 실제 타입(예: entrytype
에서 보여줄 타입)으로 반환합니다. 예를 들어 GitBlob
또는 GitTag
가 될 수 있습니다.
예시
tree = LibGit2.GitTree(repo, "HEAD^{tree}")
tree_entry = tree[1]
blob = LibGit2.GitBlob(tree_entry)
LibGit2.UserPasswordCredential
— Typeuser
및 password
매개변수만 지원하는 자격 증명
LibGit2.SSHCredential
— TypeSSH 자격 증명 유형
LibGit2.isfilled
— Functionisfilled(cred::AbstractCredential) -> Bool
인증에 사용하기 위해 자격 증명이 준비되었는지 확인합니다.
LibGit2.CachedCredentials
— Type자격 증명 정보를 재사용을 위해 캐시합니다.
LibGit2.CredentialPayload
— TypeLibGit2.CredentialPayload
같은 URL에 대한 자격 증명 콜백의 여러 호출 간 상태를 유지합니다. CredentialPayload
인스턴스는 다른 URL과 함께 사용될 때마다 reset!
되어야 합니다.
LibGit2.approve
— Functionapprove(payload::CredentialPayload; shred::Bool=true) -> Nothing
향후 인증에서 재사용하기 위해 payload
자격 증명을 저장합니다. 인증이 성공했을 때만 호출해야 합니다.
shred
키워드는 페이로드 자격 증명 필드의 민감한 정보를 파기할지 여부를 제어합니다. 테스트 중에는 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
- 휴대용 git과의 호환성을 위해 Windows에서 시스템 전체CONFIG_LEVEL_SYSTEM
- 시스템 전체 구성 파일; Linux 시스템의 경우/etc/gitconfig
CONFIG_LEVEL_XDG
- XDG 호환 구성 파일; 일반적으로~/.config/git/config
CONFIG_LEVEL_GLOBAL
- 사용자별 구성 파일(전역 구성 파일이라고도 함); 일반적으로~/.gitconfig
CONFIG_LEVEL_LOCAL
- 리포지토리 특정 구성 파일; 비베어 리포지토리의 경우$WORK_DIR/.git/config
CONFIG_LEVEL_APP
- 애플리케이션 특정 구성 파일; 애플리케이션에 의해 자유롭게 정의됨CONFIG_HIGHEST_LEVEL
- 사용 가능한 가장 높은 수준의 구성 파일을 나타냅니다(즉, 실제로 로드된 가장 구체적인 구성 파일)