英語 ▾ トピック ▾ 最新バージョン ▾ git は 2.49.0 で最終更新されました

名前

git - お馬鹿なコンテンツトラッカー

概要

git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
    [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
    [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--no-lazy-fetch]
    [--no-optional-locks] [--no-advice] [--bare] [--git-dir=<path>]
    [--work-tree=<path>] [--namespace=<name>] [--config-env=<name>=<envvar>]
    <command> [<args>]

説明

Gitは、高速でスケーラブルな分散型バージョン管理システムで、高レベルの操作と内部への完全なアクセスを提供する非常に豊富なコマンドセットを備えています。

始めるには gittutorial[7] を参照し、日常的に役立つ最小限のコマンドセットについては giteveryday[7] を参照してください。Gitユーザーマニュアルには、より詳細な導入が記載されています。

基本的な概念を習得したら、このページに戻ってGitが提供するコマンドを学ぶことができます。「git help command」で個々のGitコマンドについて詳しく知ることができます。gitcli[7] マニュアルページでは、コマンドラインのコマンド構文の概要を説明しています。

最新のGitドキュメントのフォーマットされ、ハイパーリンクされたコピーは、https://git.github.io/htmldocs/git.html または https://git.dokyumento.jp/docs で閲覧できます。

オプション

-v
--version

git プログラムのGitスイートバージョンを出力します。

このオプションは内部的に git version ... に変換され、git-version[1] コマンドと同じオプションを受け入れます。--help も指定された場合、--version よりも優先されます。

-h
--help

概要と最も一般的に使用されるコマンドのリストを出力します。--all または -a オプションが指定された場合、利用可能なすべてのコマンドが出力されます。Gitコマンドが指定された場合、このオプションはそのコマンドのマニュアルページを表示します。

マニュアルページの表示方法を制御するための他のオプションも利用できます。git --help ... は内部的に git help ... に変換されるため、詳細については git-help[1] を参照してください。

-C <path>

現在のワーキングディレクトリではなく、<path> でgitが開始されたかのように実行します。複数の -C オプションが指定された場合、後続の各非絶対 -C <path> は、先行する -C <path> に相対的に解釈されます。<path> が存在しても空の場合、例えば -C "" の場合、現在のワーキングディレクトリは変更されません。

このオプションは、`--git-dir` や `--work-tree` のようなパス名を期待するオプションに影響します。それらのパス名の解釈は、`-C` オプションによって生じたワーキングディレクトリに相対的に行われます。例えば、以下の呼び出しは同等です。

git --git-dir=a.git --work-tree=b -C c status
git --git-dir=c/a.git --work-tree=c/b status
-c <name>=<value>

コマンドに設定パラメータを渡します。指定された値は、設定ファイルからの値を上書きします。<name> は、git config でリストされるのと同じ形式 (ドットで区切られたサブキー) であると想定されます。

git -c foo.bar ...= を省略しても構わず、`foo.bar` をブール値のtrueに設定します(設定ファイルで [foo]bar がそうであるように)。イコールを含みつつ空の値(例: git -c foo.bar= ...)にすると、`foo.bar` が空文字列に設定され、これは git config --type=bool によって false に変換されます。

--config-env=<name>=<envvar>

-c <name>=<value> と同様に、設定変数 <name> に値を指定します。ここで <envvar> は値を取得する環境変数の名前です。-c とは異なり、値を直接空文字列に設定するショートカットはありません。代わりに環境変数自体を空文字列に設定する必要があります。<envvar> が環境に存在しない場合、エラーとなります。<envvar> にはイコール記号を含めることはできません。これは、<name> にイコール記号が含まれる場合との曖昧さを避けるためです。

これは、一時的な設定オプションをgitに渡したい場合に便利ですが、他のプロセスがコマンドライン(例: /proc/self/cmdline)は読み取れるが、環境(例: /proc/self/environ)は読み取れないオペレーティングシステムでこれを行う場合に特に役立ちます。この動作はLinuxではデフォルトですが、お使いのシステムではそうではないかもしれません。

機密情報が値の一部である http.extraHeader のような変数にはセキュリティを追加する可能性がありますが、機密情報がキーの一部となりうる url.<base>.insteadOf のような変数には追加しないことに注意してください。

--exec-path[=<path>]

Gitのコアプログラムがインストールされているパス。これは GIT_EXEC_PATH 環境変数を設定することでも制御できます。パスが指定されない場合、git は現在の設定を出力して終了します。

--html-path

GitのHTMLドキュメントがインストールされているパスを、末尾のスラッシュなしで出力し、終了します。

--man-path

このバージョンのGitのマニュアルページのmanpath (man(1) を参照) を出力し、終了します。

--info-path

このバージョンのGitを説明するInfoファイルがインストールされているパスを出力し、終了します。

-p
--paginate

標準出力がターミナルである場合、すべての出力を less (または設定されていれば $PAGER) にパイプします。これは pager.<cmd> 設定オプションを上書きします(以下の「設定メカニズム」セクションを参照)。

-P
--no-pager

Gitの出力をページャにパイプしません。

--git-dir=<path>

リポジトリ(「.git」ディレクトリ)へのパスを設定します。これは GIT_DIR 環境変数を設定することでも制御できます。絶対パスまたは現在のワーキングディレクトリからの相対パスで指定できます。

このオプション(または GIT_DIR 環境変数)を使用して「.git」ディレクトリの場所を指定すると、「.git」サブディレクトリを持つディレクトリを見つけようとするリポジトリ探索(リポジトリとワーキングツリーのトップレベルが発見される方法)が無効になり、Gitにワーキングツリーのトップレベルにいることを伝えます。ワーキングツリーのトップレベルディレクトリにいない場合は、--work-tree=<path> オプション(または GIT_WORK_TREE 環境変数)を使用して、ワーキングツリーのトップレベルがどこにあるかをGitに伝える必要があります。

`` でgitが開始されたかのように実行したいだけの場合は、git -C <path> を使用してください。

--work-tree=<path>

ワーキングツリーへのパスを設定します。絶対パスまたは現在のワーキングディレクトリからの相対パスで指定できます。これは GIT_WORK_TREE 環境変数と core.worktree 設定変数(詳細については git-config[1] の core.worktree を参照)を設定することでも制御できます。

--namespace=<path>

Gitの名前空間を設定します。詳細については gitnamespaces[7] を参照してください。GIT_NAMESPACE 環境変数を設定することと同等です。

--bare

リポジトリをベアリポジトリとして扱います。GIT_DIR 環境変数が設定されていない場合、現在のワーキングディレクトリに設定されます。

--no-replace-objects

Gitオブジェクトを置き換えるために代替参照を使用しません。これは GIT_NO_REPLACE_OBJECTS 環境変数を任意の値でエクスポートすることと同等です。詳細については git-replace[1] を参照してください。

--no-lazy-fetch

欠落しているオブジェクトをプロミサーリモートからオンデマンドでフェッチしません。オブジェクトがローカルで利用可能かどうかを確認するために git cat-file -e <object> と一緒に使用すると便利です。これは GIT_NO_LAZY_FETCH 環境変数を 1 に設定することと同等です。

--no-optional-locks

ロックを必要とするオプションの操作を実行しません。これは GIT_OPTIONAL_LOCKS0 に設定することと同等です。

--no-advice

すべての助言ヒントの表示を無効にします。

--literal-pathspecs

パス指定をリテラルに扱います(つまり、グロブ展開、パス指定マジックなし)。これは GIT_LITERAL_PATHSPECS 環境変数を 1 に設定することと同等です。

--glob-pathspecs

すべてのパス指定に「glob」マジックを追加します。これは GIT_GLOB_PATHSPECS 環境変数を 1 に設定することと同等です。個々のパス指定でグロブ展開を無効にするには、パス指定マジック「:(literal)」を使用できます。

--noglob-pathspecs

すべてのパス指定に「literal」マジックを追加します。これは GIT_NOGLOB_PATHSPECS 環境変数を 1 に設定することと同等です。個々のパス指定でグロブ展開を有効にするには、パス指定マジック「:(glob)」を使用できます。

--icase-pathspecs

すべてのパス指定に「icase」マジックを追加します。これは GIT_ICASE_PATHSPECS 環境変数を 1 に設定することと同等です。

--list-cmds=<group>[,<group>…​]

グループ別にコマンドをリストします。これは内部/実験的なオプションであり、将来変更または削除される可能性があります。サポートされるグループは次のとおりです: builtins, parseopt (parse-optionsを使用する組み込みコマンド), main (libexecディレクトリ内のすべてのコマンド), others ($PATH 内のgit-プレフィックスを持つ他のすべてのコマンド), list-<category> (command-list.txtのカテゴリを参照), nohelpers (ヘルパーコマンドを除外), alias, config (config変数 completion.commands からコマンドリストを取得)。

--attr-source=<tree-ish>

ワーキングツリーの代わりに <tree-ish> から gitattributes を読み込みます。gitattributes[5] を参照してください。これは GIT_ATTR_SOURCE 環境変数を設定することと同等です。

Gitコマンド

Gitは、高レベル(「ポーセリン」)コマンドと低レベル(「プラミング」)コマンドに分けられます。

高レベルコマンド(ポーセリン)

ポーセリンコマンドは、メインコマンドと補助的なユーザーユーティリティに分けられます。

主なポーセリンコマンド

git-add[1]

ファイルの内容をインデックスに追加する

git-am[1]

メールボックスから一連のパッチを適用する

git-archive[1]

指定されたツリーからファイルのアーカイブを作成する

git-backfill[1]

部分クローンで欠落しているオブジェクトをダウンロードする

git-bisect[1]

バイナリサーチを使用してバグを導入したコミットを見つける

git-branch[1]

ブランチを一覧表示、作成、または削除する

git-bundle[1]

アーカイブによってオブジェクトと参照を移動する

git-checkout[1]

ブランチを切り替える、またはワーキングツリーファイルを復元する

git-cherry-pick[1]

既存のコミットによって導入された変更を適用する

git-citool[1]

git-commit のグラフィカルな代替

git-clean[1]

ワーキングツリーから追跡されていないファイルを削除する

git-clone[1]

リポジトリを新しいディレクトリにクローンする

git-commit[1]

リポジトリへの変更を記録する

git-describe[1]

利用可能な参照に基づいてオブジェクトに人間が読める名前を付ける

git-diff[1]

コミット間、コミットとワーキングツリー間の変更などを表示する

git-fetch[1]

他のリポジトリからオブジェクトと参照をダウンロードする

git-format-patch[1]

メール送信用のパッチを準備する

git-gc[1]

不要なファイルをクリーンアップし、ローカルリポジトリを最適化する

git-grep[1]

パターンに一致する行を出力する

git-gui[1]

Gitのポータブルなグラフィカルインターフェース

git-init[1]

空のGitリポジトリを作成するか、既存のリポジトリを再初期化する

git-log[1]

コミットログを表示する

git-maintenance[1]

Gitリポジトリデータを最適化するタスクを実行する

git-merge[1]

2つ以上の開発履歴を結合する

git-mv[1]

ファイル、ディレクトリ、またはシンボリックリンクを移動または名前変更する

git-notes[1]

オブジェクトノートを追加または検査する

git-pull[1]

他のリポジトリまたはローカルブランチからフェッチして統合する

git-push[1]

関連するオブジェクトとともにリモート参照を更新する

git-range-diff[1]

2つのコミット範囲(例: ブランチの2つのバージョン)を比較する

git-rebase[1]

別のベースチップの上にコミットを再適用する

git-reset[1]

現在のHEADを指定された状態にリセットする

git-restore[1]

ワーキングツリーファイルを復元する

git-revert[1]

既存のコミットの一部を元に戻す

git-rm[1]

ワーキングツリーとインデックスからファイルを削除する

git-shortlog[1]

git log 出力を要約する

git-show[1]

さまざまな種類のオブジェクトを表示する

git-sparse-checkout[1]

ワーキングツリーを追跡対象ファイルの一部に絞り込む

git-stash[1]

ダーティワーキングディレクトリの変更を一時的に退避させる

git-status[1]

ワーキングツリーのステータスを表示する

git-submodule[1]

サブモジュールを初期化、更新、または検査する

git-switch[1]

ブランチを切り替える

git-tag[1]

GPGで署名されたタグオブジェクトを作成、一覧表示、削除、または検証する

git-worktree[1]

複数のワーキングツリーを管理する

gitk[1]

Gitリポジトリブラウザ

scalar[1]

大規模なGitリポジトリを管理するためのツール

補助コマンド

操作コマンド

git-config[1]

リポジトリまたはグローバルオプションを取得および設定する

git-fast-export[1]

Gitデータエクスポートツール

git-fast-import[1]

高速Gitデータインポートツール用のバックエンド

git-filter-branch[1]

ブランチを書き換える

git-mergetool[1]

マージコンフリクトを解決するためにマージ競合解決ツールを実行する

git-pack-refs[1]

効率的なリポジトリアクセスのためにヘッドとタグをパックする

git-prune[1]

オブジェクトデータベースから到達不能なすべてのオブジェクトを削除する

git-reflog[1]

reflog情報を管理する

git-refs[1]

参照への低レベルアクセス

git-remote[1]

追跡対象リポジトリのセットを管理する

git-repack[1]

リポジトリ内のアンパックされたオブジェクトをパックする

git-replace[1]

オブジェクトを置き換える参照を作成、一覧表示、削除する

調査コマンド

git-annotate[1]

ファイルの行にコミット情報を付加する

git-blame[1]

ファイルの各行を最後に変更したリビジョンと作者を表示する

git-bugreport[1]

ユーザーがバグレポートを提出するための情報を収集する

git-count-objects[1]

アンパックされたオブジェクトの数とディスク使用量を数える

git-diagnose[1]

診断情報のzipアーカイブを生成する

git-difftool[1]

一般的なdiffツールを使用して変更を表示する

git-fsck[1]

データベース内のオブジェクトの接続性と有効性を検証する

git-help[1]

Gitに関するヘルプ情報を表示する

git-instaweb[1]

gitwebでワーキングリポジトリを即座にブラウズする

git-merge-tree[1]

インデックスやワーキングツリーに触れずにマージを実行する

git-rerere[1]

競合したマージの記録された解決を再利用する

git-show-branch[1]

ブランチとそのコミットを表示する

git-verify-commit[1]

コミットのGPG署名をチェックする

git-verify-tag[1]

タグのGPG署名をチェックする

git-version[1]

Gitのバージョン情報を表示する

git-whatchanged[1]

各コミットが導入する差分とともにログを表示する

gitweb[1]

Gitウェブインターフェース(Gitリポジトリへのウェブフロントエンド)

他のシステムとの連携

これらのコマンドは、外部SCMや、電子メールによるパッチを介して他の人々とのやり取りを目的としています。

git-archimport[1]

GNU ArchリポジトリをGitにインポートする

git-cvsexportcommit[1]

単一のコミットをCVSチェックアウトにエクスポートする

git-cvsimport[1]

人々が嫌う別のSCMからデータを救出する

git-cvsserver[1]

Git用のCVSサーバーエミュレータ

git-imap-send[1]

標準入力からIMAPフォルダにパッチのコレクションを送信する

git-p4[1]

PerforceリポジトリからのインポートとPerforceリポジトリへの送信

git-quiltimport[1]

現在のブランチにquilパッチセットを適用する

git-request-pull[1]

保留中の変更の概要を生成する

git-send-email[1]

パッチのコレクションをメールとして送信する

git-svn[1]

SubversionリポジトリとGit間の双方向操作

リセット、リストア、およびリバート

似た名前のコマンドが3つあります: git resetgit restoregit revert

  • git-revert[1] は、他のコミットで行われた変更を元に戻す新しいコミットを作成することです。

  • git-restore[1] は、インデックスまたは別のコミットからワーキングツリー内のファイルを復元することです。このコマンドはブランチを更新しません。このコマンドは、インデックス内のファイルを別のコミットから復元するためにも使用できます。

  • git-reset[1] は、ブランチからコミットを追加または削除するためにチップを移動することで、ブランチを更新することです。この操作はコミット履歴を変更します。

    git reset は、インデックスを復元するためにも使用でき、git restore と一部機能が重複します。

低レベルコマンド(プラミング)

Gitは独自のポーセリンレイヤーを含んでいますが、その低レベルコマンドは代替ポーセリンの開発をサポートするのに十分です。このようなポーセリンの開発者は、まず git-update-index[1]git-read-tree[1] について読むことから始めるかもしれません。

これらの低レベルコマンドのインターフェース(入力、出力、オプションセット、セマンティクス)は、主にスクリプトでの使用を目的としているため、ポーセリンレベルのコマンドよりもはるかに安定していることを意図しています。一方、ポーセリンコマンドのインターフェースは、エンドユーザーエクスペリエンスを向上させるために変更される可能性があります。

以下の説明では、低レベルコマンドを、オブジェクト(リポジトリ、インデックス、ワーキングツリー内)を操作するコマンド、オブジェクトを照会および比較するコマンド、リポジトリ間でオブジェクトと参照を移動するコマンドに分類します。

操作コマンド

git-apply[1]

ファイルおよび/またはインデックスにパッチを適用する

git-checkout-index[1]

インデックスからワーキングツリーにファイルをコピーする

git-commit-graph[1]

Gitコミットグラフファイルを書き込み、検証する

git-commit-tree[1]

新しいコミットオブジェクトを作成する

git-hash-object[1]

オブジェクトIDを計算し、オプションでファイルからオブジェクトを作成する

git-index-pack[1]

既存のパックされたアーカイブのパックインデックスファイルを構築する

git-merge-file[1]

3方向ファイルマージを実行する

git-merge-index[1]

マージが必要なファイルのマージを実行する

git-mktag[1]

追加の検証付きでタグオブジェクトを作成する

git-mktree[1]

ls-tree形式のテキストからツリーオブジェクトを構築する

git-multi-pack-index[1]

マルチパックインデックスを書き込み、検証する

git-pack-objects[1]

オブジェクトのパックされたアーカイブを作成する

git-prune-packed[1]

パックファイルに既に存在する余分なオブジェクトを削除する

git-read-tree[1]

ツリー情報をインデックスに読み込む

git-replay[1]

実験的: 新しいベースでコミットをリプレイする。ベアリポジトリでも動作。

git-symbolic-ref[1]

シンボリック参照を読み取り、変更、削除する

git-unpack-objects[1]

パックされたアーカイブからオブジェクトをアンパックする

git-update-index[1]

ワーキングツリーのファイル内容をインデックスに登録する

git-update-ref[1]

参照に格納されているオブジェクト名を安全に更新する

git-write-tree[1]

現在のインデックスからツリーオブジェクトを作成する

調査コマンド

git-cat-file[1]

リポジトリオブジェクトの内容または詳細を提供する

git-cherry[1]

アップストリームにまだ適用されていないコミットを見つける

git-diff-files[1]

ワーキングツリーとインデックスのファイルを比較する

git-diff-index[1]

ツリーをワーキングツリーまたはインデックスと比較する

git-diff-tree[1]

2つのツリーオブジェクトを介して見つかったブロブの内容とモードを比較する

git-for-each-ref[1]

各参照に関する情報を出力する

git-for-each-repo[1]

リポジトリのリストに対してGitコマンドを実行する

git-get-tar-commit-id[1]

git-archiveを使用して作成されたアーカイブからコミットIDを抽出する

git-ls-files[1]

インデックスおよびワーキングツリー内のファイルに関する情報を表示する

git-ls-remote[1]

リモートリポジトリ内の参照を一覧表示する

git-ls-tree[1]

ツリーオブジェクトの内容を一覧表示する

git-merge-base[1]

マージにとって可能な限り最適な共通祖先を見つける

git-name-rev[1]

指定されたリビジョンのシンボリック名を見つける

git-pack-redundant[1]

冗長なパックファイルを見つける

git-rev-list[1]

コミットオブジェクトを逆時系列順にリストする

git-rev-parse[1]

パラメータを選別・加工する

git-show-index[1]

パックされたアーカイブインデックスを表示する

git-show-ref[1]

ローカルリポジトリ内の参照を一覧表示する

git-unpack-file[1]

ブロブの内容を含む一時ファイルを作成する

git-var[1]

Git論理変数を表示する

git-verify-pack[1]

パックされたGitアーカイブファイルを検証する

一般的に、調査コマンドはワーキングツリー内のファイルには触れません。

リポジトリの同期

git-daemon[1]

Gitリポジトリ用の非常にシンプルなサーバー

git-fetch-pack[1]

別のリポジトリから欠落しているオブジェクトを受信する

git-http-backend[1]

HTTP経由のGitのサーバーサイド実装

git-send-pack[1]

Gitプロトコル経由でオブジェクトを別のリポジトリにプッシュする

git-update-server-info[1]

補助情報ファイルを更新して、ダムサーバーを支援する

以下は、上記のコマンドで使用されるヘルパーコマンドです。エンドユーザーが直接使用することは通常ありません。

git-http-fetch[1]

HTTP経由でリモートGitリポジトリからダウンロードする

git-http-push[1]

HTTP/DAV経由でオブジェクトを別のリポジトリにプッシュする

git-receive-pack[1]

リポジトリにプッシュされたものを受信する

git-shell[1]

Git専用SSHアクセスのための制限付きログインシェル

git-upload-archive[1]

アーカイブをgit-archiveに送り返す

git-upload-pack[1]

パックされたオブジェクトをgit-fetch-packに送り返す

内部ヘルパーコマンド

これらは他のコマンドで使用される内部ヘルパーコマンドです。エンドユーザーが直接使用することは通常ありません。

git-check-attr[1]

gitattributes情報を表示する

git-check-ignore[1]

gitignore / 除外ファイルをデバッグする

git-check-mailmap[1]

連絡先の正規名とメールアドレスを表示する

git-check-ref-format[1]

参照名が正しく形成されていることを確認する

git-column[1]

データを列で表示する

git-credential[1]

ユーザー資格情報を取得および保存する

git-credential-cache[1]

パスワードを一時的にメモリに保存するヘルパー

git-credential-store[1]

資格情報をディスクに保存するヘルパー

git-fmt-merge-msg[1]

マージコミットメッセージを生成する

git-hook[1]

gitフックを実行する

git-interpret-trailers[1]

コミットメッセージに構造化情報を追加または解析する

git-mailinfo[1]

単一の電子メールメッセージからパッチと作者情報を抽出する

git-mailsplit[1]

シンプルなUNIX mbox分割プログラム

git-merge-one-file[1]

git-merge-index とともに使用する標準ヘルパープログラム

git-patch-id[1]

パッチのユニークIDを計算する

git-sh-i18n[1]

シェルスクリプト用のGitのi18nセットアップコード

git-sh-setup[1]

共通のGitシェルスクリプトセットアップコード

git-stripspace[1]

不要な空白を削除する

ガイド

以下のドキュメントページは、Gitの概念に関するガイドです。

gitcore-tutorial[7]

開発者向けのGitコアチュートリアル

gitcredentials[7]

Gitにユーザー名とパスワードを提供する

gitcvs-migration[7]

CVSユーザーのためのGit

gitdiffcore[7]

diff出力の調整

giteveryday[7]

日常的なGitに役立つ最小限のコマンドセット

gitfaq[7]

Gitの使用に関するよくある質問

gitglossary[7]

Git用語集

gitnamespaces[7]

Gitの名前空間

gitremote-helpers[7]

リモートリポジトリと対話するためのヘルパープログラム

gitsubmodules[7]

あるリポジトリを別のリポジトリ内にマウントする

gittutorial[7]

Gitのチュートリアル入門

gittutorial-2[7]

Gitのチュートリアル入門:パート2

gitworkflows[7]

Gitでの推奨ワークフローの概要

リポジトリ、コマンド、およびファイルインターフェース

このドキュメントでは、ユーザーが直接対話することを想定しているリポジトリおよびコマンドインターフェースについて説明します。基準の詳細については、git-help[1]--user-formats を参照してください。

gitattributes[5]

パスごとの属性の定義

gitcli[7]

Gitコマンドラインインターフェースと慣習

githooks[5]

Gitが使用するフック

gitignore[5]

意図的に追跡しないファイルを指定して無視する

gitmailmap[5]

作者/コミッター名および/またはEメールアドレスをマップする

gitmodules[5]

サブモジュールのプロパティの定義

gitrepository-layout[5]

Gitリポジトリレイアウト

gitrevisions[7]

Gitのリビジョンと範囲の指定

ファイル形式、プロトコル、およびその他の開発者インターフェース

このドキュメントでは、ファイル形式、ワイヤプロトコル、およびその他のGit開発者インターフェースについて説明します。git-help[1]--developer-interfaces を参照してください。

gitformat-bundle[5]

バンドルファイル形式

gitformat-chunk[5]

チャンクベースのファイル形式

gitformat-commit-graph[5]

Gitコミットグラフ形式

gitformat-index[5]

Gitインデックス形式

gitformat-pack[5]

Gitパック形式

gitformat-signature[5]

Git暗号署名形式

gitprotocol-capabilities[5]

プロトコルv0およびv1の機能

gitprotocol-common[5]

さまざまなプロトコルに共通の事柄

gitprotocol-http[5]

Git HTTPベースプロトコル

gitprotocol-pack[5]

パックがネットワーク経由で転送される仕組み

gitprotocol-v2[5]

Gitワイヤプロトコル、バージョン2

設定メカニズム

Gitは、リポジトリごとおよびユーザーごとのカスタマイズを保存するためにシンプルなテキスト形式を使用します。このような設定ファイルは次のようになります。

#
# A '#' or ';' character indicates a comment.
#

; core variables
[core]
	; Don't trust file modes
	filemode = false

; user identity
[user]
	name = "Junio C Hamano"
	email = "gitster@pobox.com"

さまざまなコマンドが設定ファイルを読み込み、それに応じて動作を調整します。設定メカニズムのリストと詳細については、git-config[1] を参照してください。

識別子用語

<object>

あらゆる種類のオブジェクトのオブジェクト名を示します。

<blob>

ブロブオブジェクト名を示します。

<tree>

ツリーオブジェクト名を示します。

<commit>

コミットオブジェクト名を示します。

<tree-ish>

ツリー、コミット、またはタグオブジェクト名を示します。<tree-ish> 引数を取るコマンドは、最終的に <tree> オブジェクトを操作しようとしますが、<tree> を指す <commit> オブジェクトおよび <tag> オブジェクトを自動的に逆参照します。

<commit-ish>

コミットまたはタグオブジェクト名を示します。<commit-ish> 引数を取るコマンドは、最終的に <commit> オブジェクトを操作しようとしますが、<commit> を指す <tag> オブジェクトを自動的に逆参照します。

<type>

オブジェクトタイプが必要であることを示します。現在、blobtreecommit、または tag のいずれかです。

<file>

ファイル名を示します。ほとんどの場合、GIT_INDEX_FILE が記述するツリー構造のルートからの相対パスです。

シンボリック識別子

任意の <object> を受け入れるGitコマンドは、以下のシンボリック表記も使用できます。

HEAD

現在のブランチのヘッドを示します。

<tag>

有効なタグ (つまり、refs/tags/<tag> 参照)。

<head>

有効なヘッド (つまり、refs/heads/<head> 参照)。

オブジェクト名を指定するより完全な方法については、gitrevisions[7] の「リビジョンの指定」セクションを参照してください。

ファイル/ディレクトリ構造

gitrepository-layout[5] ドキュメントを参照してください。

各フックの詳細については githooks[5] を参照してください。

高レベルのSCMは、$GIT_DIR 内に追加情報を提供および管理する場合があります。

用語

gitglossary[7] を参照してください。

環境変数

さまざまなGitコマンドは環境変数に注意を払い、その動作を変更します。「ブール値」とマークされた環境変数は、ブール値の設定変数と同じ方法で値を取ります。つまり、「true」、「yes」、「on」、および正の数値は「yes」と見なされ、「false」、「no」、「off」、および「0」は「no」と見なされます。

変数は以下のとおりです

システム

HOME

ユーザーのホームディレクトリへのパスを指定します。Windowsでは、設定されていない場合、Gitは $HOMEDRIVE$HOMEPATH の両方が存在する場合は $HOMEDRIVE$HOMEPATH と等しいプロセス環境変数を設定し、それ以外の場合は $USERPROFILE が存在する場合は $USERPROFILE を設定します。

Gitリポジトリ

これらの環境変数は、すべての コアGitコマンドに適用されます。注意: これらはGitの上位に位置するSCMによって使用/上書きされる可能性があるため、外部のフロントエンドを使用する場合は注意が必要です。

GIT_INDEX_FILE

この環境変数は代替インデックスファイルを指定します。指定されない場合、デフォルトの $GIT_DIR/index が使用されます。

GIT_INDEX_VERSION

この環境変数は、インデックスファイルを書き出すときに使用されるインデックスバージョンを指定します。既存のインデックスファイルには影響しません。デフォルトではインデックスファイルバージョン2または3が使用されます。詳細については git-update-index[1] を参照してください。

GIT_OBJECT_DIRECTORY

この環境変数によってオブジェクトストレージディレクトリが指定された場合、sha1ディレクトリはその下に作成されます。そうでない場合、デフォルトの $GIT_DIR/objects ディレクトリが使用されます。

GIT_ALTERNATE_OBJECT_DIRECTORIES

Gitオブジェクトは不変であるため、古いオブジェクトは共有の読み取り専用ディレクトリにアーカイブできます。この変数は、Gitオブジェクトを検索するために使用できるGitオブジェクトディレクトリの「:」区切り(Windowsでは「;」区切り)リストを指定します。新しいオブジェクトはこれらのディレクトリには書き込まれません。

`"`(二重引用符)で始まるエントリは、Cスタイルの引用符で囲まれたパスとして解釈され、先頭と末尾の二重引用符が削除され、バックスラッシュエスケープが尊重されます。例として、値 "path-with-\"-and-:-in-it":vanilla-path には、path-with-"-and-:-in-itvanilla-path の2つのパスがあります。

GIT_DIR

GIT_DIR 環境変数が設定されている場合、リポジトリのベースとしてデフォルトの .git の代わりにこのパスが使用されます。--git-dir コマンドラインオプションもこの値を設定します。

GIT_WORK_TREE

ワーキングツリーのルートへのパスを設定します。これは --work-tree コマンドラインオプションと core.worktree 設定変数によっても制御できます。

GIT_NAMESPACE

Gitの名前空間を設定します。詳細については gitnamespaces[7] を参照してください。--namespace コマンドラインオプションもこの値を設定します。

GIT_CEILING_DIRECTORIES

これはコロン区切りの絶対パスのリストであるべきです。設定されている場合、Gitがリポジトリディレクトリを探す際にchDIR(ディレクトリ変更)して上がってはいけないディレクトリのリストです(読み込みが遅いネットワークディレクトリを除外するのに便利です)。現在のワーキングディレクトリや、コマンドラインまたは環境で設定されたGIT_DIRは除外されません。通常、Gitはこのリストのエントリを読み込み、現在のディレクトリと比較するために存在する可能性のあるシンボリックリンクを解決する必要があります。ただし、このアクセスでも遅い場合は、リストに空のエントリを追加して、以降のエントリがシンボリックリンクではなく、解決する必要がないことをGitに伝えることができます。例: GIT_CEILING_DIRECTORIES=/maybe/symlink::/very/slow/non/symlink

GIT_DISCOVERY_ACROSS_FILESYSTEM

「.git」リポジトリディレクトリを持たないディレクトリで実行された場合、Gitはワーキングツリーのトップを見つけるために親ディレクトリでそのようなディレクトリを見つけようとしますが、デフォルトではファイルシステム境界を越えません。このブール型環境変数をtrueに設定することで、Gitにファイルシステム境界で停止しないように指示できます。GIT_CEILING_DIRECTORIES と同様に、これは GIT_DIR またはコマンドラインで明示的に設定されたリポジトリディレクトリには影響しません。

GIT_COMMON_DIR

この変数がパスに設定されている場合、通常 $GIT_DIR にあるワーキングツリー以外のファイルは、代わりにこのパスから取得されます。HEADやindexなどのワーキングツリー固有のファイルは $GIT_DIR から取得されます。詳細については gitrepository-layout[5] および git-worktree[1] を参照してください。この変数は、GIT_INDEX_FILE, GIT_OBJECT_DIRECTORY などの他のパス変数よりも優先度が低いです。

GIT_DEFAULT_HASH

この変数が設定されている場合、新しいリポジトリのデフォルトのハッシュアルゴリズムがこの値に設定されます。この値はクローン時には無視され、常にリモートリポジトリの設定が使用されます。デフォルトは「sha1」です。git-init[1]--object-format を参照してください。

GIT_DEFAULT_REF_FORMAT

この変数が設定されている場合、新しいリポジトリのデフォルトの参照バックエンド形式がこの値に設定されます。デフォルトは「files」です。git-init[1]--ref-format を参照してください。

Gitコミット

GIT_AUTHOR_NAME

コミットまたはタグオブジェクトを作成する際、またはreflogを書き込む際に、作者識別に使われる人間が読める名前です。user.name および author.name の設定を上書きします。

GIT_AUTHOR_EMAIL

コミットまたはタグオブジェクトを作成する際、またはreflogを書き込む際に、作者識別に使われるメールアドレスです。user.email および author.email の設定を上書きします。

GIT_AUTHOR_DATE

コミットまたはタグオブジェクトを作成する際、またはreflogを書き込む際に、作者識別に使われる日付です。有効なフォーマットについては git-commit[1] を参照してください。

GIT_COMMITTER_NAME

コミットまたはタグオブジェクトを作成する際、またはreflogを書き込む際に、コミッター識別に使われる人間が読める名前です。user.name および committer.name の設定を上書きします。

GIT_COMMITTER_EMAIL

コミットまたはタグオブジェクトを作成する際、またはreflogを書き込む際に、作者識別に使われるメールアドレスです。user.email および committer.email の設定を上書きします。

GIT_COMMITTER_DATE

コミットまたはタグオブジェクトを作成する際、またはreflogを書き込む際に、コミッター識別に使われる日付です。有効なフォーマットについては git-commit[1] を参照してください。

EMAIL

他の関連する環境変数または設定が設定されていない場合、作者およびコミッターの識別に使われるメールアドレスです。

Gitの差分

GIT_DIFF_OPTS

有効な設定は、統合diffが作成されるときに表示されるコンテキスト行数を設定するための「--unified=??」または「-u??」のみです。これは、Git diff コマンドラインで渡される「-U」または「--unified」オプション値よりも優先されます。

GIT_EXTERNAL_DIFF

GIT_EXTERNAL_DIFF 環境変数が設定されている場合、その変数で指定されたプログラムがdiffを生成するために呼び出され、Gitは組み込みのdiff機構を使用しません。追加、削除、または変更されたパスに対して、GIT_EXTERNAL_DIFF は7つのパラメータで呼び出されます。

path old-file old-hex old-mode new-file new-hex new-mode

ここで

<old|new>-file

は GIT_EXTERNAL_DIFF が <old|new> の内容を読み取るために使用できるファイルであり、

<old|new>-hex

は40桁の16進数SHA-1ハッシュであり、

<old|new>-mode

はファイルモードの8進数表現です。

ファイルパラメータは、ユーザーのワーキングファイル(例: 「git-diff-files」の new-file)、/dev/null(例: 新しいファイルが追加された場合の old-file)、または一時ファイル(例: インデックス内の old-file)を指すことができます。GIT_EXTERNAL_DIFF は一時ファイルの解除について気にする必要はありません。GIT_EXTERNAL_DIFF の終了時に削除されます。

マージされていないパスの場合、GIT_EXTERNAL_DIFF は1つのパラメータ <path> で呼び出されます。

GIT_EXTERNAL_DIFF が呼び出される各パスに対して、2つの環境変数 GIT_DIFF_PATH_COUNTERGIT_DIFF_PATH_TOTAL が設定されます。

GIT_EXTERNAL_DIFF_TRUST_EXIT_CODE

このブール型環境変数がtrueに設定されている場合、GIT_EXTERNAL_DIFF コマンドは、入力ファイルが等しいと見なす場合は終了コード0を、異なる見なす場合は1を返すことが期待されます(diff(1) と同様)。デフォルトであるfalseに設定されている場合、コマンドは等価性に関わらず終了コード0を返すことが期待されます。それ以外の終了コードはGitに致命的なエラーを報告させます。

GIT_DIFF_PATH_COUNTER

各パスに対して1ずつ増加する1ベースのカウンター。

GIT_DIFF_PATH_TOTAL

パスの総数。

その他

GIT_MERGE_VERBOSITY

再帰的なマージ戦略によって表示される出力の量を制御する数値です。merge.verbosity を上書きします。git-merge[1] を参照してください。

GIT_PAGER

この環境変数は $PAGER を上書きします。空文字列または「cat」に設定されている場合、Gitはページャを起動しません。git-config[1]core.pager オプションも参照してください。

GIT_PROGRESS_DELAY

オプションの進捗インジケータを表示する前に何秒遅延させるかを制御する数値です。デフォルトは2秒です。

GIT_EDITOR

この環境変数は $EDITOR および $VISUAL を上書きします。インタラクティブモードでエディタを起動する必要がある場合、いくつかのGitコマンドによって使用されます。git-var[1] および git-config[1]core.editor オプションも参照してください。

GIT_SEQUENCE_EDITOR

この環境変数は、インタラクティブなリベースのToDoリストを編集する際に、設定されたGitエディタを上書きします。git-rebase[1] および git-config[1]sequence.editor オプションも参照してください。

GIT_SSH
GIT_SSH_COMMAND

これらの環境変数のいずれかが設定されている場合、git fetch および git push は、リモートシステムに接続する必要があるときに ssh の代わりに指定されたコマンドを使用します。設定されたコマンドに渡されるコマンドラインパラメータは、SSHの種類によって決定されます。詳細は git-config[1]ssh.variant オプションを参照してください。

$GIT_SSH_COMMAND$GIT_SSH よりも優先され、シェルによって解釈されるため、追加の引数を含めることができます。一方、$GIT_SSH はプログラムへのパスである必要があり(追加の引数が必要な場合はラッパーシェルスクリプトでも可)。

通常、希望するオプションは個人の .ssh/config ファイルを通じて設定する方が簡単です。詳細については、sshのドキュメントを参照してください。

GIT_SSH_VARIANT

この環境変数が設定されている場合、GIT_SSH/GIT_SSH_COMMAND/core.sshCommand がOpenSSH、plink、またはtortoiseplinkのいずれを指すかに関するGitの自動検出を上書きします。この変数は、同じ目的を果たす ssh.variant の設定を上書きします。

GIT_SSL_NO_VERIFY

この環境変数を任意の値に設定してエクスポートすると、HTTPS経由でフェッチまたはプッシュする際にGitがSSL証明書を検証しないようになります。

GIT_ATTR_SOURCE

gitattributesが読み取られるツリーイッシュを設定します。

GIT_ASKPASS

この環境変数が設定されている場合、パスワードまたはパスフレーズ(例: HTTPまたはIMAP認証用)の取得が必要なGitコマンドは、適切なプロンプトをコマンドライン引数としてこのプログラムを呼び出し、そのSTDOUTからパスワードを読み取ります。git-config[1]core.askPass オプションも参照してください。

GIT_TERMINAL_PROMPT

このブール型環境変数がfalseに設定されている場合、gitはターミナルでプロンプトを表示しません(例: HTTP認証を求めるときなど)。

GIT_CONFIG_GLOBAL
GIT_CONFIG_SYSTEM

グローバルまたはシステムレベルの設定ファイルからではなく、指定されたファイルから設定を取得します。GIT_CONFIG_SYSTEM が設定されている場合、ビルド時に定義されたシステム設定ファイル(通常 /etc/gitconfig)は読み込まれません。同様に、GIT_CONFIG_GLOBAL が設定されている場合、$HOME/.gitconfig$XDG_CONFIG_HOME/git/config も読み込まれません。各レベルの設定ファイルの読み込みをスキップするには /dev/null に設定できます。

GIT_CONFIG_NOSYSTEM

システム全体の $(prefix)/etc/gitconfig ファイルから設定を読み込むかどうかをスキップするかどうかです。このブール型環境変数は、$HOME および $XDG_CONFIG_HOME とともに使用して、厳密なスクリプトのために予測可能な環境を作成したり、権限を持つ誰かが修正するのを待つ間、バグのある /etc/gitconfig ファイルの使用を一時的に回避するためにtrueに設定したりできます。

GIT_FLUSH

このブール型環境変数がtrueに設定されている場合、git blame(インクリメンタルモード)、git rev-listgit loggit check-attrgit check-ignore などのコマンドは、各レコードがフラッシュされた後、出力ストリームのフラッシュを強制します。この変数がfalseに設定されている場合、これらのコマンドの出力は完全にバッファリングされたI/Oを使用して行われます。この環境変数が設定されていない場合、Gitは標準出力がファイルにリダイレクトされているかどうかに基づいて、バッファリングまたはレコード指向のフラッシュを選択します。

GIT_TRACE

エイリアスの展開、組み込みコマンドの実行、外部コマンドの実行など、一般的なトレースメッセージを有効にします。

この変数が「1」、「2」、または「true」(大文字小文字を区別しない比較)に設定されている場合、トレースメッセージは標準エラー出力に表示されます。

変数が2より大きく10より小さい(厳密に)整数値に設定されている場合、Gitはこの値をオープンされたファイルディスクリプタとして解釈し、このファイルディスクリプタにトレースメッセージを書き込もうとします。

あるいは、変数が絶対パス(/ 文字で始まる)に設定されている場合、Gitはこれをファイルパスとして解釈し、トレースメッセージをそのファイルに追記しようとします。

変数を設定解除するか、空、"0"、または "false"(大文字小文字を区別しない)に設定すると、トレースメッセージが無効になります。

GIT_TRACE_FSMONITOR

ファイルシステムモニター拡張機能のトレースメッセージを有効にします。利用可能なトレース出力オプションについては GIT_TRACE を参照してください。

GIT_TRACE_PACK_ACCESS

任意のパックへのすべてのアクセスに対するトレースメッセージを有効にします。各アクセスについて、パックファイル名とパック内のオフセットが記録されます。これは、パック関連のパフォーマンス問題のトラブルシューティングに役立つ場合があります。利用可能なトレース出力オプションについては GIT_TRACE を参照してください。

GIT_TRACE_PACKET

特定のプログラムに出入りするすべてのパケットのトレースメッセージを有効にします。これは、オブジェクトネゴシエーションやその他のプロトコル問題のデバッグに役立ちます。「PACK」で始まるパケットではトレースがオフになります(ただし、以下の GIT_TRACE_PACKFILE を参照)。利用可能なトレース出力オプションについては GIT_TRACE を参照してください。

GIT_TRACE_PACKFILE

特定のプログラムによって送受信されるパックファイルのトレースを有効にします。他のトレース出力とは異なり、このトレースは逐語的です。ヘッダーはなく、バイナリデータの引用符もありません。ほとんどの場合、端末に表示したり、他のトレース出力と混ぜたりするのではなく、ファイルに直接出力したいでしょう(例: GIT_TRACE_PACKFILE=/tmp/my.pack)。

これは現在、クローンとフェッチのクライアントサイドでのみ実装されていることに注意してください。

GIT_TRACE_PERFORMANCE

各Gitコマンドの合計実行時間など、パフォーマンス関連のトレースメッセージを有効にします。利用可能なトレース出力オプションについては GIT_TRACE を参照してください。

GIT_TRACE_REFS

refデータベースでの操作に関するトレースメッセージを有効にします。利用可能なトレース出力オプションについては、GIT_TRACEを参照してください。

GIT_TRACE_SETUP

Gitのセットアップ段階が完了した後、.git、作業ツリー、および現在の作業ディレクトリを出力するトレースメッセージを有効にします。利用可能なトレース出力オプションについては、GIT_TRACEを参照してください。

GIT_TRACE_SHALLOW

シャローリポジトリのフェッチ/クローンをデバッグするのに役立つトレースメッセージを有効にします。利用可能なトレース出力オプションについては、GIT_TRACEを参照してください。

GIT_TRACE_CURL

Gitトランスポートプロトコルにおける、記述情報を含むすべての送受信データのcurlによる完全なトレースダンプを有効にします。これはコマンドラインでcurl --trace-asciiを実行するのと似ています。利用可能なトレース出力オプションについては、GIT_TRACEを参照してください。

GIT_TRACE_CURL_NO_DATA

curlトレースが有効な場合(上記のGIT_TRACE_CURLを参照)、データをダンプしません(つまり、情報行とヘッダーのみをダンプします)。

GIT_TRACE2

「trace2」ライブラリからのより詳細なトレースメッセージを有効にします。GIT_TRACE2からの出力は、人間が読みやすいシンプルなテキストベースの形式です。

この変数が「1」、「2」、または「true」(大文字小文字を区別しない比較)に設定されている場合、トレースメッセージは標準エラー出力に表示されます。

変数が2より大きく10より小さい(厳密に)整数値に設定されている場合、Gitはこの値をオープンされたファイルディスクリプタとして解釈し、このファイルディスクリプタにトレースメッセージを書き込もうとします。

あるいは、変数が絶対パス(/文字で始まる)に設定されている場合、Gitはこれをファイルパスとして解釈し、トレースメッセージをそのパスに追加しようとします。そのパスが既に存在しディレクトリである場合、トレースメッセージはそのディレクトリ内のファイル(プロセスごとに1つ)に書き込まれ、SIDの最後のコンポーネントとオプションのカウンター(ファイル名の衝突を避けるため)に基づいて名前が付けられます。

さらに、変数がaf_unix:[<socket-type>:]<absolute-pathname>に設定されている場合、GitはそのパスをUnixドメインソケットとして開こうとします。ソケットタイプはstreamまたはdgramのいずれかです。

変数を設定解除するか、空、"0"、または "false"(大文字小文字を区別しない)に設定すると、トレースメッセージが無効になります。

詳細については、Trace2のドキュメントを参照してください。

GIT_TRACE2_EVENT

この設定は、機械による解釈に適したJSONベースの形式で書き込みます。利用可能なトレース出力オプションについてはGIT_TRACE2を、詳細についてはTrace2のドキュメントを参照してください。

GIT_TRACE2_PERF

GIT_TRACE2で利用可能なテキストベースのメッセージに加え、この設定はネスト領域を理解するためのカラムベースの形式で書き込みます。利用可能なトレース出力オプションについてはGIT_TRACE2を、詳細についてはTrace2のドキュメントを参照してください。

GIT_TRACE_REDACT

デフォルトでは、トレースが有効になると、Gitはクッキー、"Authorization:"ヘッダー、"Proxy-Authorization:"ヘッダー、およびパックファイルURIの値を墨消しします。この墨消しを防ぐには、このブール環境変数をfalseに設定します。

GIT_NO_REPLACE_OBJECTS

この環境変数を設定およびエクスポートすると、Gitは置換参照を無視し、Gitオブジェクトを置換しないように指示されます。

GIT_LITERAL_PATHSPECS

このブール環境変数をtrueに設定すると、Gitはすべてのパススペックをグロブパターンとしてではなく、リテラルとして扱います。たとえば、GIT_LITERAL_PATHSPECS=1 git log -- '*.c'を実行すると、グロブ*.cに一致するパスではなく、パス*.cに影響を与えるコミットを検索します。これは、Gitにリテラルパスを渡す場合(例:git ls-tree--raw diff出力などによって以前に与えられたパス)に役立つことがあります。

GIT_GLOB_PATHSPECS

このブール環境変数をtrueに設定すると、Gitはすべてのパススペックをグロブパターン(「glob」マジックとも呼ばれる)として扱います。

GIT_NOGLOB_PATHSPECS

このブール環境変数をtrueに設定すると、Gitはすべてのパススペックをリテラル(「literal」マジックとも呼ばれる)として扱います。

GIT_ICASE_PATHSPECS

このブール環境変数をtrueに設定すると、Gitはすべてのパススペックを大文字と小文字を区別しないものとして扱います。

GIT_NO_LAZY_FETCH

このブール環境変数をtrueに設定すると、Gitは要求に応じてプロミサーリモートから不足しているオブジェクトを遅延フェッチしないように指示されます。

GIT_REFLOG_ACTION

refが更新されると、refの古い値と新しい値に加えて、refが更新された理由(通常はrefを更新した高レベルコマンドの名前)を追跡するためにreflogエントリが作成されます。スクリプト化されたPorcelainコマンドは、エンドユーザーによってトップレベルコマンドとして呼び出されたときに、git-sh-setupset_reflog_actionヘルパー関数を使用して、その名前をこの変数に設定し、reflogの本体に記録することができます。

GIT_REF_PARANOIA

このブール環境変数がfalseに設定されている場合、refのリストを反復処理する際に、破損したrefや不正な名前のrefは無視されます。通常、Gitはこれらのrefを含めようとし、その結果、一部の操作が失敗する可能性があります。これは通常好ましい動作です。なぜなら、破壊的な可能性のある操作(例:git-prune[1])は、破損したrefを無視する(そして、それらが指す履歴を保存する価値がないと見なす)よりも、中断する方が良いからです。デフォルト値は1です(つまり、すべての操作の検出と中断に偏執的になります)。通常、これを0に設定する必要はありませんが、破損したリポジトリからデータをサルベージしようとするときに役立つ場合があります。

GIT_COMMIT_GRAPH_PARANOIA

コミットグラフからコミットオブジェクトを読み込む際、Gitはオブジェクトデータベース内のオブジェクトの存在チェックを実行します。これは、既に削除されたコミットへの参照を含む古いコミットグラフによる問題を回避するために行われますが、パフォーマンスの低下を伴います。

デフォルトは「false」であり、前述の動作を無効にします。これを「true」に設定すると、存在チェックが有効になり、パフォーマンスを犠牲にして、古いコミットがコミットグラフから返されることがなくなります。

GIT_ALLOW_PROTOCOL

コロン区切りのプロトコルリストに設定されている場合、protocol.allowneverに設定され、リストされた各プロトコルがprotocol.<name>.allowalwaysに設定されているかのように動作します(既存の設定を上書きします)。詳細については、git-config[1]protocol.allowの説明を参照してください。

GIT_PROTOCOL_FROM_USER

このブール環境変数をfalseに設定すると、user状態に設定されているfetch/push/cloneで使用されるプロトコルが防止されます。これは、信頼できないリポジトリからの再帰的なサブモジュール初期化を制限する場合や、潜在的に信頼できないURLをGitコマンドに供給するプログラムにとって有用です。詳細については、git-config[1]を参照してください。

GIT_PROTOCOL

内部使用のみ。ワイヤプロトコルのハンドシェイクに使用されます。オプションの値<key>[=<value>]を持つ、コロン:区切りのキーリストが含まれます。未知のキーと値の存在は無視されなければなりません。

一部のトランスポートを介してこの変数を渡すために、サーバーが設定を必要とする場合があることに注意してください。ローカルリポジトリ(つまり、file://またはファイルシステムパス)にアクセスする場合、およびgit://プロトコルを介してアクセスする場合は、自動的に伝播されます。git-over-httpの場合、ほとんどの設定で自動的に機能するはずですが、git-http-backend[1]の議論を参照してください。git-over-sshの場合、sshサーバーはクライアントがこの変数を渡すことを許可するように設定する必要がある場合があります(例:OpenSSHでAcceptEnv GIT_PROTOCOLを使用する)。

この設定はオプションです。変数が伝播されない場合、クライアントは元の「v0」プロトコルにフォールバックします(ただし、一部のパフォーマンス改善や機能を利用できない可能性があります)。この変数は現在、クローンとフェッチのみに影響します。プッシュにはまだ使用されていません(しかし、将来的に使用される可能性があります)。

GIT_OPTIONAL_LOCKS

このブール環境変数がfalseに設定されている場合、Gitはロックを必要とするオプションのサブ操作を実行せずに、要求された操作を完了します。たとえば、これによりgit statusが副次的にインデックスを更新するのを防ぎます。これは、リポジトリに対する他の操作とのロック競合を引き起こしたくないバックグラウンドで実行されるプロセスにとって有用です。デフォルトは1です。

GIT_REDIRECT_STDIN
GIT_REDIRECT_STDOUT
GIT_REDIRECT_STDERR

Windowsのみ:標準入力/出力/エラーハンドルを環境変数で指定されたパスにリダイレクトできます。これは、CreateProcess()を介して標準ハンドルを渡す標準的な方法がオプションではないマルチスレッドアプリケーションで特に有用です。なぜなら、その方法ではハンドルを継承可能としてマークする必要があり(結果としてすべての生成されたプロセスがそれらを継承し、通常のGit操作をブロックする可能性があるため)です。主な想定される使用例は、通信に名前付きパイプを使用することです(例:\\.\pipe\my-git-stdin-123)。

2つの特殊な値がサポートされています。offは対応する標準ハンドルを単純に閉じ、GIT_REDIRECT_STDERR2>&1の場合、標準エラーは標準出力と同じハンドルにリダイレクトされます。

GIT_PRINT_SHA1_ELLIPSIS (非推奨)

yesに設定されている場合、(短縮された) SHA-1値の後に省略記号が出力されます。これは、detached HEADs(git-checkout[1])の表示や、生のdiff出力(git-diff[1])に影響します。言及されたケースでの省略記号の出力は、もはや適切とは見なされておらず、近い将来(変数とともに)そのサポートが削除される可能性があります。

GIT_ADVICE

0に設定されている場合、すべてのアドバイスメッセージを無効にします。これらのメッセージは、人間が困難な状況から抜け出したり、新機能を利用したりするのに役立つヒントを提供することを目的としています。ユーザーはadvice.*設定キーを使用して個々のメッセージを無効にできます。これらのメッセージはGitプロセスを実行するツールにとって妨げとなる可能性があるため、この変数でメッセージを無効にできます。(--no-adviceグローバルオプションも利用可能ですが、古いGitバージョンではこのオプションが理解されない場合に失敗する可能性があります。この環境変数は、それを理解しないGitバージョンでは無視されます。)

解説

以下の詳細については、ユーザーマニュアルのGit概念の章およびgitcore-tutorial[7]を参照してください。

Gitプロジェクトは通常、トップレベルに「.git」サブディレクトリを持つ作業ディレクトリで構成されます。.gitディレクトリには、とりわけ、プロジェクトの完全な履歴を表す圧縮されたオブジェクトデータベース、その履歴を作業ツリーの現在の内容にリンクする「インデックス」ファイル、およびタグやブランチヘッドなどの履歴内の名前付きポインタが含まれています。

オブジェクトデータベースには、主に3つのタイプのオブジェクトが含まれています。ファイルデータを保持するblob、ディレクトリ階層を構築するためにblobや他のツリーを指すツリー、およびそれぞれ1つのツリーと複数の親コミットを参照するコミットです。

他のシステムで「変更セット」または「バージョン」と呼ばれるコミットは、プロジェクトの履歴における1つのステップを表し、各親は直前のステップを表します。複数の親を持つコミットは、独立した開発ラインのマージを表します。

すべてのオブジェクトは、その内容のSHA-1ハッシュによって命名され、通常は40桁の16進数文字列として記述されます。そのような名前はグローバルに一意です。コミットに至る全履歴は、そのコミットに署名するだけで保証できます。この目的のために、4番目のオブジェクトタイプであるタグが提供されます。

最初に作成されたとき、オブジェクトは個々のファイルに保存されますが、効率のために後で「パックファイル」にまとめて圧縮される場合があります。

refsと呼ばれる名前付きポインタは、履歴内の興味深い点をマークします。refはオブジェクトのSHA-1名または別のrefの名前を含むことができます(後者は「シンボリックref」と呼ばれます)。refs/head/で始まる名前のrefは、開発中のブランチの最新のコミット(または「ヘッド」)のSHA-1名を含みます。興味のあるタグのSHA-1名はrefs/tags/の下に保存されます。HEADという名前のシンボリックrefは、現在チェックアウトされているブランチの名前を含みます。

インデックスファイルは、すべてのパスのリストと、各パスについてblobオブジェクトおよび属性のセットで初期化されます。blobオブジェクトは、現在のブランチのヘッド時点でのファイルの内容を表します。属性(最終更新時刻、サイズなど)は、作業ツリー内の対応するファイルから取得されます。作業ツリーへのその後の変更は、これらの属性を比較することで見つけることができます。インデックスは新しい内容で更新でき、新しいコミットはインデックスに格納された内容から作成できます。

インデックスは、特定のパス名に対して複数のエントリ(「ステージ」と呼ばれる)を格納することもできます。これらのステージは、マージが進行中のときにファイルの様々な未マージバージョンを保持するために使用されます。

セキュリティ

一部の設定オプションとフックファイルは、Gitに任意のシェルコマンドを実行させる可能性があります。設定とフックはgit cloneでコピーされないため、信頼できないコンテンツを持つリモートリポジトリをクローンしたり、git logで検査したりすることは一般的に安全です。

しかし、.gitディレクトリ(またはそれを囲む作業ツリー)自体が信頼できないソースから来たものである場合、その.gitディレクトリ内でGitコマンドを実行することは安全ではありません。その設定とフック内のコマンドは通常通り実行されます。

デフォルトでは、リポジトリがコマンドを実行するユーザー以外のユーザーによって所有されている場合、Gitは実行を拒否します。git-config[1]safe.directoryのエントリを参照してください。これはマルチユーザー環境で保護に役立ちますが、信頼できないリポジトリであっても、あなたが所有する信頼できないリポジトリを取得できることに注意してください(たとえば、信頼できないソースからzipファイルやtarballを抽出した場合など)。そのような場合、まず信頼できないリポジトリを「サニタイズ」する必要があります。

信頼できない.gitディレクトリがある場合、まずgit clone --no-localでクローンして、クリーンなコピーを取得する必要があります。Gitは、クローンやフェッチのサーバー側を処理するupload-packによって実行されるオプションとフックのセットを制限しますが、upload-packに対する攻撃表面積は広いため、これにはいくらかのリスクが伴うことに注意してください。最も安全な方法は、リポジトリを非特権ユーザーとして提供することです(git-daemon[1]、ssh、またはユーザーIDを変更するための他のツールを使用するなど)。git-upload-pack[1]SECURITYセクションの議論を参照してください。

さらなるドキュメント

Gitの使用を開始するには、「description」セクションの参考文献を参照してください。以下は、初めてのユーザーにとっては必要以上の詳細かもしれません。

ユーザーマニュアルのGit概念の章gitcore-tutorial[7]はどちらも、基盤となるGitアーキテクチャの紹介を提供しています。

推奨されるワークフローの概要については、gitworkflows[7]を参照してください。

いくつかの有用な例については、howtoドキュメントも参照してください。

内部構造はGit APIドキュメントに記載されています。

CVSから移行するユーザーは、gitcvs-migration[7]も読むと良いでしょう。

著者

GitはLinus Torvaldsによって開始され、現在はJunio C Hamanoによってメンテナンスされています。多くの貢献がGitメーリングリスト<git@vger.kernel.org>からもたらされています。https://openhub.net/p/git/contributors/summaryで、貢献者のより完全なリストを確認できます。

git.git自体のクローンを持っている場合、git-shortlog[1]git-blame[1]の出力により、プロジェクトの特定の箇所の著者を確認できます。

バグ報告

主に開発とメンテナンスが行われているGitメーリングリスト<git@vger.kernel.org>にバグを報告してください。そこにメッセージを送信するためにリストに登録している必要はありません。以前のバグ報告やその他の議論については、https://lore.kernel.org/gitのリストアーカイブを参照してください。

セキュリティ関連の懸念事項は、Gitセキュリティメーリングリスト<git-security@googlegroups.com>に非公開で開示してください。

GIT

git[1]スイートの一部

scroll-to-top