git - おバカなソース追跡ツール
git は高速で、拡張性のある、分散型のリビジョン管理システムです。 非常に豊富なコマンドセットを持ち、高レベルな操作と内部への完全なアクセスの 両方が可能です。
始めは gittutorial(7) と便利なコマンドの最少セットを 解説している 日々の git の利用 を参照してください。 各コマンドのドキュメントは "man git-コマンド名" から得られます。 CVS ユーザは gitcvs-migration(7) も参考になるかもしれません。 より深い導入として git ユーザマニュアル があります。
コマンド は git コマンド(下記参照)の名前または 設定ファイル(git-config(1)参照)内で定義された別名です。
整形されたハイパーリンク付きの git の最新のドキュメントは 以下の場所で参照できます。 http://www.kernel.org/pub/software/scm/git/docs/
コールされている git プログラムのバージョンを表示します。
概要とよく利用されるコマンドの一覧を表示します。 --all または -a オプションを付けた場合は 全コマンドの一覧を表示します。git コマンドがこのオプション付きで 呼ばれた場合、そのコマンドのマニュアルページを呼び出します。
マニュアルページの表示方法をコントロールするオプションは他にもあります。 詳細は git-help(1) を参照してください。 git --help … は内部的には git help … に置き換えられます。
gitの中核(core git)プログラムがインストールされているパスを指定します。 環境変数 GIT_EXEC_PATH を設定することでも指定可能です。 パスの指定がない場合、git は現在設定されているパスを表示して終了します。
gitのHTMLドキュメントがインストールされているパスを表示して終了します。
全ての出力を less (または設定されていれば $PAGER) にパイプ接続します。
git の出力をページャにパイプ接続しないようにします。
リポジトリのパスを設定します。この設定は環境変数 GIT_DIR にて指定することも できます。値には絶対パス、または現在の作業ディレクトリからの相対パスが 指定可能です。
作業ツリーのパスを設定します。 この値はコマンド実行時に自動的に検出される .git ディレクトリ内の リポジトリとは組み合わせて利用されません。(この値は $GIT_DIR または --git-dir が設定されている時のみ利用できます) この設定は環境変数 GIT_WORK_TREE または構成変数 core.worktree にて 指定することもできます。値には絶対パスまたは --git-dir または GIT_DIR により指定されるディレクトリからの相対パスを 指定することができます。 注意:--git-dir または GIT_DIR が指定されているが、--work-tree , GIT_WORK_TREE, core.worktree が指定されていない場合、 現在の作業ディレクトリが作業ツリーのトップディレクトリとして 扱われます。
リポジトリを裸の(bare)リポジトリとして扱います 変数 GIT_DIR が設定されていない場合、現在の作業ディレクトリ が設定されます。
git を使い始めるには上述のリファレンスを見てください。 以下は初めてのユーザにはおそらく詳しすぎます。
ユーザマニュアルの git のコンセプト と gitcore-tutorial(7) は git のアーキテクチャについてのイントロです。
howto には役に立つ使用例がいくつか 紹介されています。
内部構造は GIT API documentation で説明されています。
git は高レベルなコマンド("磁器"(porcelain))と下位レベルのコマンド ("配管"(plumbing))に分けられます。
磁器(porcelain)のコマンドは主要コマンドとユーザ補助コマンドに 分けられます。
Add file contents to the index.
Apply a series of patches from a mailbox.
Create an archive of files from a named tree.
Find by binary search the change that introduced a bug.
List, create, or delete branches.
Move objects and refs by archive.
Checkout a branch or paths to the working tree.
Apply the change introduced by an existing commit.
Graphical alternative to git-commit.
Remove untracked files from the working tree.
Clone a repository into a new directory.
Record changes to the repository.
Show the most recent tag that is reachable from a commit.
Show changes between commits, commit and working tree, etc.
Download objects and refs from another repository.
Prepare patches for e-mail submission.
Cleanup unnecessary files and optimize the local repository.
Print lines matching a pattern.
A portable graphical interface to Git.
Create an empty git repository or reinitialize an existing one.
Show commit logs.
Join two or more development histories together.
Move or rename a file, a directory, or a symlink.
Fetch from and merge with another repository or a local branch.
Update remote refs along with associated objects.
Forward-port local commits to the updated upstream head.
Reset current HEAD to the specified state.
Revert an existing commit.
Remove files from the working tree and from the index.
Summarize git-log output.
Show various types of objects.
Stash the changes in a dirty working directory away.
Show the working tree status.
Initialize, update or inspect submodules.
Create, list, delete or verify a tag object signed with GPG.
The git repository browser.
操縦者(Manipulators):
Get and set repository or global options.
Git data exporter.
Backend for fast Git data importers.
Rewrite branches.
(deprecated) Recover lost refs that luckily have not yet been pruned.
Run merge conflict resolution tools to resolve merge conflicts.
Pack heads and tags for efficient repository access.
Prune all unreachable objects from the object database.
Manage reflog information.
Hardlink common objects in local repositories.
manage set of tracked repositories.
Pack unpacked objects in a repository.
(deprecated) Get and set repository or global options.
質問者(Interrogators):
Annotate file lines with commit information.
Show what revision and author last modified each line of a file.
Find commits not merged upstream.
Count unpacked number of objects and their disk consumption.
Show changes using common diff tools.
Verifies the connectivity and validity of the objects in the database.
Extract commit ID from an archive created using git-archive.
display help information about git.
Instantly browse your working repository in gitweb.
Show three-way merge without touching index.
Reuse recorded resolution of conflicted merges.
Pick out and massage parameters.
Show branches and their commits.
Check the GPG signature of tags.
Show logs with difference each commit introduces.
これらのコマンドは外部のSCMや他者からのe-mailパッチと 相互作用することができます。
Import an Arch repository into git.
Export a single commit to a CVS checkout.
Salvage your data out of another SCM people love to hate.
A CVS server emulator for git.
Send a collection of patches from stdin to an IMAP folder.
Applies a quilt patchset onto the current branch.
Generates a summary of pending changes.
Send a collection of patches as emails.
Bidirectional operation between a single Subversion branch and git.
git はそれ自体に磁気(porcelain)の階層を含んでいますが、 その下位レベルコマンドは代替の磁器を開発するのに十分役に立ちます。 磁器の開発者は git-update-index(1) と git-read-tree(1) から読み始めると良いでしょう。
これら下位レベルコマンドのインターフェース(入力、出力、 オプションとその意味)は、これらコマンドがスクリプト化して 使用される為、磁器レベルのコマンドよりもずっと安定性が 求められます。一方、磁器コマンドのインターフェースは エンドユーザの経験に基づく改良の為、変更されていく必要があります。
以下の記述では下位レベルコマンドを以下の3つに分割します。 1.リポジトリ、インデックス、作業ツリー内のオブジェクトを 操作するコマンド。 2.質問し、オブジェクトを比較するコマンド。 3.リポジトリ間でオブジェクトと参照を移動するコマンド。
Apply a patch on a git index file and a working tree.
Copy files from the index to the working tree.
Create a new commit object.
Compute object ID and optionally creates a blob from a file.
Build pack index file for an existing packed archive.
Run a three-way file merge.
Run a merge for files needing merging.
Creates a tag object.
Build a tree-object from ls-tree formatted text.
Create a packed archive of objects.
Remove extra objects that are already in pack files.
Reads tree information into the index.
Read and modify symbolic refs.
Unpack objects from a packed archive.
Register file contents in the working tree to the index.
Update the object name stored in a ref safely.
Create a tree object from the current index.
Provide content or type and size information for repository objects.
Compares files in the working tree and the index.
Compares content and mode of blobs between the index and repository.
Compares the content and mode of blobs found via two tree objects.
Output information on each ref.
Show information about files in the index and the working tree.
List references in a remote repository.
List the contents of a tree object.
Find as good common ancestors as possible for a merge.
Find symbolic names for given revs.
Find redundant pack files.
Lists commit objects in reverse chronological order.
Show packed archive index.
List references in a local repository.
(deprecated) Create a tar archive of the files in the named tree object.
Creates a temporary file with a blob's contents.
Show a git logical variable.
Validate packed git archive files.
一般に、質問コマンドは作業ツリー内のファイルを変更することは ありません。
A really simple server for git repositories.
Receive missing objects from another repository.
Push objects over git protocol to another repository.
Update auxiliary info file to help dumb servers.
以下は上記コマンドにより使用されるヘルパープログラムです; エンドユーザは通常これらを直接使用することはありません。
Download from a remote git repository via HTTP.
Push objects over HTTP/DAV to another repository.
Routines to help parsing remote repository access parameters.
Receive what is pushed into the repository.
Restricted login shell for GIT-only SSH access.
Send archive back to git-archive.
Send objects packed back to git-fetch-pack.
これらは他のコマンドにより使用される内部ヘルパーコマンドです; エンドユーザは通常これらを直接使用することはありません。
Display gitattributes information.
Ensures that a reference name is well formed.
Produce a merge commit message.
Extracts patch and authorship from a single e-mail message.
Simple UNIX mbox splitter program.
The standard helper program to use with git-merge-index.
Compute unique ID for a patch.
(deprecated) List the references in a remote repository.
Common git shell script setup code.
Filter out empty lines.
0.99.9 (実際は0.99.8.GITの途中)から、 各リポジトリの構成オプションを保持する目的で .git/config ファイルが使用されるようになりました。 その形式は単純なテキストファイルであり、一部の人には .ini 形式として馴染みのあるものです。
様々なコマンドが構成ファイルを読み込んで、 コマンドの動作を調整します。
任意のオブジェクトの型に対して、オブジェクトの名前を指し示します。
blob オブジェクトの名前を指し示します。
ツリーオブジェクトの名前を指し示します。
コミットオブジェクトの名前を指し示します。
ツリー、コミットまたはタグオブジェクトの名前を指し示します。 <tree-ish> の引数を取るコマンドは、最終的には <tree> オブジェクト に対して作用しますが、<tree> を指し示す <commit> と <tag> オブジェクトを引数に指定することも可能です。
コミットまたはタグオブジェクトの名前を指し示します。 <commit-ish> の引数を取るコマンドは、最終的には <commit> オブジェクトに対して作用しますが、<commit> を指し示す <tag> オブジェクトを引数に指定することも可能です。
オブジェクトタイプが必要であることを示します。 一般に blob, tree, commit, または tag のどれかです。
ファイル名を指し示します。- 通常は GIT_INDEX_FILE が表す ツリー構造のルートからの相対パスです。
任意の <object> を引数に持つすべての git コマンドにて 以下のシンボリックな識別子を使用することができます。
現在のブランチの head を指し示します。 (つまり、$GIT_DIR/HEAD の内容を指し示します)
正しいタグの '名前'。 (つまり、$GIT_DIR/refs/tags/<tag> の内容)
正しい head の '名前'。 (つまり、$GIT_DIR/refs/heads/<tag> の内容)
オブジェクトの名前を表す方法のより完全な一覧は git-rev-parse(1) 内の"リビジョンの指定方法" の節を 参照してください。
gitrepository-layout(5) のドキュメントを 参照してください。
各フックの詳細は githooks(5) を参照してください。
より高レベルなSCMにより $GIT_DIR 内の追加情報の提供と管理が 可能になるでしょう。
gitglossary(7) のドキュメントを参照してください。
様々な git コマンドが以下の環境変数を参照しています。
これらの環境変数は 全ての 中核となる git コマンドに適用されます。 Nb: これらの値をgit の上位に位置する SCMS によって利用/上書きする ことは何の価値もないので、Cogit などを利用する場合は注意してくだ さい。
この環境変数は代替インデックスファイルを指定します。 定義されていない場合、デフォルトでは $GIT_DIR/index が 使用されます。
オブジェクトの格納ディレクトリがこの環境変数により指定されていた場合、 sha1 ディレクトリはこの下に作成されます。- 定義されていない場合、 デフォルトでは $GIT_DIR/objects ディレクトリが使用されます。
git オブジェクトの不変性により、古いオブジェクトは 共有化された参照のみのディレクトリにアーカイブさせることが できます。この値に ":" を区切り文字(Windowsでは";")とした git オブジェクトの ディレクトリの一覧を指定子、git オブジェクトを検索する際に 使用させることができます。新しいオブジェクトはこれらの ディレクトリには書き込まれません。
環境変数 GIT_DIR が設定されていた場合、 デフォルトである .git の代わりに、この値がリポジトリへのパス として使用されます。
作業ツリーのパスを設定します。 この値はコマンド実行時に自動的に検出される .git ディレクトリ内の リポジトリとは組み合わせて利用されません。(この値は $GIT_DIR または --git-dir が設定されている時のみ利用できます) この設定はコマンドラインオプション --work-tree または 構成変数 core.worktree にて指定することもできます。
これはコロンで区切られた絶対パスのリストです。 この変数を設定すると、gitは設定したディレクトリよりも 上のディレクトリからレポジトリディレクトリを探しません。 カレントディレクトリやコマンドラインか環境変数で設定した GIT_DIR は排除しません。 (読み込みの遅いネットワークパスを除外するのに便利です)
この変数に設定できる正しい値は "--unified=??" または "-u??" のみです。この指定により unified diff が行われる時に表示する コンテキスト(変更前後の)行数を指定できます。 この指定は git diff コマンドの実行時に指定する "-U" または "--unified" オプションよりも優先して使用されます。
環境変数 GIT_EXTERNAL_DIFF が設定されている場合、 上述の diff が実行される代わりに、ここで指定されているプログラム が呼び出されます。追加、削除、変更されたパスに対して GIT_EXTERNAL_DIFF が7つのパラメータとともに呼び出されます:
パス 古いファイル 古いhex 古いモード 新しいファイル 新しいhex 新しいモード
各パラメータの説明:
| <古い|新しい>ファイル | GIT_EXTERNAL_DIFF が <古い|新しい>ファイルの中身を 読み込む為のファイル名 |
| <古い|新しい>hex | 40桁の16進の SHA1 ハッシュ値、 |
| <古い|新しい>hex | ファイルモードの8進数表現。 |
ファイルパラメータはユーザの作業ファイル(例えば、"git-diff-files" 内の 新しいファイル)、/dev/null (例えば、新しいファイルが追加された 時の 古いファイル)、または一時ファイル(例えば、索引内の 古いファイル) を指し示すこともあります。GIT_EXTERNAL_DIFF は一時ファイルを削除 することに気を使う必要はありません。--- GIT_EXTERNAL_DIFF が終了すると 一時ファイルは削除されます。
マージされなかったパスに対しては GIT_EXTERNAL_DIFF は 1つのパラメータ <path> とともに呼び出されます。
再帰的なマージ戦略により表示される出力の合計値を 管理するための数値です。merge.verbosity を上書きします。 git-merge(1) 参照。
この環境変数は $PAGER を上書きします。 これを空文字または "cat" に指定すると、git はページャを 起動しません。 core.pager オプションについてはgit-config(1) 参照して下さい.
この環境変数が設定されていた場合、git-fetch と git-push はリモートシステムに接続する必要があった 時に、ssh の代わりにこのコマンドを使用します。 $GIT_SSH コマンドには必ず2つの引数が渡されます: その URL の username@host(あるいは単に host)と、 そのリモートシステム上で実行するシェルコマンドです。
GIT_SSH 内でリストしたいプログラムにオプションを渡したい時は、 プログラムをラップしてシェルスクリプトにオプションを渡し、 GIT_SSHがそのシェルスクリプトを参照するように設定する必要があります。
通常は .ssh/config ファイルにて望ましいオプションを設定した方が 容易です。より詳細は ssh のドキュメントを参照してください。
この環境変数が "1" に設定されている場合、 git-blame(インクリメンタルモード)、git-rev-list, git-log, そして git-whatchanged などのコマンドが呼ばれた時に、各コミットの境界レコードが フラッシュされた後に出力ストリームが強制的にフラッシュされます。 この変数が "0" に設定されていた場合、これらコマンドの出力は 完全に I/O がバッファリングされます。この環境変数が 設定されていない場合、git は標準出力がファイルにリダイレクト されているかどうかによってバッファリングされるかれレコードの境界で フラッシュされるかが決定されます。
この変数が "1", "2" または "true" (大文字小文字を区別します) に設定されていた場合、git は trace: のメッセージを標準エラーに出力し、 エイリアスの展開、実行される built-in コマンド、外部コマンド実行 について説明します。 この値が 1 より大きく10より小さい整数が指定された場合、 git はこの値をファイル識別子として解釈し、このファイル識別子 にトレースメッセージを書き込もうとします。 代わりに、この値が絶対パスが指定されていた場合('/'の文字から始まる 場合)、git はこれをファイルパスとして解釈し、トレースメッセージを そこに書き込もうとします。
以下の詳細は ユーザマニュアル内の Gitのコンセプトの章 と gitcore-tutorial(7) から得ることができます。
git のプロジェクトは通常、最上位に ".git" のサブディレクトリを持つ 作業ディレクトリから構成されています。.git ディレクトリには プロジェクトの完全な履歴を表現した圧縮されたオブジェクトDB、 作業ツリーの現在の中身の履歴にリンクした "索引(index)"ファイル、 そして tag や ブランチの head のような履歴を指し示す名前付きポインタ とを含んでいます。
オブジェクトDBは主に3つのタイプのオブジェクトを含んでいます: blob はファイルのデータを保持し;tree は blob と他の tree を 指し示してディレクトリ階層を構成し;commit は1つの tree と 複数の親の commit を参照しています。
commit は他のシステムで言われる "チェンジセット" や "バージョン" と等しく、プロジェクトの履歴の1ステップを表現し、 その親は直接1つ前のステップを表現します。 複数の親を持つコミットは独立した開発ラインのマージを表現します。
全てのオブジェクトはその中身の SHA1 ハッシュによって名前が付けられ、 通常 40 の16進数で書かれます。この名前は大局的にユニークです。 ある commit につながる全ての履歴は、ちょうどそのコミットのサインにより 保証されています。4番目のオブジェクトタイプ tag はこの目的の為に 与えられています。
オブジェクトは初めに作成されると個々のファイルに格納されますが、 効率性の為、後に "pack ファイル"として一緒に圧縮されます。
refs と呼ばれる名前付けされたポインタは履歴内の注目したい位置に 目印を付けます。ref はオブジェクトの SHA1名または他の ref の名前が 保管されています。名前が ref/head/ で始まる ref は開発中のブランチの 最新のコミット("head")の SHA1名が保管されています。tag のSHA1名は ref/tags/ の下に保管されています。HEAD という名前の特別な ref には 現在チェックアウトしているブランチの名前が保管されています。
索引(index)ファイルは全てのパスの一覧で初期化されており、 それぞれのパス、blobオブジェクト、属性の集合を含んでいます。 blobオブジェクトは現在のブランチ head のファイルの中身を表現しています。 属性(採集更新日時、サイズなど)は作業ツリー内の対応するファイルから 取得されます。作業ツリーにて追加した変更はこれらの属性と比較することに より検出されます。索引は新しいコンテンツにより更新され、新しいコミット は索引内に格納されているコンテンツから作成されます。
索引は同一パス名の複数のエントリ("ステージ"と呼びます)を格納する こともできます。これらステージはマージ作業中の様々な未マージのバージョンを 保持する目的で利用されます。
git の産みの親は Linus Torvalds <torvalds@osdl.org> です。
現在の git のメンテナは Junio C Hamano <gitster@pobox.com> です。
git の potty は Andreas Ericsson <ae@op5.se> によって書かれました。 (訳注:pottyとは小児用便座の意味らしいが、何のこと?)
一般的な変更は git-list <git@vger.kernel.org> により行われています。
git スイートにたいする文書化は David Greaves <david@dgreaves.com> によって着手され、後に git-list <git@vger.kernel.org> 上の貢献者によって 強化されました。
gittutorial(7), gittutorial-2(7), Everyday Git, gitcvs-migration(7), gitglossary(7), gitcore-tutorial(7), gitcli(7), The Git User's Manual
git(1) スイートの一部