LibGit2
LibGit2 モジュールは libgit2 に対するバインディングを提供します。libgit2 はバージョン管理システム Git のコア機能を実装するポータブルな C ライブラリです。このバインディングは現在 Julia のパッケージマネージャで使われています。このモジュールはいずれ個別のパッケージに移動する予定です。
このドキュメントは一部 libgit2 API に関するいくらかの前提知識を仮定します。ここに示すオブジェクトやメソッドについてさらに詳しくは、upstream の libgit2 API リファレンスを参照してください。
LibGit2.Buffer ── 型
LibGit2.CheckoutOptions ── 型
LibGit2.CheckoutOptions
git_checkout_options 構造体に対応します。
フィールドは次の通りです:
version: 使われている構造体のバージョン。将来この構造体が変更されたときのために用意されている。現在は必ず1となる。checkout_strategy: 衝突の処理方法、および欠損ファイルのチェックアウト/再作成を強制するかどうかを制御する。disable_filters: ゼロでない値を指定すると、UNIX と DOS の間で改行文字 (CRLF など) を変換するフィルタが適用されない。dir_mode: チェックアウト処理に関わる任意のディレクトリに対する読み込み/書き込み/アクセスの権限。デフォルトでは0755となる。file_mode: チェックアウト処理に関わる任意のファイルに対する読み込み/書き込み/実行の権限。デフォルトではファイルが blob かどうかに応じて0755または0644となる。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 ── 型
LibGit2.CloneOptions
git_clone_options 構造体に対応します。
フィールドは次の通りです:
version: 使われている構造体のバージョン。将来この構造体が変更されたときのために用意されている。現在は必ず1となる。checkout_opts: クローンの一環としてリモートのチェックアウトを行うときのオプション。fetch_opts:checkout_opts: クローンの一環としてリモートからチェックアウトする前に行うフェッチで使うオプション。-
bare:0だと、リモートレポジトリを完全にクローンする。0でないと、bare なクローンを行う。つまりレポジトリに含まれるソースファイルのローカルコピーは作成されず、gitdirとworkdirが同じになる。 localclone: ローカルオブジェクトデータベースをクローンするか、フェッチしてから構築するかを指定するフラグ。デフォルトだと libgit2 に決めさせる。libgit2 はローカルクローンに対しては git の情報を使った転送を利用しないが、file://で始まる URL に対しては利用する。checkout_branch: チェックアウトするブランチの名前。空文字列だと、リモートのデフォルトブランチがチェックアウトされる。repository_cb: クローンが作られる新しいレポジトリを作成するのに使われる省略可能なコールバック。repository_cb_payload: レポジトリコールバックに対するペイロード。-
remote_cb: クローン元のリモートを表すGitRemoteを作成するために使われる省略可能なコールバック。 remote_cb_payload: リモートコールバックに対するペイロード。
LibGit2.DescribeOptions ── 型
LibGit2.DescribeOptions
git_describe_options 対応します。
フィールドは次の通りです:
version: 使われている構造体のバージョン。将来この構造体が変更されたときのために用意されている。現在は必ず1となる。max_candidates_tags:refs/tagsに含まれる直近max_candidates_tags個のタグがコミットを説明している可能性があるとみなされる。デフォルトでは10であり、直近 10 個のタグに対してそれがコミットを表すかどうかの判定が行われる。describe_strategy:refs/tagsの全要素を考慮する (git-describe --tagsと等価に振る舞う) か、refs/の全要素を考慮する (git-describe --allと等価に振る舞う) かを制御する。pattern:patternにマッチするタグだけを考慮する。glob 展開をサポートする。only_follow_first_parent: マッチした参照/タグから記述されるオブジェクトの距離を計算するとき、直接の親からの距離だけを考える。-
show_commit_oid_as_fallback: コミットを記述する参照が見つからない場合に、エラーを送出せずにコミットのGitHashを表示する (デフォルトの振る舞い)。
LibGit2.DescribeFormatOptions ── 型
LibGit2.DiffDelta ── 型
LibGit2.DiffDelta
一つのエントリーに対する変更を記述する構造体です。git_diff_delta 構造体に対応します。
フィールドは次の通りです:
status:Consts.DELTA_STATUSのいずれか。ファイルが追記/変更/削除されたかどうかを示す。flags: デルタの両側のオブジェクトおよびデルタ自身に関するフラグ。ファイルをバイナリとテキストのどちらとして扱うべきか、ファイルが diff のどちら側に存在するのか、オブジェクト ID の正しさが確認されているかどうかを保持する。similarity: ファイルが改名またはコピーされたかどうかを示すのに使われる。nfiles: デルタに含まれるファイルの個数 (例えばサブモジュールのコミット ID に対してデルタを計算すると、デルタに複数のファイルが含まれる場合がある)。-
old_file: 変更前のファイルに関する情報を含むDiffFile構造体。 -
new_file: 変更後のファイルに関する情報を含むDiffFile構造体。
LibGit2.DiffFile ── 型
LibGit2.DiffFile
デルタの片側を記述する構造体です。git_diff_file 構造体に対応します。
フィールドは次の通りです:
-
id: diff に含まれる要素のGitHashの値。このDiffFileが表す diff の側が空 (例えば diff がファイルの削除を表す) ならGitHash(0)となる。 path: レポジトリのワーキングディレクトリを起点とした、このDiffFileが表す要素の相対パス (NULL終端)。size: 要素のサイズ (単位はバイト)。-
flags:git_diff_flag_tフラグの組み合わせ。この整数のi番目のビットがi番目のフラグを設定する。 -
mode: 要素に対するstatモード。 -
id_abbrev:idフィールドをstringに変換したときの長さ。通常OID_HEXSZ(40) に等しい。libgit2 のバージョン0.25.0以降にのみ存在する。
LibGit2.DiffOptionsStruct ── 型
LibGit2.DiffOptionsStruct
git_diff_options 構造体に対応します。
フィールドは次の通りです:
version: 使われている構造体のバージョン。将来この構造体が変更されたときのために用意されている。現在は必ず1となる。flags: diff に表示されるファイルを制御するフラグ。デフォルトではDIFF_NORMALとなる。ignore_submodules: サブモジュールのファイルを diff に表示するかどうか。デフォルトはSUBMODULE_IGNORE_UNSPECIFIEDであり、これはサブモジュールが diff に表示されるかどうかがサブモジュールの設定によって制御されることを意味する。pathspec: diff に含めるファイルのパスを表すパターンの配列。レポジトリに含まれる全てのファイルを使うのがデフォルトとなる。notify_cb: ファイルデルタが追加されたときに diff の変更をユーザーに通知するための省略可能なコールバック。progress_cb: diff の進捗を表示するための省略可能なコールバック。0.24.0以降の libgit2 でのみ意味を持つ。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 ── 型
LibGit2.FetchHead
フェッチされた HEAD に関する情報を保持します。フェッチを行うブランチの URL や名前、HEAD がローカルにマージされているかどうかといった情報が含まれます。
フィールドは次の通りです:
name: フェッチヘッドのローカル参照データベースの名前。例えば"refs/heads/master"など。url: フェッチヘッドの URL。-
oid: フェッチヘッドの先端のGitHashの値。 ismerge: リモートの変更がローカルコピーにマージされたかどうかを示す真偽値フラグ。この値がtrueなら、リモートのフェッチヘッドの最新版がローカルコピーにある。
LibGit2.FetchOptions ── 型
LibGit2.FetchOptions
git_fetch_options 構造体に対応します。
フィールドは次の通りです:
version: 使われている構造体のバージョン。将来この構造体が変更されたときのために用意されている。現在は必ず1となる。callbacks: フェッチの間に使われるリモートコールバック。prune: フェッチの後に prune を実行するかどうか。デフォルトではGitConfigにある設定が使われる。-
update_fetchhead: フェッチの後にFetchHeadを更新するかどうか。デフォルトでは更新を実行する。これは git の通常の振る舞いとなっている。 download_tags: リモートが持つタグをダウンロードするかどうか。デフォルトでは、サーバーからいずれにせよダウンロードされるオブジェクトに対するタグをリクエストする。-
proxy_opts: プロキシを通してリモートに接続するときのオプション。ProxyOptionsを参照。0.25.0よりも新しいバージョンの libgit2 にのみ存在する。 custom_headers: フェッチに必要な追加ヘッダー。0.24.0よりも新しいバージョンの libgit2 にのみ存在する。
LibGit2.GitAnnotated ── 型
GitAnnotated(repo::GitRepo, commit_id::GitHash)
GitAnnotated(repo::GitRepo, ref::GitReference)
GitAnnotated(repo::GitRepo, fh::FetchHead)
GitAnnotated(repo::GitRepo, comittish::AbstractString)
注釈が付いた git コミットです。コミットに関連する情報を rebase と merge に追加で渡すために、コミットが検索された方法と検索された理由が付いています。例えば衝突しているファイルでは衝突を起こしているマージにおけるソースあるいはターゲットのブランチに関する情報を持ちます。GitAnnotated はリモートブランチの先端や GitReference で記述されたブランチヘッドを参照することもできます。例えば FetchHead が渡されたときは参照先がリモートブランチの先端になります。
LibGit2.GitBlame ── 型
GitBlame(repo::GitRepo, path::AbstractString; options::BlameOptions=BlameOptions())
レポジトリ repo の履歴から収集した変更情報を使って、path にあるファイルに対する GitBlame オブジェクトを構築します。GitBlame オブジェクトはどのファイルチャンクを誰がいつどのように変更したかに関する記録を持ちます。options はファイルの内容と調査するコミットをどのように分離するかを制御します ──詳細は BlameOptions を参照してください。
LibGit2.GitBlob ── 型
GitBlob(repo::GitRepo, hash::AbstractGitHash)
GitBlob(repo::GitRepo, spec::AbstractString)
hash/spec が指定する GitBlob オブジェクトを repo から取り出して返します。
hashは完全なハッシュ (GitHash) と部分的なハッシュ (GitShortHash) のどちらでも構いません。-
specはオブジェクトを記述するテキストです: git のドキュメントに利用可能な記法のリストがあるので参照してください。
LibGit2.GitCommit ── 型
GitCommit(repo::GitRepo, hash::AbstractGitHash)
GitCommit(repo::GitRepo, spec::AbstractString)
hash/spec が指定する GitCommit オブジェクトを repo から取り出して返します。
hashは完全なハッシュ (GitHash) と部分的なハッシュ (GitShortHash) のどちらでも構いません。-
specはオブジェクトを記述するテキストです: git のドキュメントに利用可能な記法のリストがあるので参照してください。
LibGit2.GitHash ── 型
GitHash
sha-1 ハッシュに基づいた git オブジェクトの識別子です。20 バイトの文字列 (十六進 40 桁の数値) であり、レポジトリに含まれる GitObject を識別するのに使われます。
LibGit2.GitObject ── 型
GitObject(repo::GitRepo, hash::AbstractGitHash)
GitObject(repo::GitRepo, spec::AbstractString)
hash/spec が指定するオブジェクト (GitCommit, GitBlob, GitTree, GitTag のいずれか) を repo から取り出して返します。
hashは完全なハッシュ (GitHash) と部分的なハッシュ (GitShortHash) のどちらでも構いません。-
specはオブジェクトを記述するテキストです: git のドキュメントに利用可能な記法のリストがあるので参照してください。
LibGit2.GitRemote ── 型
GitRemote(repo::GitRepo,
rmt_name::AbstractString,
rmt_url::AbstractString) -> GitRemote
名前と URL を使ってリモート git レポジトリを検索します。デフォルトのフェッチ 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 ── 関数
GitRemoteAnon(repo::GitRepo, url::AbstractString) -> GitRemote
名前を使わずに URL だけを使ってリモート git レポジトリを検索します。
例
repo = LibGit2.init(repo_path)
remote = LibGit2.GitRemoteAnon(repo, repo_url)
LibGit2.GitRepo ── 型
LibGit2.GitRepoExt ── 関数
LibGit2.GitRepoExt(path::AbstractString,
flags::Cuint = Cuint(Consts.REPOSITORY_OPEN_DEFAULT))
振る舞いを細かく制御した上で path にある git レポジトリを開きます (path を読み込むときカレントユーザーは特別なアクセスグループのメンバーでなくてはならないかどうか、など)。
LibGit2.GitRevWalker ── 型
GitRevWalker(repo::GitRepo)
git レポジトリ repo のリビジョン (コミット) を走査します。GitRevWalker はレポジトリに含まれるコミットのコレクションであり、map, count や反復をサポートします (例えば count を使って特定の著者によるコミットの割合を計算できます)。
cnt = LibGit2.with(LibGit2.GitRevWalker(repo)) do walker
count((oid,repo)->(oid == commit_oid1),
walker,
oid=commit_oid1,
by=LibGit2.Consts.SORT_TIME)
end
この実行例では、count が特定の GitHash を持つコミットの個数を数えています。GitHash はコミットごとにユニークなので、cnt は 1 になるはずです。
LibGit2.GitShortHash ── 型
GitShortHash(hash::GitHash, len::Integer)
git オブジェクトの識別子の省略形です。ユニークであれば git オブジェクトの識別に利用できます。十六進数で表した hash の最初の len 桁からなり、他の桁は無視されます。
LibGit2.GitSignature ── 型
LibGit2.GitStatus ── 型
LibGit2.GitStatus(repo::GitRepo; status_opts=StatusOptions())
git レポジトリに含まれる各ファイルの状態に関する情報 (ファイルが変更されたかどうか、ステージされているかどうか、など) を収集します。status_opts は様々なオプションを設定するのに指定でき、例えば追跡していないファイルを考慮するかどうか、あるいはサブモジュールを含めるかどうかを設定できます。詳細は StatusOptions を参照してください。
LibGit2.GitTag ── 型
GitTag(repo::GitRepo, hash::AbstractGitHash)
GitTag(repo::GitRepo, spec::AbstractString)
hash/spec が指定する GitTag オブジェクトを repo から取り出して返します。
hashは完全なハッシュ (GitHash) と部分的なハッシュ (GitShortHash) のどちらでも構いません。-
specはオブジェクトを記述するテキストです: git のドキュメントに利用可能な記法のリストがあるので参照してください。
LibGit2.GitTree ── 型
GitTree(repo::GitRepo, hash::AbstractGitHash)
GitTree(repo::GitRepo, spec::AbstractString)
hash/spec が指定する GitTree オブジェクトを repo から取り出して返します。
hashは完全なハッシュ (GitHash) と部分的なハッシュ (GitShortHash) のどちらでも構いません。-
specはオブジェクトを記述するテキストです: git のドキュメントに利用可能な記法のリストがあるので参照してください。
LibGit2.IndexEntry ── 型
LibGit2.IndexTime ── 型
LibGit2.BlameOptions ── 型
LibGit2.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:blameに含める最も新しいコミットのGitHashの値。 -
oldest_commit:blameに含める最も古いコミットのGitHashの値。 min_line:blameに含める最初の行番号。デフォルトでは1となる。max_line:blameに含める最後の行番号。デフォルトではファイルの末尾を表す0となる。
LibGit2.MergeOptions ── 型
LibGit2.MergeOptions
git_merge_options 構造体に対応します。
フィールドは次の通りです:
version: 使われている構造体のバージョン。将来この構造体が変更されたときのために用意されている。現在は必ず1となる。-
flags: マージの振る舞いを表す列挙体。git_merge_flag_tで定義される。対応する Julia の列挙体はGIT_MERGEであり、次の値を持つ:MERGE_FIND_RENAMES: 共通の祖先とマージの "こちら側" あるいは "あちら側" の間でファイルの改名を検出するかどうか。ファイルが改名されるマージを許可する。MERGE_FAIL_ON_CONFLICT: 衝突を検出したとき、解決しようとせずにすぐ終了する。MERGE_SKIP_REUCマージで生まれるインデックスに REUC extension を書き込まない。MERGE_NO_RECURSIVE: マージされるコミットが複数のマージ元を持つとき、それらを再帰的にマージせずに最初のものだけを使う。
rename_threshold: 二つのファイルがどれだけ似ているときに改名されたかとみなすかを制御する基準値。一致度を示すパーセンテージを表す整数に設定される。デフォルトでは50となる。target_limit: 改名先のファイルとして検索・比較するファイルの最大個数。デフォルトでは200となる。metric: 二つのファイルの一致度を計算する、省略可能な独自の関数。改名の検出で利用される。recursion_limit: 行おうとしているマージに対する新しい仮想的なマージ元を作成しようとするときの、共通祖先に対するマージ回数の上限。デフォルトでは制限はない。このフィールドは0.24.0以降の libgit2 にのみ存在する。default_driver: 両側が変更されているときのマージドライバ。このフィールドは0.25.0以降の libgit2 にのみ存在する。-
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 ── 型
LibGit2.ProxyOptions
プロキシを通して接続するときのオプションです。
git_proxy_options 構造体に対応します。
フィールドは次の通りです:
version: 使われている構造体のバージョン。将来この構造体が変更されたときのために用意されている。現在は必ず1となる。-
proxytype: 利用するプロキシの種類を表す列挙体。git_proxy_tで定義される。対応する Julia の列挙体は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 ── 型
LibGit2.PushOptions
git_push_options 構造体に対応します。
フィールドは次の通りです:
version: 使われている構造体のバージョン。将来この構造体が変更されたときのために用意されている。現在は必ず1となる。parallelism: パックファイルを作成しなければならないときにパックビルダーが起動するワーカースレッドの個数を設定する。0にすると、パックビルダーがスレッドの個数を自動的に設定する。デフォルトでは1となる。callbacks: プッシュで使う (リモートの認証などを行う) コールバック。-
proxy_opts: リモートとのやり取りで使うプロキシのオプション。詳細はProxyOptionsを参照。0.25.0以降の libgit2 でのみ意味を持つ。 custom_headers: プッシュ操作で必要となる追加のヘッダー。0.24.0以降の libgit2 でのみ意味を持つ。
LibGit2.RebaseOperation ── 型
LibGit2.RebaseOperation
rebase で行われる単一の命令/操作を表します。git_rebase_operation 構造体に対応します。
フィールドは次の通りです:
-
optype: 現在行われている rebase 操作の種類。次のいずれか:REBASE_OPERATION_PICK: 考えているコミットを cherry-pick する。REBASE_OPERATION_REWORD: 考えているコミットを cherry-pick する。そのときプロンプトを使ってコミットメッセージを書き換える。REBASE_OPERATION_EDIT: 考えているコミットを cherry-pick する。そのときコミットの内容とメッセージの書き換えをユーザーに行わせる。REBASE_OPERATION_SQUASH: 考えているコミットと一つ前のコミットを squash する。二つのコミットのメッセージは合併される。REBASE_OPERATION_FIXUP: 考えているコミットと一つ前のコミットを squash する。前のコミットのメッセージだけが残る。REBASE_OPERATION_EXEC: コミットを cherry-pick しない。コマンドを実行し、正常に終了したら次の処理に移る。
-
id: この rebase ステップが操作しているコミットのGitHashの値。 exec:REBASE_OPERATION_EXECが使われた場合に、このステップで実行されるコマンド (例えば各コミットの後にテストスイートを実行するなど)。
LibGit2.RebaseOptions ── 型
LibGit2.RebaseOptions
git_rebase_options 構造体に対応します。
フィールドは次の通りです:
version: 使われている構造体のバージョン。将来この構造体が変更されたときのために用意されている。現在は必ず1となる。quiet: 同じ rebsae に手を貸している他の git クライアントに、この rebase は "静かに" 行われるべきであることを伝える。相互運用のために使われる。デフォルトでは1となる。-
inmemory: インメモリの rebase を開始する。rebase を行う呼び出し側はステップを実行して任意の変更をコミットして構わないが、HEAD のリワインドやレポジトリの更新をしてはいけない。workdirは変更されない。0.24.0以降の libgit2 にだけ存在する。 rewrite_notes_ref: rebase が終了したときにコミットノートを書き換えるのに使われるノートへの参照。merge_opts: 各 rebase ステップでツリーがどのようにマージされるかを制御するマージオプション。0.24.0以降の libgit2 にだけ存在する。-
checkout_opts: rebase の初期化、rebase ステップの実行、rebase 中断でファイルに書き込むときの checkout オプション。詳細はCheckoutOptionsを参照。
LibGit2.SignatureStruct ── 型
LibGit2.SignatureStruct
コミッターやタガーの署名です。git_signature 構造体に対応します。
フィールドは次の通りです:
name: コミッターあるいはコミットのオーサーのフルネーム。email: コミッター/オーサーに連絡できる電子メールアドレス。-
when: コミットがレポジトリにコミット/オーサーされた時刻を表すTimeStructの値。
LibGit2.StatusEntry ── 型
LibGit2.StatusEntry
HEAD に存在するファイルとインデックスに存在するファイルの差異、およびインデックスに存在するファイルとワーキングディレクトリに存在するファイルの差異を表します。git_status_entry 構造体に対応します。
フィールドは次の通りです:
LibGit2.StatusOptions ── 型
LibGit2.StatusOptions
git_status_foreach_ext() がコールバックを呼び出す方法を制御するためのオプションです。git_status_opt_t 構造体に対応します。
フィールドは次の通りです:
version: 使われている構造体のバージョン。将来この構造体が変更されたときのために用意されている。現在は必ず1となる。show: 確認すべきファイルと順序を示すフラグ。Consts.STATUS_SHOW_INDEX_AND_WORKDIRがデフォルトで使われる。flags: ステータスコールで使われるコールバックを制御するフラグ。pathspec: パスのマッチングで使われるパスの配列。パスマッチングの振る舞いはshowとflagsの値によって変化する。baseline: ワーキングディレクトリとインデックスを比較するときに使われるツリー。デフォルトでは HEAD が使われる。0.27.0以降の libgit2 にだけ存在する 1。
LibGit2.StrArrayStruct ── 型
LibGit2.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)
strs のデータは Julia によってアロケートされるために free が必要ないことに注意してください。
LibGit2.TimeStruct ── 型
LibGit2.add! ── 関数
add!(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 を使うと glob を無効化できます)。.gitignore または .gitconfig で無視されているファイルは基本的に追加されません。ただし、そのファイルが既にインデックスへ追加されているときは例外で、そのときは追加されます。
キーワード引数 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! ── 関数
add_fetch!(repo::GitRepo, rmt::GitRemote, fetch_spec::String)
指定されたリモートレポジトリ rmt に対するフェッチ refspec を追加します。この refspec はフェッチを行うブランチの情報を保持します。
例
julia> LibGit2.add_fetch!(repo, remote, "upstream");
julia> LibGit2.fetch_refspecs(remote)
String["+refs/heads/*:refs/remotes/upstream/*"]
LibGit2.add_push! ── 関数
add_push!(repo::GitRepo, rmt::GitRemote, push_spec::String)
指定されたリモートレポジトリ rmt に対するプッシュ 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! ── 関数
LibGit2.addblob!(repo::GitRepo, path::AbstractString)
path にあるファイルを読み、それを loose blob として repo のオブジェクトデータベースに追加します。読み込んだ blob の 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 ── 関数
LibGit2.authors ── 関数
authors(repo::GitRepo) -> Vector{Signature}
レポジトリ repo に対するコミットのオーサー全員の Signature を返します。
例
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 ── 関数
LibGit2.branch! ── 関数
branch!(repo::GitRepo,
branch_name::AbstractString,
commit::AbstractString="";
kwargs...)
新しい git ブランチをチェックアウトします。commit は文字列形式の GitHash であり、新しいブランチの開始地点を表します。
キーワード引数は次の通りです:
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! ── 関数
checkout!(repo::GitRepo, commit::AbstractString=""; force::Bool=true)
git checkout [-f] --detach <commit> と等価です。repo に含まれる git コミット commit (文字列形式の GitHash) をチェックアウトします。force が true だと、現在の変更を破棄してチェックアウトを強制的に行います。この操作により現在の HEAD が切り離される (detached になる) ことに注意してください。
例
repo = LibGit2.init(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 ── 関数
clone(repo_url::AbstractString, repo_path::AbstractString, clone_opts::CloneOptions)
repo_url にあるリモートレポジトリを repo_path にクローンします。repo_url にはリモート URL またはローカルファイルシステムのパスを指定でき、repo_path にはローカルファイルシステムのパスだけを指定できます。クローンが bare かどうかなどを指定するオプションは CloneOptions で設定されます。
例
repo_url = "https://github.com/JuliaLang/Example.jl"
repo = LibGit2.clone(repo_url, "/home/me/projects/Example")
clone(repo_url::AbstractString, repo_path::AbstractString; kwargs...)
repo_ul にあるリモートレポジトリをローカルファイルシステムの位置 repo_path にクローンします。
キーワード引数は次の通りです:
branch::AbstractString="": クローンするリモートのブランチ。デフォルトではレポジトリのデフォルトブランチ (たいていはmaster) が使われる。isbare::Bool=false:trueにすると、リモートレポジトリが bare レポジトリとしてクローンされる。つまり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 ── 関数
commit(repo::GitRepo, msg::AbstractString; kwargs...) -> GitHash
git_commit_create のラッパーです。msg をコミットメッセージとしてレポジトリ repo にコミットを作成します。新しいコミットの OID を返します。
キーワード引数は次の通りです:
refname::AbstractString=Consts.HEAD_FILE:NULLでないとき、コミットの後にこの名前の参照が新しいコミットを指すよう更新される。例えば"HEAD"とすれば、コミットの後に現在のブランチの HEAD が更新される。参照が存在しなければ新しく作成される。author::Signature = Signature(repo): コミットをオーサーした人物に関する情報が含まれる。committer::Signature = Signature(repo): コミットをレポジトリにコミットした人物の情報が含まれる。authorと必ずしも同じとは限らない。例えばauthorからメールを受け取ったcommiterがコミットした場合はcommitterとauthorが異なる。tree_id::GitHash = GitHash(): コミットの作成に使う git ツリー。コミットの祖先や他の履歴との関係を示す。このツリーはrepoに属する必要がある。-
parent_ids::Vector{GitHash}=GitHash[]: 新しいコミットの親となるコミットのGitHashのリスト。空でも構わない。例えばマージコミットでは複数の親コミットが存在する。
LibGit2.commit(rb::GitRebase, sig::GitSignature)
リベース rb に対して現在のパッチをコミットします。sig はコミッターを表します。コミットが既に適用されていれば静かに実行されます。
LibGit2.committer ── 関数
LibGit2.count ── 関数
LibGit2.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
count((oid, repo)->(oid == commit_oid1),
walker,
oid=commit_oid1,
by=LibGit2.Consts.SORT_TIME)
end
このコードの count は GitHash の値が commit_oid1 のコミットから新しいコミットに向かって走査し、GitHash が commit_oid1 に等しいコミットの個数を計算します。GitHash はコミットごとにユニークなので、cnt は 1 となります。
LibGit2.counthunks ── 関数
counthunks(blame::GitBlame)
ファイルに含まれる異なる "ハンク" の個数を返します。ハンクは複数の行からなることもあります。ハンクは通常まとめて追加/変更/削除されたファイルの一部を表し、例えばソースファイルに追加された関数や最適化された内部ループがハンクとなります。
LibGit2.create_branch ── 関数
LibGit2.create_branch(repo::GitRepo,
bname::AbstractString,
commit_obj::GitCommit; force::Bool=false)
レポジトリ repo にコミット commit_obj を指す bname という名前の新しいブランチを作成します。repo は commit_obj を含む必要があります。force が true だと、bname という名前のブランチが存在していたとしても上書きします。force が false だと、bname という名前のブランチが存在するときエラーとなります。
LibGit2.credentials_callback ── 関数
credential_callback(libgit2credptr::Ptr{Ptr{Cvoid}},
url_ptr::Cstring,
username_ptr::Cstring,
allowed_types::Cuint,
p::CredentialPayload) -> Cint
接続プロトコルに応じて異なる資格情報の取得機能を提供する libgit2 のコールバック関数です2。p は状態と設定を記録する LibGit2.CredentialPayload オブジェクトを表します。
allowed_types は試行すべき認証メソッドを指定する LibGit2.Consts.GIT_CREDTYPE のビットマスクです。
資格情報の認証は (サポートされていれば) 次の順序で行われます:
- SSH エージェント
- SSH の秘密鍵/公開鍵ペア
- プレーンテキストのユーザーネーム/パスワード
ユーザーに表示される認証プロンプトは ^D をタイプする (コントロールキーを押しながら d キーを押す) ことで中断できます。
libgit2 の用いる認証手順の仕様により、認証が失敗すると、この関数が認証が失敗したという情報と共にもう一度呼ばれます。そのとき失敗する認証情報を使って無限に認証が行われるのを避けるために、失敗したという情報がペイロードに記録されます。
詳細は libgit2 のガイド Authenticating against a server を参照してください。
LibGit2.credentials_cb ── 関数
LibGit2.delete_branch ── 関数
LibGit2.diff_files ── 関数
diff_files(repo::GitRepo, branch1::AbstractString,
branch2::AbstractString; kwarg...) -> Vector{AbstractString}
git レポジトリ repo の branch1 と branch2 で異なるファイルを返します。
キーワード引数は次の通りです:
filter::Set{Consts.DELTA_STATUS}: 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 ── 関数
LibGit2.entrytype ── 関数
LibGit2.fetch ── 関数
fetch(rmt::GitRemote, refspecs; options::FetchOptions=FetchOptions(), msg="")
指定されたリモート git レポジトリ rmt からフェッチを行います。フェッチするリモートブランチは refspec で決定されます。キーワード引数は次の通りです:
-
options: フェッチのオプション。フェッチ後に prune するかどうかなどを決める。詳しくはFetchOptionsを参照。 msg: reflog に挿入するメッセージ。
fetch(repo::GitRepo; kwargs...)
レポジトリ repo の upstream から更新をフェッチします。
キーワード引数は次の通りです:
remote::AbstractString="origin": フェッチするrepoのリモートを指定する名前。remoteを空にすると、URL を使って匿名リモートが構築される。remoteurl::AbstractString="":remoteの URL。指定しないと、与えられたremoteの名前から構築される。refspecs=AbstractString[]: フェッチのプロパティ。credentials=nothing: プライベートなremoteに対して認証を行うときの資格情報や設定。callbacks=Callbacks(): ユーザーが提供するコールバックとペイロード。
この関数は git fetch [<remoteurl>|<repo>] [<refspecs>] と等価です。
LibGit2.fetchheads ── 関数
fetchheads(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 ── 関数
fetch_refspecs(rmt::GitRemote) -> Vector{String}
指定されたリモートレポジトリ rmt のフェッチ refspec を取得します。これらの refspec はフェッチで使うべきブランチに関する情報を保持します。
例
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.merge_base ── 関数
merge_base(repo::GitRepo, one::AbstractString, two::AbstractString) -> GitHash
コミット one と two の間のマージ元 (共通祖先) を見つけます。one と two は文字列形式でも構いません。マージ元の GitHash を返します。
LibGit2.merge! ── メソッド
merge!(repo::GitRepo; kwargs...) -> Bool
git merge をレポジトリ repo に対して行います。いくつかのコミットを分岐した履歴と共に現在のブランチにマージします。マージが成功すれば true を返し、成功しなければ false を返します。
キーワード引数は次の通りです:
committish::AbstractString="":committishが示す名前の付いたコミットをマージする。branch::AbstractString="": ブランチbranchと、そのブランチに含まれるコミットで現在のブランチから分岐しているものを全てマージする。fastforward::Bool=false:trueだと、マージがファストフォワードとなる (現在のブランチヘッドがマージされるコミットの祖先である) 場合にのみマージを実行し、そうでなければマージを拒否してfalseを返す。git CLI の--ff-onlyオプションと等価。merge_opts::MergeOptions=MergeOptions(): マージのオプションを指定する。衝突が起きたときのマージ戦略などが指定される。checkout_opts::CheckoutOptions=CheckoutOptions(): チェックアウトステップのオプションを指定する。
この関数は git merge [--ff-only] [<committish> | <branch>] と等価です。
branch は GitReference に変換されるので、branch を指定するときは参照の形式で指定する必要があります。例えば branch_a というブランチをマージしたいなら、merge!(repo, branch="refs/heads/branch_a") などとしなければなりません。
LibGit2.merge! ── メソッド
merge!(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! ── メソッド
merge!(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! ── 関数
ffmerge!(repo::GitRepo, ann::GitAnnotated)
変更を現在の HEAD にファストフォワードでマージします。ann が指すコミットが現在の HEAD の子である場合 (例えばローカルブランチの先端の先にあるリモートブランチから変更を pull するときなど) にのみ行えます。
LibGit2.fullname ── 関数
LibGit2.features ── 関数
LibGit2.filename ── 関数
LibGit2.filemode ── 関数
LibGit2.gitdir ── 関数
LibGit2.git_url ── 関数
LibGit2.git_url(; kwargs...) -> String
与えられた URL 要素から文字列を作成します。キーワード引数 scheme が与えられないと、scp 風の記法を使った URL が生成されます。
キーワード引数は次の通りです4:
scheme::AbstractString="": 利用するプロトコルを識別する URL スキーム。HTTP では"http", SSH では"ssh"などとなる。schemeが与えられないと出力フォーマットは"ssh"となり、scp 風の記法が使われる。username::AbstractString="": 指定されれば、出力でユーザー名として使われる。host::AbstractString="": 出力で使うホスト名。ホスト名は指定される必要がある。port::Union{AbstractString,Integer}="": 指定されれば、出力でポート番号として使われる。scp 風の記法を使うときは指定できない。path::AbstractString="": 指定されれば、出力でパスとして使われる。
例
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 ── マクロ
@githash_str -> AbstractGitHash
与えられた文字列から git ハッシュオブジェクトを構築します。返り値の型は文字列が十六進 40 桁未満のとき GitShortHash で、それ以外のとき GitHash です。
例
julia> LibGit2.githash"d114feb74ce633"
GitShortHash("d114feb74ce633")
julia> LibGit2.githash"d114feb74ce63307afe878a5228ad014e0289a85"
GitHash("d114feb74ce63307afe878a5228ad014e0289a85")
LibGit2.head ── 関数
LibGit2.head(repo::GitRepo) -> GitReference
git レポジトリ repo が持つ現在の HEAD に対する GitReference を返します。
LibGit2.head! ── 関数
LibGit2.head!(repo::GitRepo, ref::GitReference) -> GitReference
ref が指すオブジェクトを git レポジトリ repo の HEAD に設定します。
LibGit2.head_oid ── 関数
LibGit2.headname ── 関数
LibGit2.headname(repo::GitRepo)
git レポジトリ repo が持つ現在の HEAD の名前を検索します。repo が現在 detached なら、そうなる前の HEAD の名前を返します。
LibGit2.init ── 関数
LibGit2.init(path::AbstractString, bare::Bool=false) -> GitRepo
新しい git レポジトリを path に開きます。bare が false だと、ワーキングツリーは path/.git に作成されます。bare が true だと、ワーキングディレクトリは作成されません。
LibGit2.is_ancestor_of ── 関数
is_ancestor_of(a::AbstractString, b::AbstractString, repo::GitRepo) -> Bool
a が b の祖先なら true を返します。a と b は文字列形式で表される GitHash です。
例
julia> repo = LibGit2.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 ── 関数
isbinary(blob::GitBlob) -> Bool
ヒューリスティックを使ってファイルがバイナリかどうかを推定します。推定は最初の 8000 バイトを調べ、ヌルバイトが存在することおよび出力可能文字と比べて出力不可能文字が無視できない頻度で出現することを確認するという方法で行われます。
LibGit2.iscommit ── 関数
iscommit(id::AbstractString, repo::GitRepo) -> Bool
git レポジトリ repo にコミット id が存在するかどうかを判定します。id は文字列形式の GitHash です。
例
julia> repo = LibGit2.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 ── 関数
LibGit2.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, "here's my cool new file")
end
LibGit2.isdiff(repo, "HEAD") # true になる。
この関数は git diff-index <treeish> [-- <pathspecs>] と等価です。
LibGit2.isdirty ── 関数
LibGit2.isdirty(repo::GitRepo,
pathspecs::AbstractString="";
cached::Bool=false) -> Bool
ワーキングツリー (cached = false のとき) またはインデックス (cached = false のとき) に含まれる追跡されるファイルに対する変更があるかどうかを判定します。pathspecs は diff に対するオプションの指定です。
例
repo = LibGit2.GitRepo(repo_path)
LibGit2.isdirty(repo) # false
open(joinpath(repo_path, new_file), "a") do f
println(f, "here's my cool new file")
end
LibGit2.isdirty(repo) # true になる。
LibGit2.isdirty(repo, new_file) # true になる。
この関数は git diff-index HEAD [-- <pathspecs>] と等価です。
LibGit2.isorphan ── 関数
LibGit2.isset ── 関数
LibGit2.iszero ── 関数
LibGit2.lookup_branch ── 関数
lookup_branch(repo::GitRepo,
branch_name::AbstractString,
remote::Bool=false) -> Union{GitReference, Nothing}
branch_name という名前のブランチが git レポジトリ repo に存在するかどうかを判定します。remote が true だと repo はリモート git レポジトリとみなされ、そうでなければ repo はローカルファイルシステムに存在するとみなされます。
要求されたブランチが存在すればそれを指す GitReference を返し、存在しなければ nothing を返します。
LibGit2.map ── 関数
LibGit2.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
このコードの map は GitRevWalker を使って GitHash を取得しています。
LibGit2.mirror_callback ── 関数
mirror_callback(remote::Ptr{Ptr{Cvoid}}, repo_ptr::Ptr{Cvoid},
name::Cstring, url::Cstring, payload::Ptr{Cvoid})
ミラーコールバック関数です。
この関数はリモート参照に対する +refs/*:refs/* という refspec と mirror フラグを設定します.
LibGit2.mirror_cb ── 関数
LibGit2.message ── 関数
message(c::GitCommit, raw::Bool=false)
コミット c で行われた変更を説明するコミットメッセージを返します。raw が false だと、少しだけ "整った" メッセージ (最後の改行を削除したもの) を返します。raw が true だと、末尾の改行は削除されません。
LibGit2.merge_analysis ── 関数
merge_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 ── 関数
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.need_update ── 関数
LibGit2.objtype ── 関数
LibGit2.path ── 関数
LibGit2.peel ── 関数
peel([T,] ref::GitReference)
型 T が得られるまで再帰的に ref の "皮をむき" ます。T が与えられなければ、GitTag 以外のオブジェクトが得られるまで ref の皮がむかれます。
皮をむいたときに GitTag オブジェクトが得られるのは注釈付きのタグだけです。デフォルトで使われる軽量タグは refs/tags/ 下にある参照であり、これは GitCommit オブジェクトを直接参照します。
LibGit2.posixpath ── 関数
LibGit2.push ── 関数
push(rmt::GitRemote, refspecs; force::Bool=false, options::PushOptions=PushOptions())
指定されたリモート git レポジトリ rmt にプッシュします。プッシュ先のリモートブランチは refspecs で決定されます。キーワード引数は次の通りです:
force:trueだと、衝突を無視する強制的なプッシュを行う。-
options: プッシュのオプション。利用するプロキシヘッダーなど。詳細はPushOptionsを参照。
プッシュ refspec に関する情報を追加する方法は二つあります:: レポジトリが持つ GitConfig に push.default というキーを持つオプションを設定する方法と、add_push! を呼ぶ方法です。このどちらも行っていない場合には、LibGit2.push(repo, refspecs=["refs/heads/master"]) などとして push の呼び出しに refspec を明示的に指定する必要があります。
push(repo::GitRepo; kwargs...)
repo の upstream に更新をプッシュします。
キーワード引数は次の通りです:
remote::AbstractString="origin": プッシュ先の upstream リモートの名前。remoteurl::AbstractString="":remoteの URL。refspecs=AbstractString[]: プッシュのプロパティ。force::Bool=false: プッシュが強制されたものであるかどうか。強制されたプッシュはリモートブランチを上書きする。credentials=nothing: プライベートなremoteに対する認証で使う資格情報と設定。callbacks=Callbacks(): ユーザーが提供するコールバックとペイロード。
この関数は git push [<remoteurl>|<repo>] [<refspecs>] と等価です。
LibGit2.push! ── メソッド
LibGit2.push!(w::GitRevWalker, cid::GitHash)
コミット cid から始まる走査を GitRevWalker 型の値 w にプッシュします。例えばこの関数を使うと、特定の年以降のコミット全てに関数を適用できます: その年の最初のコミットを cid としてこの関数に渡して、返り値の w を map に渡してください。
LibGit2.push_head! ── 関数
LibGit2.push_head!(w::GitRevWalker)
HEAD コミットとその祖先を GitRevWalker 型の値 w にプッシュします。この関数を呼ぶと、HEAD とその祖先全てが走査されることが保証されます。
LibGit2.push_refspecs ── 関数
push_refspecs(rmt::GitRemote) -> Vector{String}
指定されたリモート git レポジトリ rmt に対するプッシュ refspec を取得します。この refspec にはどのブランチにプッシュするかに関する情報が含まれます。
例
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 ── 関数
LibGit2.read_tree! ── 関数
LibGit2.read_tree!(idx::GitIndex, tree::GitTree)
LibGit2.read_tree!(idx::GitIndex, treehash::AbstractGitHash)
レポジトリに含まれるツリー tree (あるいは idx を保有するレポジトリ内の treehash が指すツリー) をインデックス idx に読み込みます。現在のインデックスの内容は置き換えられます。
LibGit2.rebase! ── 関数
LibGit2.rebase!(repo::GitRepo,
upstream::AbstractString="",
newbase::AbstractString="")
現在のブランチの自動的なマージリベースを試みます。リベース元には upstream が与えられればそれが使われ、与えられなければ upstream の追跡ブランチが使われます。newbase は rebase 先の ("onto" の) ブランチであり、デフォルトの値は upstream です。
衝突が起きて自動的に解決できない場合、リベースは中断されます。このときレポジトリとワーキングツリーは最初の状態に戻り、rebase! は GitError を送出します。この関数は次のコマンドライン文とほぼ同じです:
git rebase --merge [<upstream>]
if [ -d ".git/rebase-merge" ]; then
git rebase --abort
fi
LibGit2.ref_list ── 関数
LibGit2.reftype ── 関数
LibGit2.reftype(ref::GitReference) -> Cint
ref のタイプに対応する Cint を返します。返り値は次の通りです:
0: 参照が不当なとき。1: 参照がオブジェクト ID のとき。2: 参照がシンボリックのとき。
LibGit2.remotes ── 関数
LibGit2.remove! ── 関数
remove!(repo::GitRepo, files::AbstractString...)
remove!(idx::GitIndex, files::AbstractString...)
files で指定されるパスを持つファイルを、インデックス idx (または git レポジトリ repo のインデックス) から全て取り除きます。
LibGit2.reset ── 関数
LibGit2.reset! ── 関数
reset!(payload, [config]) -> CredentialPayload
payload の状態を初期値にリセットし、資格情報コールバックでもう一度使えるようにします。configが与えられれば、設定もその値に更新されます。
reset!(repo::GitRepo, obj::Union{GitObject, Nothing}, pathspecs::AbstractString...)
目標のコミットツリーのインデックスにおいて、pathspecs が指定するエントリーを更新します。
reset!(repo::GitRepo, obj::GitObject, mode::Cint;
checkout_opts::CheckoutOptions = CheckoutOptions())
現在のヘッドを指定されたコミット OID に設定し、オプションに応じてインデックスとワーキングツリーをそこにリセットします。
reset!(repo::GitRepo, committish::AbstractString, pathspecs::AbstractString...)
git reset [<committish>] [–] <pathspecs>... と等価です。
reset!(repo::GitRepo, id::GitHash, mode::Cint=Consts.RESET_MIXED)
git レポジトリ repo を id の状態にリセットします。リセットは mode が指定するモードで行われます。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 への変更が破棄され、unstage される
new_head = LibGit2.reset!(repo, head_oid, mode)
LibGit2.restore ── 関数
LibGit2.revcount ── 関数
LibGit2.revcount(repo::GitRepo, commit1::AbstractString, commit2::AbstractString)
commit1 と commit2 (文字列形式の committish OID) の間にあるリビジョンの個数を返します。commit1 と commit2 が異なるブランチにある可能性もあるので、revcount は "left-right" の形でリビジョンを集計します ──返り値は Int の二タプルであり、それぞれ "右の" コミットと "左の" コミットの個数、つまりそれぞれのコミットから到達可能なコミットからなる木の対称差における自分の側の要素数 (から 1 を引いた値) を表します。
この関数は 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 ── 関数
set_remote_url(repo::GitRepo, remote_name, url)
set_remote_url(repo::String, remote_name, url)
レポジトリ repo あるいは path にある git レポジトリの、remote_name に対するフェッチおよびプッシュ URL を url に設定します。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 ── 関数
LibGit2.shortname(ref::GitReference)
ref の名前の "人間が読める" 形をした省略形を返します。
julia> repo = LibGit2.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 ── 関数
LibGit2.split_cfg_entry ── 関数
LibGit2.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 ── 関数
LibGit2.status(repo::GitRepo, path::String) -> Union{Cuint, Cvoid}
git レポジトリ repo のパス path に存在するファイルの状態を確認します。例えば path にあるファイルが変更されていてステージとコミットを必要とするかどうかの判定に利用できます。
LibGit2.stage ── 関数
stage(ie::IndexEntry) -> Cint
ie のステージ番号を取得します。ステージ番号 0 はワーキングツリーの現在の状態を表し、他の番号はマージの衝突が起こった場合に使われます。そのような場合には、ファイルの現在状態が衝突のどちら側に属するのかが IndexEntry のステージ番号によって表されます。ステージ番号 0 はマージを試みる前の状態であり、1 はローカルで行われた変更、2 以降は他のブランチで行われた変更を表します (例えば複数のブランチが絡む "タコ足" マージでは 2, 3, 4, ... のステージ番号が使われることになります)。
LibGit2.tag_create ── 関数
LibGit2.tag_create(repo::GitRepo, tag::AbstractString, commit; kwargs...)
git レポジトリ repo のコミット commit に新しいタグ tag を作成します (例えば "v0.5" など)。
キーワード引数は次の通りです:
msg::AbstractString="": タグに対するメッセージ。force::Bool=false:trueなら、既存の参照が上書きされる。sig::Signature=Signature(repo): タグ付けを行う人物の署名。
LibGit2.tag_delete ── 関数
LibGit2.tag_list ── 関数
LibGit2.target ── 関数
LibGit2.toggle ── 関数
LibGit2.transact ── 関数
LibGit2.treewalk ── 関数
treewalk(f, tree::GitTree, post::Bool=false)
tree およびその部分木の要素を、行きがけ順 (post order) あるいは帰りがけ順 (pre order) で走査します。行きがけ順とは木の頂点から始めて左に向かって再帰的に下り、その後は部分木を右に向かって訪れる順序を意味します。帰りがけ順とは一番左の部分木の一番下の要素から始まり、右の部分木 (の一番下) を順に訪れる (頂点が最後になる) 順序を意味します。
関数パラメータ f は次のシグネチャを持つべきです:
(String, GitTreeEntry) -> Cint
f が負の値を返すと木の走査が終了します。また post が false だと、f が正の値を返す要素より (右) 下の部分木に対する走査がスキップされます。
LibGit2.upstream ── 関数
LibGit2.update! ── 関数
update!(repo::GitRepo, files::AbstractString...)
update!(idx::GitIndex, files::AbstractString...)
インデックス idx (あるいはレポジトリ repo のインデックス) 内の files で指定されるパスを持つファイルを全て更新します。ディスクから削除されているファイルをインデックスから削除し、変更されているファイルに対するオブジェクトデータベース内のエントリーを更新することで、インデックス内の全てのファイルの状態をディスク上の状態と合わせます。
LibGit2.url ── 関数
url(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 ── 関数
LibGit2.with ── 関数
with(f::Function, obj)
リソース管理で使われるヘルパー関数です。f を obj に適用し、f が正常に値を返すかエラーを送出したら obj に対して close を呼びます。この関数を使うと、アロケートした git リソースが必要なくなると同時にファイナライズされることを保証できます。
LibGit2.with_warn ── 関数
with_warn(f::Function, ::Type{T}, args...)
リソース管理で使われるヘルパー関数です。args から型 T のインスタンスを構築し、それに f を適用します。f が正常に値を返すかエラーを送出したら、構築された T 型のオブジェクトに対して close を呼び出します。この関数を使うと、アロケートされた git リソースが必要なくなると同時にファイナライズされることを保証できます。f でエラーが発生すると、エラーを含む警告が表示されます。
LibGit2.workdir ── 関数
LibGit2.GitObject ── メソッド
LibGit2.isfilled ── 関数
LibGit2.CredentialPayload ── 型
LibGit2.CredentialPayload
資格情報コールバックを同じ URL に対して複数回呼び出すときに、その状態を保持するための型です。異なる URL に対して同じ CredentialPayload インスタンスを使うときは、そのインスタンスに対して reset! を行う必要があります。
LibGit2.approve ── 関数
approve(payload::CredentialPayload; shred::Bool=true) -> Nothing
資格情報 payload を以降の認証で再利用するために保存します。認証が成功したときにだけ呼び出されるべきです。
キーワード引数 shred は資格情報のペイロードに含まれるセンシティブな情報を破壊すべきかどうかを制御します。テスト中にだけ false にするべきです。
LibGit2.reject ── 関数
reject(payload::CredentialPayload; shred::Bool=true) -> Nothing
資格情報の payload を破棄して、将来の認証で使えないようにします。認証が成功しなかったときにだけ呼び出されるべきです。
キーワード引数 shred は資格情報のペイロードに含まれるセンシティブな情報を破壊すべきかどうかを制御します。テスト中にだけ false にするべきです。