LibGit2
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
: 非ゼロの場合、CLRFのようなフィルタを適用しません(UNIXとDOSの間でファイルの改行を変換するため)。dir_mode
: チェックアウトに関与するディレクトリの読み取り/書き込み/アクセスモード。デフォルトは0755
です。file_mode
: チェックアウトに関与するファイルの読み取り/書き込み/アクセスモード。デフォルトは0755
または0644
で、blob によって異なります。file_open_flags
: チェックアウト中にファイルを開くために使用されるビットフラグ。notify_flags
: ユーザーが通知されるべきコンフリクトの種類に関するフラグ。notify_cb
: チェックアウトコンフリクトが発生した場合にユーザーに通知するためのオプションのコールバック関数。この関数が非ゼロの値を返すと、チェックアウトはキャンセルされます。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
の場合、リモートリポジトリ全体をクローンします。非ゼロの場合、ベアクローンを実行し、リポジトリ内にソースファイルのローカルコピーはなく、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
: 差分内のアイテムのGitHash
。この差分のこの側でアイテムが空である場合(たとえば、ファイルの削除の差分の場合)、これは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
: 2 つの別々のハンクの間に許可される 変更されていない 行の最大数。デフォルトは 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
のリビジョン(すなわちコミット)を歩くものです。これはリポジトリ内のコミットのコレクションであり、反復処理や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
のいずれか(他のブレイムフラグは 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
: 共通の祖先と「ours」または「theirs」側の間でファイルがリネームされたかどうかを検出します。ファイルがリネームされた場合のマージを許可します。MERGE_FAIL_ON_CONFLICT
: コンフリクトが見つかった場合、解決を試みるのではなく、すぐに終了します。MERGE_SKIP_REUC
: マージの結果として得られるインデックスにREUC拡張を記述しません。MERGE_NO_RECURSIVE
: マージされるコミットが複数のマージベースを持つ場合、再帰的にベースをマージしようとするのではなく、最初のものを使用します。
rename_threshold
: 2つのファイルが他方のリネームと見なされるためにどれだけ似ている必要があるか。これは整数で、類似性のパーセンテージを設定します。デフォルトは50です。target_limit
: リネームを探すために比較する最大ファイル数。デフォルトは200です。metric
: リネーム検出のために2つのファイル間の類似性を決定するために使用するオプションのカスタム関数。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
: マージの両側がセクションに変更を持つ場合、インデックスの「ours」側のバージョンを使用します。MERGE_FILE_FAVOR_THEIRS
: マージの両側がセクションに変更を持つ場合、インデックスの「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
: 2つのコールバック関数に提供されるペイロード。
例
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
: 問題のコミットを前のコミットにスクワッシュします。2つのコミットのコミットメッセージはマージされます。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)
path
にある既存のgit設定ファイルを現在のGitConfig
cfg
に追加します。ファイルが存在しない場合は、作成されます。
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
にはグロブパターンが含まれている可能性があり、これが展開され、一致するファイルが追加されます(INDEX_ADD_DISABLE_PATHSPEC_MATCH
が設定されていない限り、以下を参照)。ファイルが無視されている場合(.gitignore
または設定内)、それは追加されません、ただし、すでにインデックスで追跡されている場合は更新されます。キーワード引数flags
は、無視されたファイルに関する動作を制御するビットフラグのセットです:
Consts.INDEX_ADD_DEFAULT
- 上記のデフォルト。Consts.INDEX_ADD_FORCE
- 既存の無視ルールを無視し、すでに無視されている場合でもファイルをインデックスに強制的に追加します。Consts.INDEX_ADD_CHECK_PATHSPEC
-INDEX_ADD_FORCE
と同時に使用することはできません。ディスク上に存在するfiles
内の各ファイルが無視リストに含まれていないことを確認します。ファイルの1つが無視されている場合、関数はEINVALIDSPEC
を返します。Consts.INDEX_ADD_DISABLE_PATHSPEC_MATCH
- グロブマッチングをオフにし、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
自体がrepo_path/.git
ではなく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
にメールで送信し、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
(controlキーと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")
# リポジトリにファイルを追加
open(joinpath(LibGit2.path(repo),"file"),"w") do f
write(f, "hello repo
")
end
LibGit2.add!(repo, "file")
LibGit2.commit(repo, "add file")
# returns ["file"]
filt = Set([LibGit2.Consts.DELTA_ADDED])
files = LibGit2.diff_files(repo, "branch/a", "branch/b", filter=filt)
# returns [] 既存のファイルは変更されていないため
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
のすべてのフェッチヘッドのリストを返します。各フェッチヘッドは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}
指定された 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
オブジェクトとしてキャプチャされた) 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
オブジェクトとしてキャプチャされた) 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
が現在デタッチされている場合は、デタッチされている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
](@ref))がリポジトリに存在するかどうかを確認します。
例
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進数の桁がゼロであるかどうかを判断します。
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
はその2つの間のすべてのコミットに適用されます。 * 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
— 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]
が単に ann[2]
の祖先である場合、merge_analysis
はファストフォワードマージが可能であると報告します。
2つの出力、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
オブジェクトに剥がすことができます。軽量タグ(デフォルト)は、GitCommit
オブジェクトを直接指すrefs/tags/
の下の参照です。
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 に関する情報を追加する方法は他にも2つあります。リポジトリの 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
(または 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...)
files
で指定されたパスのすべてのファイルを、インデックス idx
(または repo
のインデックス) から削除します。
LibGit2.reset
— Functionreset(val::Integer, flag::Integer)
val
のビットをflag
でインデックス指定してリセットし、0
に戻します。
LibGit2.reset!
— Functionreset!(payload, [config]) -> CredentialPayload
payload
の状態を初期値にリセットし、資格情報コールバック内で再利用できるようにします。config
が提供されている場合、設定も更新されます。
ターゲットコミットツリーからのpathspecs
によって決定されたエントリのいくつかをインデックスに更新します。
指定されたコミットOIDに現在のHEADを設定し、オプションでインデックスと作業ツリーを一致させるようにリセットします。
git reset [<committish>] [–] <pathspecs>...
reset!(repo::GitRepo, id::GitHash, mode::Cint=Consts.RESET_MIXED)
リポジトリ repo
を id
の状態にリセットし、mode
で設定された3つのモードのいずれかを使用します:
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
の間のリビジョンの数をリストします(コミットの 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
のフェッチおよびプッシュ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 syntax documentationを参照してください。
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
に新しい git タグ tag
(例: "v0.5"
)を、コミット commit
に作成します。
キーワード引数は次の通りです:
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}
リポジトリ repo
にあるすべてのタグのリストを取得します。
LibGit2.target
— FunctionLibGit2.target(tag::GitTag)
tag
のターゲットオブジェクトのGitHash
。
LibGit2.toggle
— Functiontoggle(val::Integer, flag::Integer)
val
のflag
でインデックスされたビットを反転させます。つまり、ビットが0
の場合はトグル後に1
になり、逆もまた然りです。
LibGit2.transact
— Functiontransact(f::Function, repo::GitRepo)
関数 f
を git リポジトリ repo
に適用し、f
を適用する前に snapshot
を取得します。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
を含むブランチが指定されたアップストリームブランチを持っているかどうかを判断します。
アップストリームブランチが存在する場合はGitReference
を返し、要求されたブランチにアップストリームの対応がない場合はnothing
を返します。
LibGit2.update!
— Functionupdate!(repo::GitRepo, files::AbstractString...)
update!(idx::GitIndex, files::AbstractString...)
files
で指定されたパスのすべてのファイルを、インデックスidx
(またはrepo
のインデックス)で更新します。インデックス内の各ファイルの状態をディスク上の現在の状態と一致させ、ディスク上で削除されている場合はそれを削除し、オブジェクトデータベース内のエントリを更新します。
LibGit2.url
— Functionurl(rmt::GitRemote)
リモートgitリポジトリのフェッチ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に対する資格情報コールバックへの複数回の呼び出しの間に状態を保持します。異なるURLで使用される場合は、CredentialPayload
インスタンスは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
- 利用可能な設定ファイルの中で最も高いレベルを表します(つまり、実際に読み込まれる最も特定的な設定ファイル)