Windows 環境で Git を使用する際に、 tortoiseGit を使っていることも多いかと思います。tortoiseGit は単独では使用できず、Git for Windows を追加でインストールして、git.exe を呼び出すという流れで多くの動作を実現しています。
tortoiseGit が git.exe を呼び出さないコマンド
しかしながら、git.exe を呼び出さずに tortoiseGit 自身が処理を行ってしまうという場面もあるようです。ソースコードから確認できた範囲では、以下の処理に該当する部分は tortoiseGit 自体で処理してしまい、git.exe を呼び出さなくても済むようにみえます。正確には tortoiseGit が使用している libgit2 ライブラリで処理させてしまう、という感じですね。
- GIT_CMD_MERGE_BASE
- GIT_CMD_DELETETAGBRANCH
- GIT_CMD_GETONEFILE
- GIT_CMD_ADD
- GIT_CMD_CHECKCONFLICTS
- GIT_CMD_GET_COMMIT
これらの値は以下に示す enum リストのものです。
typedef enum
{
GIT_CMD_CLONE,
GIT_CMD_FETCH,
GIT_CMD_COMMIT_UPDATE_INDEX,
GIT_CMD_DIFF,
GIT_CMD_RESET,
GIT_CMD_REVERT,
GIT_CMD_MERGE_BASE,
GIT_CMD_DELETETAGBRANCH,
GIT_CMD_GETONEFILE,
GIT_CMD_ADD,
GIT_CMD_PUSH,
GIT_CMD_CHECK_CLEAN_WT,
GIT_CMD_CHECKCONFLICTS,
GIT_CMD_GET_COMMIT,
GIT_CMD_LOGLISTDIFF,
} LIBGIT2_CMD;
tortoiseGit (libgit2ライブラリ) を使わないようにする
tortoiseGit が libgit2 ライブラリで処理をしないようにするフラグを発見しました。次に示すレジストリに値を書き込んで制御します。
HKEY_CURRENT_USER\Software\TortoiseGit
この場所に UseLibgit2 というキーを DWORD 値で作成します。値を 0 にすると、 libgit2 を使用せず、指定された git.exe の呼び出しになるようです。値を 1 にすると libgit2 使用する状態(=デフォルト) となります。
細かに制御したい場合
先の例は libgit2 ライブラリを使わずに処理させるという方法でしたが、一部の操作だけ git.exe にやらせるようにしたい、ということもできるようです。この場合には、 UseLibgit2 = 1 の状態で、以下の設定を行います。
先ほどと同じ場所で、 UseLibgit2_mask というキーを DWORD 値で作成します。このキーの値のデフォルト値は 0x000033c0 になります。これは冒頭で紹介した 6 つの操作が libgit2 ライブラリで行われる設定です。
フラグは以下のような関係になっています。各ビットは LIBGIT2_CMD の enum 値でシフトしたものということです。
flag |= (1 << GIT_CMD_ADD);
該当するビットを 1 にすると libgit2 が使用され、0 であれば git.exe による呼び出しというように挙動が変わります。
使用場面について
通常、tortoiseGit で git.exe 呼び出しに切り替えたい、という要求がなければ今回のフラグを変更することがないと考えられます。ただ git は各種フィルタ処理だったり、新しい機能だったり、libgit2 単体では処理できないようなものが含まれる可能性があると、私は考えています。
そういう場面に出遭った時、もしくは、動作不良の問題切り分けなどで、今回の機能は有効に使えるのではないか、と考えています。ただし、読者の皆様が試してみる際、運用する際には自己責任で試されるようお願いいたします。
コメント