歴史 トーバルズは、 2002年からLinuxカーネル開発に使用されていた独自のソース管理 (SCM)システムであるBitKeeper の無料ライセンスがLinux向けに取り消された後、2005年4月にGitの開発を開始しました。 [ 23 ] [ 24 ] BitKeeperの著作権者であるラリー・マクボイは、 アンドリュー・トリッジルが BitKeeperプロトコルを リバースエンジニアリング してSourcePullerを 作成したと主張しました。[ 25 ] 同じ事件は、別のバージョン管理システムであるMercurial の作成も促しました。
トーバルズは BitKeeper のように使える分散システムを求めていましたが、利用可能な無料システムはどれも彼のニーズを満たしていませんでした。彼は、パッチを適用して関連するすべてのメタデータを更新するために 30 秒かかるソース管理システムの例を挙げ、これは Linux カーネル開発のニーズには対応できないと指摘しました。Linux カーネル開発では、他のメンテナーとの同期に一度に 250 回の同様のアクションが必要になる場合があるからです。彼の設計基準として、パッチ適用は 3 秒以内で行うべきであると指定し、さらに 3 つの目標を追加しました。[ 11 ]
これらの基準により、当時使用されていたすべてのバージョン管理システムが除外されたため、2.6.12-rc2 Linuxカーネル開発リリース直後、トーバルズは独自のバージョン管理システムの作成に着手した。[ 13 ]
Git の開発は 2005 年 4 月 3 日に開始されました。[ 26 ] Torvalds は 4 月 6 日にプロジェクトを発表し、翌日にはセルフホスティングを開始しました。 [ 26 ] [ 27 ] 複数のブランチの最初のマージは 4 月 18 日に行われました。[ 28 ] Torvalds はパフォーマンスの目標を達成しました。4 月 29 日に、生まれたばかりの Git は、Linux カーネル ツリーへのパッチを毎秒 6.7 パッチの速度で記録するというベンチマークを受けました。[ 29 ] 6 月 16 日に、Git はカーネル 2.6.12 リリースを管理しました。[ 30 ]
トーバルズは2005年7月26日に、プロジェクトに大きく貢献したジュニオ・ハマノにメンテナンス を引き継いだ。 [ 31 ] ハマノは2005年12月21日のバージョン1.0のリリースを担当した。[ 32 ]
ネーミング トーバルズは、 git という名前(イギリス英語の スラングで、不愉快な人や愚かな人を意味する)について、「私は自己中心的な野郎で、自分のプロジェクトにはすべて自分の名前を付けている。最初は『Linux 』、今度は『git』だ」と冗談を言った。[ 33 ] [ 34 ] manページで は Git を「愚かなコンテンツ トラッカー」と説明している。[ 35 ]
ソースコードのreadmeファイルにはさらに詳しい説明があります。 [ 36 ]
「git」という言葉は、気分次第でどんな意味にもなり得る。
発音可能なランダムな3文字の組み合わせで、一般的なUNIXコマンドでは実際には使用されていない。「get」の誤った発音であるという事実は、関連性がある場合もあれば、ない場合もある。 愚か。軽蔑すべき、卑劣な。単純明快。スラング辞典から好きな言葉を選んでください。 「グローバル情報トラッカー」:気分が良く、実際に効果を発揮します。天使たちが歌い、突然部屋が光で満たされます。 壊れた時の「とんでもなくバカげたクソの山」。 Gitのソースコードでは、このプログラムを「地獄から来た情報マネージャー」と呼んでいる。[ 37 ] [ 38 ]
特徴
デザイン Git の設計は、大規模な分散開発プロジェクトを維持してきた Torvalds の Linux に関する経験と、同じプロジェクトから得たファイルシステムのパフォーマンスに関する深い知識、そして短期間で動作するシステムを作成する必要性の合理化です。これらの影響により、次の実装上の選択が行われました: [ 10 ]
非線形開発に対する強力な支援 Gitは迅速なブランチ作成とマージをサポートし、非線形な開発履歴を視覚化およびナビゲートするための専用ツールを備えています。Gitでは、変更はさまざまなレビュー担当者に渡されるため、記述されるよりもマージされる頻度が高いという前提があります。Gitのブランチは非常に軽量で、ブランチは単一のコミットへの参照にすぎません。 分散開発 Darcs 、BitKeeper 、Mercurial 、Bazaar 、Monotone と同様に、Gitは各開発者に完全な開発履歴のローカルコピーを提供し、変更はこのようなリポジトリ間でコピーされます。これらの変更は追加された開発ブランチとしてインポートされ、ローカルで開発されたブランチと同じ方法でマージできます。[ 39 ] 既存のシステムおよびプロトコルとの互換性 リポジトリは、HTTPS ( Hypertext Transfer Protocol Secure )、 HTTP ( Hypertext Transfer Protocol )、FTP ( File Transfer Protocol )、またはプレーンソケットもしくはセキュアシェル (ssh) を介した Git プロトコルによって公開できます。Git には CVS サーバーエミュレーションもあり、既存の CVS クライアントや IDE プラグインを使用して Git リポジトリにアクセスできます。Subversionリポジトリ は git-svn で直接使用できます。[ 40 ] 大規模プロジェクトの効率的な処理 トーバルズはGitを非常に高速でスケーラブルだと評しており[ 41 ] 、Mozillaが行ったパフォーマンス テスト[ 42 ] では、大規模なリポジトリの差分比較においてMercurial やGNU Bazaarよりも 桁違い に高速であることが示されました。ローカルに保存されたリポジトリからバージョン履歴を取得する速度は、リモート サーバーから取得する速度の100倍にもなります[ 43 ] 。 履歴の暗号認証 Gitの履歴は、特定のバージョン(Gitではコミット )のIDが、そのコミットに至るまでの完全な開発履歴に依存するように保存されます。一度公開されると、古いバージョンを変更しても気づかれないことはありません。構造はマークルツリー に似ていますが、ノードとリーフにデータが追加されています。[ 44 ] (Mercurial とMonotone もこの特性を持っています。)ツールキットベースの設計 Git は、 C 言語で書かれた一連のプログラムと、それらのプログラムをラップするいくつかのシェル スクリプトとして設計されました。[ 45 ] その後、速度と移植性のためにほとんどのスクリプトが C 言語で書き直されましたが、設計はそのまま残っており、コンポーネントを簡単に連結できます。[ 46 ] プラグイン可能なマージ戦略 Gitはツールキット設計の一環として、不完全なマージの明確なモデルを持ち、それを完了するための複数のアルゴリズムを備えており、最終的にはマージを自動的に完了できないため手動での編集が必要であることをユーザーに通知します。[ 47 ] ゴミ は収集されるまで蓄積される操作を中止したり変更を元に戻したりすると、データベースに不要なオブジェクトが残ります。これらは通常、継続的に増加する必要なオブジェクトの履歴のごく一部です。リポジトリに十分な数の不要なオブジェクトが作成されると、Git は自動的にガベージ コレクション を実行します。ガベージ コレクションは、明示的に呼び出すことができますgit gc。[ 49 ] 周期的な明示的オブジェクトパッキング Git は新しく作成されたオブジェクトをそれぞれ個別のファイルとして保存します。個別に圧縮されますが、これは大量のスペースを消費し、非効率的です。この問題は、多数のオブジェクトを差分圧縮して 1 つのファイル (またはネットワーク バイト ストリーム) に格納するパックを使用することで解決されます。このパックは パック ファイルと呼ばれます。パックは、同じ名前のファイルはおそらく類似しているという ヒューリスティック を使用して圧縮されますが、正確性についてはこのヒューリスティックに依存しません。各パック ファイルに対応するインデックス ファイルが作成され、パック ファイル内の各オブジェクトのオフセットが記録されます。新しく作成されたオブジェクト (新しく追加された履歴を含む) は、依然として単一のオブジェクトとして保存され、スペース効率を維持するために定期的な再パックが必要です。リポジトリをパックするプロセスは、非常に計算コストがかかる場合があります。Git は、オブジェクトを緩いが迅速に生成される形式でリポジトリに存在させることで、コストのかかるパック操作を、時間があまり重要でない後 (たとえば、勤務日の終わり) まで延期できるようにします。Git は定期的な再パックを自動的に行いますが、コマンドを使用して手動で再パックすることも可能です。データの整合性を確保するため、パックファイルとそのインデックスの両方にSHA-1 チェックサムが含まれており、パックファイルのファイル名にもSHA-1チェックサムが含まれています。リポジトリの整合性を確認するには、コマンドを実行します。[ 52 ] git gcgit fsck Git のもう 1 つの特性は、ファイルのディレクトリ ツリーのスナップショットを作成することです。ソース コードのバージョンを追跡する初期のシステムであるソース コード コントロール システム (SCCS) とリビジョン コントロール システム(RCS) は、個々のファイルに対して動作し、(ほとんど同じ) バージョンを インターリーブ デルタ (SCCS) またはデルタ エンコーディング (RCS)することで得られるスペースの節約を重視していました。後のリビジョン コントロール システムでは、プロジェクトの複数のリビジョンにわたってファイルが同一であるというこの概念が維持されました。しかし、トーバルズはこの概念を拒否しました。[ 54 ] その結果、Git はソース コード ツリーより下のどのレベルでもファイルのリビジョン関係を明示的に記録しません。
デメリット これらの暗黙の改訂関係には、いくつかの重大な結果が伴う。
プロジェクト全体の変更履歴を調べるよりも、1 つのファイルの変更履歴を調べる方が若干コストがかかります。[ 55 ] 特定のファイルに影響を与える変更履歴を取得するには、Git はグローバル履歴をたどり、各変更がそのファイルを変更したかどうかを判断する必要があります。ただし、この履歴を調べる方法により、Git は任意のファイルセットの変更を示す単一の履歴を同等の効率で生成できます。たとえば、ソースツリーのサブディレクトリとそれに関連付けられたグローバルヘッダーファイルは非常に一般的なケースです。 名前変更は明示的にではなく暗黙的に処理されます。CVS のよくある不満は、 ファイル名を使用してリビジョン履歴を識別するため、履歴を中断するか、履歴の名前を変更して履歴を不正確にしない限り、ファイルの移動や名前変更ができないことです。ほとんどの CVS 以降のリビジョン管理システムは、名前変更後も存続する一意の長期名前 ( inode 番号に類似) をファイルに与えることでこの問題を解決しています。Git はそのような識別子を記録しませんが、これは利点であると主張されています。[ 56 ] [ 57 ] ソースコード ファイルは分割またはマージされたり、単に名前が変更されたりすることがありますが、[ 58 ] これを単純な名前変更として記録すると、(変更不可能な) 履歴で何が起こったかの不正確な記述が固定されてしまいます。Git は、スナップショットを作成するときに名前変更を記録するのではなく、スナップショットの履歴を参照するときに名前変更を検出することでこの問題に対処しています。[ 59 ] (簡単に言うと、リビジョンN のファイルが与えられた場合、リビジョンN − 1の同名のファイルがデフォルトの祖先となります。ただし、リビジョン N − 1 に同名のファイルがない場合、Git はリビジョンN − 1 にのみ存在し、新しい ファイルと非常によく似ているファイルを検索します。) ただし、履歴を確認するたびにCPU 負荷の高い処理が必要となり、ヒューリスティックを調整するためのオプションがいくつか用意されています。このメカニズムは常に機能するとは限りません。同じコミットで変更とともに名前が変更されたファイルが、古いファイルの削除と新しいファイルの作成として読み取られる場合があります。開発者は、名前変更と変更を別々にコミットすることで、この制限を回避できます。
合併戦略 Git はいくつかのマージ戦略を実装しており、マージ時にデフォルト以外の戦略を選択できます。[ 60 ]
resolve :従来の3方向マージ アルゴリズム。recursive :これは、1つのブランチをプルまたはマージする場合のデフォルトであり、3方向マージアルゴリズムのバリアントです。3方向マージに使用できる共通祖先が複数存在する場合、それらの共通祖先のマージ済みツリーを作成し、それを3方向マージの参照ツリーとして使用します。Linux 2.6カーネル開発履歴から取得した過去のマージコミットに対するテストでは、この方法によりマージの競合が減少し、誤ったマージが発生することもないことが報告されています。また、名前変更を伴うマージも検出して処理できます。
タコ :これは、2つ以上の頭部を結合する場合のデフォルト設定です。
データ構造 Git の基本機能は、本質的にソースコード管理 システムではありません。トーバルズは次のように説明しています。[ 62 ]
多くの点で、Gitは単なるファイルシステムと見なすことができます。コンテンツアドレス指定が可能で 、バージョン管理の概念も備えていますが、私はファイルシステムの 専門家(カーネル開発者です)の視点からこの問題に取り組み、設計しました。そして、従来型のSCMシステムを作成することには全く興味がありません。
この初期設計アプローチから、Gitは従来のSCMに期待される機能一式を開発し、[ 63 ] 機能は主に必要に応じて作成され、その後、時間の経過とともに改良および拡張されてきました。
Gitリビジョン管理システムにおけるデータフローとストレージレベルについて Gitには2つのデータ構造 があります。1つは作業ディレクトリ とコミットされる次のリビジョンに関する情報をキャッシュする可変インデックス( ステージ またはキャッシュ とも呼ばれます) 、もう1つは不変オブジェクトを格納するオブジェクトデータベース です。[ 64 ]
インデックスは、オブジェクトデータベース と作業ツリー間の接続点として機能します。 [ 64 ]
オブジェクトストア には 5 種類のオブジェクトが含まれています: [ 65 ] [ 52 ]
ブロブは ファイル の内容です。ブロブには適切なファイル名、タイムスタンプ、その他のメタデータはありません(ブロブの名前は内部的にはその内容のハッシュです)。Gitでは、各ブロブはファイルのバージョンであり、その中にファイルのデータが含まれています。 ツリーオブジェクトはディレクトリに相当します。ツリー オブジェクトにはファイル名のリストが含まれており、各名にはいくつかの型ビットと、そのファイル、シンボリックリンク、またはディレクトリの内容であるブロブまたはツリーオブジェクトへの参照が含まれています。[ これらのオブジェクトはソースツリーのスナップショットです。(全体として、これはマークルツリー を構成します。つまり、ルートツリーの単一のハッシュだけで十分であり、コミットで実際に使用され、任意の数のサブディレクトリとファイルのツリー構造全体の正確な状態を正確に特定できます。) コミットオブジェクトは、 ツリーオブジェクトを履歴にリンクします。これには、ツリーオブジェクトの名前(最上位ソースディレクトリ)、タイムスタンプ、ログメッセージ、および0個以上の親コミットオブジェクトの名前が含まれます。 タグオブジェクトは、 別のオブジェクトへの参照を含むコンテナであり、別のオブジェクトに関連する追加のメタデータを保持できます。最も一般的には、Git で追跡されているデータの特定のリリースに対応するコミットオブジェクトのデジタル署名を保存するために使用されます。 パックファイル オブジェクトは、さまざまな他のオブジェクトをzlib で圧縮されたバンドルにまとめて、コンパクト化とネットワークプロトコルを介した転送の容易化を図ります。 各オブジェクトは、その内容のSHA-1ハッシュ によって識別されます。Gitはこのハッシュを計算し、その値をオブジェクト名として使用します。オブジェクトは、ハッシュの最初の2文字に一致するディレクトリに配置されます。ハッシュの残りの部分は、そのオブジェクトのファイル名として使用されます。
Git はファイルの各リビジョンを固有のブロブとして保存します。ブロブ間の関係は、ツリーとコミットオブジェクトを調べることで確認できます。新しく追加されたオブジェクトは、zlib 圧縮を使用して全体が保存されます。これはすぐに大量のディスク容量を消費する可能性があるため、オブジェクトをパックにまとめることができます。パックは デルタ圧縮 を使用して容量を節約し、ブロブを他のブロブに対する変更点として保存します。
さらに、Git はさまざまなコミットの場所を示すために、refs (references の略) と呼ばれるラベルを保存します。これらは参照データベースに保存され、それぞれ次のようになります。[ 71 ]
ヘッド(ブランチ) :その上にコミットが作成される際に、自動的に新しいコミットに更新される名前付き参照。HEAD :コミットを作成するために作業ツリーと比較される予約済みのヘッド。タグ :ブランチ参照に似ていますが、特定のコミットに固定されています。履歴上の重要なポイントを示すために使用されます。
コマンド Gitのコマンドラインインターフェース でよく使われるコマンドには、次のものがあります。[ 72 ] [ 73 ]
git initこれは、Gitリポジトリを作成するために使用されます。git clone [URL]これは、外部URLからGitリポジトリをクローン、つまり複製します。 git add [file]これは、git の作業ディレクトリ (コミットしようとしているファイル)にファイルを追加します。git commit -m [commit message]これは、現在の作業ディレクトリにあるファイルをコミットします (そのため、それらのファイルはリポジトリの履歴の一部になります)。.gitignoreファイルは、 Git リポジトリにプレーン テキストファイル として作成できます。.gitignoreファイルにリストされているファイルは、Gitによって追跡され ません 。[ 74 ] : 3-4 この機能を使用すると、キーやパスワードを含むファイル、さまざまな不要なファイル、および大きなファイル ( GitHub が アップロードを拒否するファイル) を無視できます。[ 75 ]
Git参照 Gitデータベース内の参照されていないオブジェクトはすべて、ガベージコレクションコマンドを使用するか、自動的にクリーンアップされます。オブジェクトは、別のオブジェクトまたは明示的な参照によって参照されることがあります。Gitにはさまざまな種類の参照があります。参照の作成、移動、削除を行うコマンドはそれぞれ異なります。git show-refすべての参照を一覧表示します。いくつかの種類は次のとおりです。
heads : ローカルなオブジェクトを参照します。remotes : リモートリポジトリに存在するオブジェクトを指します。stash : まだコミットされていないオブジェクトを指します。meta :例 : ベアリポジトリ内の構成、ユーザー権限。refs/meta/config 名前空間は遡及的に導入され、Gerrit で使用されています。[ 76 ] タグ :上記参照。
Gitサーバー gitwebインターフェースのスクリーンショット(コミットの差分を表示) Git は分散型バージョン管理システムであるため、そのままサーバーとして使用できます。Gitgit daemonプロトコルで実行されるシンプルな TCP サーバーを起動する組み込みコマンドが付属しています。[ 96 ] 専用の Git HTTP サーバーは、アクセス制御の追加、Web インターフェイスを介した Git リポジトリの内容の表示、複数のリポジトリの管理など、さまざまな機能を提供します。既存の Git リポジトリをクローンして共有し、中央リポジトリとして他のユーザーが使用することもできます。また、Git ソフトウェアをインストールしてユーザーがログインできるようにするだけで、リモート シェル経由でアクセスすることもできます。[ 97 ] Git サーバーは通常、TCP ポート 9418でリッスンします。 [ 98 ]
Web ベースのリポジトリ閲覧のために、Git には、HTTP を介してリポジトリの内容を表示するための CGI ベースのインターフェースである gitweb も同梱されています。[ 99 ]
グラフィカルインターフェース Git GUIクライアントは、Gitリポジトリとのやり取りを簡素化するためのグラフィカルユーザーインターフェース(GUI)を提供します。
これらのGUIは、ブランチ、コミット、ファイル変更など、プロジェクト履歴を視覚的に表示します。また、変更のステージング、コミットの作成、ブランチの管理といった作業を効率化します。ビジュアル差分ツールは、並行開発で発生するマージの競合を解決するのに役立ちます。
GitにはTcl/Tk GUI が付属しており、ユーザーはコミットの作成と修正、ブランチの作成とマージ、リモートリポジトリとのやり取りなどの操作を実行できます。[ 105 ]
公式のGUIに加えて、Gitに付属する公式GUIと同様の機能を提供するサードパーティ製のインターフェースが多数存在する。[ 106 ]
GUIクライアントはGitの学習と使用を容易にし、ワークフローの効率性を向上させ、エラーを削減します。
慣例 Gitは様々な方法で使用できますが、いくつかの慣習が一般的に採用されています。
ローカルリポジトリを作成するコマンドgit init は、 master という名前のブランチを作成します。[ 120 ] これは、変更をマージするための統合ブランチとしてよく使用されます。[ 121 ] GitHub [ 122 ] や GitLab [ 123 ] などのツールは、代わりにmain という名前のデフォルトブランチを作成します。Gitは、 2026 年末までにリリースされる予定の 3.0 リリースから main を使用するようになります 。[ 124 ] デフォルトのアップストリームリモートの名前はorigin なので、デフォルトのリモートブランチはorigin/master です。また、ユーザーはブランチを追加および削除したり、統合するブランチを選択したりできます。 プッシュされたコミットは通常上書きされず、以前のコミットを反転させる別の変更をコミットすることで元に戻されます [ 126 ] 。これにより、共有コミットの基となるコミットがリモートに存在しないために共有コミットが無効になるのを防ぎます。コミットに機密情報が含まれている場合は、それらを削除する必要がありますが、そのためには履歴を書き換えるためのより複雑な手順が必要になります。 git -flow [ 127 ] のワークフローと命名規則は、機能固有の不安定な履歴 (feature/*)、不安定な共有履歴 (develop)、本番環境対応の履歴 (main)、リリース済み製品への緊急パッチ (hotfix) を区別するためによく採用されます。 プルリクエスト( マージリクエスト とも呼ばれる)は、ユーザーがブランチを別のブランチにマージするように要求するものです。[ 129 ] Git はプルリクエストを提供していませんが、これは Git クラウドサービスの一般的な機能です。プルリクエストの基本的な機能は、リポジトリの管理者が別のリモート (プルリクエストのソースとなるリポジトリ) から変更をプルする機能と変わりません。ただし、プルリクエストはこれらのアクションを実行するホスティング サーバーによって管理されるチケットであり、Git SCM の機能ではありません。
安全 Git はアクセス制御メカニズムを提供していませんが、アクセス制御に特化した他のツールと連携して動作するように設計されています。[ 130 ]
2014年12月17日、GitクライアントのWindows版 とmacOS 版に影響を与える脆弱性が発見されました。攻撃者は、自身が作成したリポジトリ、または攻撃者が変更可能なリポジトリ上に、.git /hooksサブディレクトリ(Gitが実行する実行可能ファイルを含むフォルダ)に悪意のある ファイルを含む、.git(Gitリポジトリ内のすべてのデータを格納するディレクトリ)という名前の悪意のあるGitツリー ( ディレクトリ)を、異なる大文字小文字(.GITや.Gitなど。Gitでは.git をすべて小文字にしたバージョンを手動で作成できないため必要)で作成することで、Gitがインストールされているターゲットコンピュータ上で任意のコードを実行できる可能性があります。 Windows または Mac ユーザーが悪意のあるディレクトリを含むリポジトリのバージョンをプル(ダウンロード) し、そのディレクトリに切り替えると、.git ディレクトリが上書きされ (Windows および Mac ファイルシステムの大文字小文字を区別しない特性のため)、. git/hooks 内の悪意のある実行可能ファイルが実行される可能性があり、その結果、攻撃者のコマンドが実行されます。攻撃者は.git/config 設定ファイルを変更することもできます。これにより、攻撃者は悪意のある Git エイリアス (Git コマンドまたは外部コマンドのエイリアス) を作成したり、既存のエイリアスを変更して実行時に悪意のあるコマンドを実行したりすることができます。この脆弱性は、2014 年 12 月 17 日にリリースされ、翌日に発表された Git バージョン 2.2.1 で修正されました。[ 131 ] [ 132 ]
2015 年 9 月 29 日にリリースされた Git バージョン 2.6.1 には、任意のコード実行を可能にするセキュリティ脆弱性 (CVE-2015-7545) [ 133 ] に対するパッチが含まれていました。[ 134 ] 任意のコマンドが URL に埋め込まれていたため、攻撃者が被害者に特定の URL をクローンするように説得できれば、この脆弱性を悪用することができました。[ 135 ] 接続が暗号化されていない場合、攻撃者は中間者攻撃 を介してこの脆弱性を悪用することができました。 [ 135 ] 攻撃者はユーザーを任意の URL にリダイレクトできたためです。 再帰クローンも脆弱でした。リポジトリのコントローラーが gitmodules ファイルを介して任意の URL を指定できたためです。[ 135 ]
Git は内部的にSHA-1 ハッシュを使用しています。Linus Torvalds は、ハッシュは主に偶発的な破損を防ぐためのものであり、暗号的に安全なハッシュ が提供するセキュリティは単なる偶発的な副産物であり、主なセキュリティは別の場所での署名に あると回答しました。[ 136 ] [ 137 ] 2017 年に Git に対するSHAttered 攻撃の実証が行われて以来、Git はこの攻撃に耐性のある SHA-1 の変種を使用するように変更されました。ハッシュ関数の移行計画は 2020 年 2 月以降作成されています。[ 138 ]
参考文献 ↑ 「地獄の情報マネージャー「git」の初版」 . GitHub . 2005年4月8日。2015年11月16日のオリジナルからアーカイブ済み。 2015年 12月20日 取得 。 ↑ 「コミットグラフ」 . GitHub . 2016年6月8日。 2016年1月20日のオリジナルから アーカイブ済み。 2015年 12月19日 取得 。 ↑ ジュニオ・C・ハマノ(2026年6月29日)。 「 [ 発表 ] Git v2.55.0」 。 2026 年 7 月 1 日 に取得 。 ↑ 「Gitウェブサイト」 。 2022年6月9日にオリジナルから アーカイブ済み 。 2022年 6月9日 に取得。 ↑ 「Git Source Code Mirror」 。GitHub 。 2022年6 月 3日にオリジナルから アーカイブ済み 。 2022年 6月9日 に取得。 ↑ 「github.com の Git の LGPL ライセンス」 。GitHub。2011 年 5 月 20 日。2016 年 4 月 11 日にオリジナルから アーカイブ済み。2014 年 10 月 12 日 に取得 。 ↑ 「github.com の Git の GPL ライセンス」 。GitHub。2010年 1 月 18 日。2016 年 4 月 11 日にオリジナルから アーカイブ済み。2014 年 10 月 12 日 に取得 。 ↑ テックトーク:Linus Torvalds on git 。2007年5月14日。イベントは00:01:30に発生。 2015年12月20日にオリジナルから アーカイブ済み 。 2014年 7月20日 に YouTube 経由で取得 。 1 2 「Git の短い歴史」 。Pro Git (第 2 版)。Apress。2014 年。2015 年 12 月 25 日のオリジナルから アーカイブ済み。2015 年 12 月 26 日 取得 。 1 2 Torvalds, Linus (2005 年 4 月 7 日). "Re: Kernel SCM saga..." linux-kernel (メーリングリスト). 2019 年 7 月 1 日のオリジナルから アーカイブ済み。2017 年 2 月 3 日 取得 。 「だから、もっとずっと速く物事を追跡できるように、いくつかスクリプトを書いているんです。」1 2 トーバルズ、リーナス (2007 年 6 月 10 日)。 「Re: fatal: serious inflate inconsistency」 。git (メーリングリスト)。2022 年 12 月 28 日のオリジナルから アーカイブ済み。2017 年 2 月 3 日 取得 。 1 2 3 4 Linus Torvalds (2007 年 5 月 3 日). Google テックトーク: Linus Torvalds による Git に関する講演 。イベントは 02:30 に発生。2007 年 5 月 28 日のオリジナルから アーカイブ済み。2007 年 5 月 16 日 取得 。 ↑ スコット・チェイコン (2014 年 12 月 24 日)。 Pro Git (第 2 版)。ニューヨーク州ニューヨーク州: Apress 。 29 ~ 30 ページ 。ISBN 978-1-4842-0077-3 2015年12月25日にオリジナルからアーカイブされました。↑ Shirey, Russell G. (2015年3月1日). 「暗号化された分散バージョン管理システムとしてのGit」 (PDF) . Defense Technical Information Center . p. 38 . 2025年 7月13日 取得 . ↑ Knüpfer, Andreas; Callow, Timothy J. (2025). "gitとDataLadに基づくHPC向けデータバージョン管理と機械実行可能な再現性". arXiv : 2505.06558 [ cs.DC ]. 1 2 「Stack Overflow 開発者調査 2022」 . Stack Overflow . 2022 年 6 月 27 日のオリジナルから アーカイブ済み. 2022 年 8 月 4 日 取得 . ↑ Krill, Paul (2016年9月28日). "エンタープライズリポジトリ戦争:GitHub vs. GitLab vs. Bitbucket" . InfoWorld . 2020年2月2日のオリジナルから アーカイブ済み . 2020年 2月2日 に取得. 1 2 "github.com 競合分析、マーケティングミックス、トラフィック" . Alexa . 2013 年 3 月 31 日の オリジナルからアーカイブ済み。2020 年 2 月 2 日 取得 。 1 2 "sourceforge.net 競合分析、マーケティングミックス、トラフィック" . Alexa . 2020年10月20日のオリジナルから アーカイブ済み 。 2020年 2月2日 に取得。 1 2 "bitbucket.org 競合分析、マーケティングミックス、トラフィック" . Alexa . 2017年6月23日の オリジナルからアーカイブ済み 。 2020年 2月2日 に取得。 1 2 "gitlab.com 競合分析、マーケティングミックス、トラフィック" . Alexa . 2017 年 11 月 30 日のオリジナルから アーカイブ済み。2020 年 2 月 2 日 取得 。 ↑ Brown, Zack (2018年7月27日). "A Git Origin Story" . Linux Journal . Linux Journal. 2020年4月13日のオリジナルから アーカイブ済み。 2020年 5月28日 取得 。 ↑ 「BitKeeperとLinux:道の終わりか?」 。 Linux.com 。2005年4月11日。 2023年 5月18日 閲覧 。 ↑ McAllister, Neil (2005年5月2日). 「Linus TorvaldsのBitKeeperの失態」 . InfoWorld . 2015年8月26日のオリジナルから アーカイブ済み 。 2015年 9月8日 閲覧。 1 2 トーバルズ、リーナス (2007 年 2 月 27 日)。 「Re: トリビア: git はいつセルフホストになったのか?」 。 git (メーリングリスト)。2023 年 4 月 8 日のオリジナルから アーカイブ。2017 年 2 月 3 日 取得 。 ↑ トーバルズ、リーナス (2005 年 4 月 6 日)。 「カーネル SCM の物語」。linux -kernel (メーリングリスト)。2023 年 6 月 8 日のオリジナルから アーカイブ済み。2017 年 2 月 3 日 取得 。 ↑ トーバルズ、リーナス (2005 年 4 月 17 日)。 「史上初の本格的なカーネル git マージ!」 。 git (メーリングリスト)。2021 年 8 月 15 日のオリジナルから アーカイブ済み。2017 年 2 月 3 日 取得 。 ↑ マッコール、マット (2005 年 4 月 29 日)。 「Mercurial 0.4b と git patchbomb のベンチマーク」 。git (メーリングリスト)。2021 年 8 月 15 日のオリジナルから アーカイブ済み。2017 年 2 月 3 日 取得 。 ↑ Torvalds, Linus (2005年6月17日). "Linux 2.6.12" . git-commits-head (メーリングリスト). ↑ トーバルズ、リーナス (2005 年 7 月 27 日)。 「新しいメンテナーを紹介します」。git (メーリングリスト)。2021 年 8 月 15 日のオリジナルから アーカイブ済み。2017 年 2 月 3 日 取得 。 ↑ 浜野、ジュニオ C. (2005 年 12 月 21 日)。 「発表: Git 1.0.0」 。 git (メーリングリスト)。 2021年8月16日のオリジナルから アーカイブ 。 2017 年 2 月 3 日 に取得 。 ↑ 「GitFaq: なぜ「Git」という名前なのか?」 。Git.or.cz。 2012年7月23日のオリジナルから アーカイブ済み 。 2012年 7月14日 取得。 ↑ 「論争の後、トーバルズは「git」の開発に着手」 PC World 2012年7月14日。2011年2月1日にオリジナルからアーカイブ済み。トーバルズは 、 BitKeeperを廃止するという自身の決定が物議を醸すだろうと認識していたようだ。新しいソフトウェアを「git」(イギリスの スラングで「腐った人間」を意味する)と名付けた理由を尋ねられると 、彼はこう答えた。「私は自己中心的な野郎なので、自分のプロジェクトにはすべて自分の名前を付ける。最初はLinux、今度はgitだ。」 ↑ "git(1) マニュアルページ" 。 2012年6月21日にオリジナルから アーカイブされました 。 2012年 7月21日 に取得。 ↑ "地獄の情報マネージャー「git」の初回改訂 · git/git@e83c516" . GitHub . 2017年10月8日のオリジナルから アーカイブ済み。 2016年 1月21日 取得 。 ↑ "git/usage.c at master · git/git" . GitHub . 2025年2月26日のオリジナルから アーカイブ済み。 2025年 7月11日 取得 。 ↑トーバルズ、リーナス (2005 年 4 月 7 日)。 「地獄の情報マネージャー「git」の最初の改訂版 · git/git@e83c516」 。GitHub。2015 年 11 月 16 日のオリジナルから アーカイブ済み 。2025 年 7 月 11 日 取得 。 ↑ 「Git – 分散ワークフロー」 . Git . 2014年10月22日のオリジナルから アーカイブ済み 。 2020年 6月15日 取得。 ↑ Gunjal, Siddhesh (2019年7月19日). 「バージョン管理ツールとは?GitとGitHubを探る」 . Medium . 2025年4月17日のオリジナルから アーカイブ済み 。 2020年 10月25日 取得。 ↑ トーバルズ、リーナス (2006 年 10 月 19 日)。 「Re: VCS 比較表」 。git (メーリングリスト)。2017 年 6 月 18 日のオリジナルから アーカイブ。2017 年 2 月 3 日 取得 。 ↑ Jst の Mozillazine ブログ「bzr/hg/git のパフォーマンス」 。2010 年 5 月 29 日に オリジナルからアーカイブ済み 。2015 年 2 月 12 日 に取得。 ↑ ドレイヤー、ローランド (2006 年 11 月 13 日)。 「ああ、なんて安心したことか」 。2009 年 1 月 16 日時点のオリジナルより アーカイブ。 「git log」は「svn log」よりも100倍高速である。なぜなら後者はリモートサーバーに接続する必要があるからである。↑ 「信頼」 . Git の概念 . Git ユーザーマニュアル. 2006 年 10 月 18 日。2017 年 2 月 22 日時点のオリジナルから アーカイブ済み。 ↑ トーバルズ、リーナス。 「Re: VCS比較表」 。git (メーリングリスト)。 2016 年4月11日のオリジナルから アーカイブ。 2009年 4月10日 取得 。 Gitのスクリプト指向設計について説明する↑ iabervon (2005年12月22日)。 「Git最高!」 。 2016年9月14日にオリジナルから アーカイブ済み。 Gitのスクリプト化のしやすさを称賛している。↑ "Git – Git SCM Wiki" . git.wiki.kernel.org . 2010年2月6日のオリジナルから アーカイブ済み。 2020年 10月25日 取得 。 ↑ 「Gitユーザーマニュアル」 。2020年3月10日 。2020年5月10日のオリジナルから アーカイブ済み。 1 2 "Git – Packfiles" . Git . 2025年7月26日のオリジナルから アーカイブ済み。 2025年 8月25日 取得 。 ↑ トーバルズ、リーナス (2005 年 4 月 10 日)。 「Re: git のアップデートについて」。linux -kernel (メーリングリスト)。2017 年 6 月 18 日のオリジナルから アーカイブ済み。2017 年 2 月 3 日 取得 。 ↑ Haible, Bruno (2007年2月11日). "git log を高速化する方法?" . git (メーリングリスト). 2017年6月18日のオリジナルから アーカイブ済み 。 2017年 2月3日 に取得。 ↑ トーバルズ、リーナス (2006 年 3 月 1 日)。 「Re: 不純な名前変更 / 履歴追跡」 。git (メーリングリスト)。2017 年 5 月 3 日のオリジナルから アーカイブ済み。2017 年 2 月 3 日 取得 。 ↑ 浜野淳雄 (2006 年 3 月 24 日)。 「Re: GCC と Binutils の GIT 化エラー」 。git (メーリングリスト)。2017 年 6 月 18 日のオリジナルから アーカイブ。2017 年 2 月 3 日 取得 。 ↑ 浜野淳雄 (2006 年 3 月 23 日)。 「Re: GCC と Binutils の GIT 化エラー」 。git (メーリングリスト)。2017 年 6 月 18 日のオリジナルから アーカイブ。2017 年 2 月 3 日 取得 。 ↑ トーバルズ、リーナス (2006 年 11 月 28 日)。 「Re: git と bzr」 。git (メーリングリスト)。2017 年 6 月 18 日のオリジナルから アーカイブ済み。2017 年 2 月 3 日 取得 。 git-blameソースファイル間で移動したコードを表示するために使用されます。↑ トーバルズ、リーナス (2007 年 7 月 18 日)。 「git-merge(1)」 。 2016 年 7 月 16 日時点のオリジナルから アーカイブ済み。 ↑ トーバルズ、リーナス (2007 年 7 月 18 日)。 「CrissCrossMerge」 。2006 年 1 月 13 日の オリジナル からアーカイブ済み 。 ↑ トーバルズ、リーナス (2005 年 4 月 10 日)。 「Re: git のアップデートについて...」 linux-kernel (メーリングリスト)。2017 年 6 月 18 日のオリジナルから アーカイブ済み。2017 年 2 月 3 日 取得 。 ↑ Torvalds, Linus (2006年3月23日). "Re: GCCとBinutilsのGIT化エラー" . git (メーリングリスト). 2021年3月22日のオリジナルから アーカイブ済み。 2017年 2月3日 に取得 。 1 2 "Git - Git オブジェクト" . git-scm.com . 2026 年 4 月 1 日 に取得. ↑ 「Git – Git オブジェクト」 . Git . 2025年7月29日のオリジナルから アーカイブ済み。 2025年 8月25日 取得 。 ↑ 「Git – Git リファレンス」 . Git . 2025年7月26日のオリジナルから アーカイブ済み。 2025年 8月25日 取得 。 ↑ 「Git チートシート」 (PDF) 。 education.github.com 。 2024 年 6 月 19 日にオリジナルから アーカイブ (PDF) 。 2024 年 6 月 10 日 に取得。 ↑ 「Gitチュートリアル」 (PDF) . web.stanford.edu . 2024年6月10日のオリジナルから アーカイブ (PDF) . 2024年 6月10日 に取得 . ↑ 「Git クイックイントロ」 (PDF) . data-skills.github.io . 2024 年 6 月 23 日にオリジナルから アーカイブ (PDF) 。2024 年 6 月 10 日 に取得 。 ↑ Ba Tran, Andrew. 「GitHubへのアップロードに関するベストプラクティス」 ( PDF) 。journalismcourses.org 。 2024年9月10日のオリジナルから アーカイブ (PDF) 。 2024年 6月10日 取得 。 ↑ 「プロジェクト構成ファイル形式」 。Gerrit コードレビュー 。 2020年12月3日にオリジナルから アーカイブ済み 。 2020年 2月2日 に取得。 ↑ 「ダウンロード」 。 2012年5月8日にオリジナルから アーカイブ済み 。 2012年 5月14日 に取得。 ↑ 「git パッケージ バージョン – Repology」 。2022 年 1 月 19 日に オリジナルからアーカイブされました 。2021 年 11 月 30 日 に取得。 ↑ "msysGit" . GitHub . 2016年10月10日のオリジナルから アーカイブ済み 。 2016年 9月20日 取得。 ↑ 「Git – パッケージのダウンロード」 . Git . 2025年7月29日のオリジナルから アーカイブ済み 。 2025年 8月25日 取得。 (ソースコードは2025年7月26日にWayback Machine に アーカイブされました)↑ "JGit" 。 2012年8月31日にオリジナルから アーカイブされました 。 2012年 8月24日 に取得。 ↑ "Git – go-git" . Git . 2025年4月22日のオリジナルから アーカイブ済み。 2019年 4月19日 取得 。 ↑ 「Go言語で書かれたGitリポジトリへのSQLインターフェース」 、 github.com 、 2025年6月22日にオリジナルから アーカイブ、 2019年 4月19日 取得 ↑ 「Keybaseが暗号化されたgitをリリース」 . keybase.io . 2018年5月16日のオリジナルから アーカイブ済み 。 2019年 4月19日 取得。 ↑ "Dulwich GitHub Repository README.md" . GitHub . 2024年4月29日のオリジナルから アーカイブ済み. 2024年 4月29日 取得 . ↑ "libgit2" . GitHub . 2016年4月11日のオリジナルから アーカイブ済み 。 2012年 8月24日 取得。 ↑ "rugged" . GitHub . 2013年7月24日のオリジナルから アーカイブ済み。 2012年 8月24日 取得 。 ↑ "pygit2" . GitHub . 2015年8月5日のオリジナルから アーカイブ済み 。 2012年 8月24日 取得。 ↑ "hlibgit2" 。 2013年5月25日にオリジナルから アーカイブされました 。 2013年 4月30日 に取得。 ↑ "js-git: Git の JavaScript 実装" . GitHub . 2013 年 8 月 7 日のオリジナルから アーカイブ済み。2013 年 8 月 13 日 取得 。 ↑ 「Game of Trees」 . gameoftrees.org . 2025年7月18日のオリジナルから アーカイブ済み。 2024年 3月10日 取得 。 ↑ "git webls" . orib.dev . 2025年2月10日のオリジナルから アーカイブ済み 。 2025年 9月21日 取得。 ↑ "selfhosting git9" . orib.dev . 2025年2月10日のオリジナルから アーカイブ済み。 2025年 9月21日 取得 。 ↑ "gitoxide: Git の Rust 実装" . GitHub . 2025 年 12 月 18 日 取得 . {{cite web}}: CS1 maint: url-status (リンク)↑ 「Git – Git Daemon」 . Git . 2025年5月30日のオリジナルから アーカイブ済み。 2019年 7月10日 取得 。 ↑ 4.4 サーバー上の Git – サーバーの設定2014 年 10 月 22 日にWayback Machine に アーカイブされました、Pro Git。 ↑ "1.4 はじめに – Git のインストール" . Git. 2013 年 11 月 2 日時点のオリジナルから アーカイブ済み。2013 年 11 月 1 日 取得 。 ↑ 「Git - gitweb ドキュメント」 . git-scm.com . 2026年 3月13日 取得 。 ↑チャコン、スコット ; ストラウブ、ベン(2014)。 「サーバー上のGit – サーバーのセットアップ」 。Pro Git (第2 版)。Apress。ISBN 978-1484200773 2025年7月30日にオリジナルからアーカイブされました。2025年 8月25日 に取得されました 。↑ Diffusion ユーザーガイド: リポジトリ ホスティング ( 2020 年 9 月 20 日にWayback Machine に アーカイブされました)。 ↑ 「Gitolite: Gitリポジトリのホスティング」 。 2025年6月13日にオリジナルから アーカイブ済み 。 2025年 8月25日 に取得。 ↑ 「Gogs: 手間のかからないセルフホスト型 Git サービス」 。2025 年 7 月 25 日のオリジナルから アーカイブ済み。2025 年 8 月 25 日 取得 。 ↑ "Git 2.26 のハイライト" . GitHub ブログ . 2020 年 3 月 22 日。2021 年 3 月 22 日のオリジナルから アーカイブ済み。2020 年 11 月 25 日 取得 。Git が 2018 年にネットワーク フェッチ プロトコルの新しいバージョンを導入したことを覚えているかもしれません。このプロトコルは 2.26 でデフォルトで使用されるようになったので、その意味を改めて確認してみましょう。古いプロトコルの最大の問題点は、クライアントが何かを送信する前に、サーバーがリポジトリ内のすべてのブランチ、タグ、その他の参照をすぐに一覧表示してしまうことでした。リポジトリによっては、クライアントがマスター ブランチについてのみ知りたい場合、数メガバイトの余分なデータが送信される可能性がありました。新しいプロトコルはクライアントからのリクエストから始まり、クライアントが関心のある参照をサーバーに伝える方法を提供します。単一のブランチをフェッチする場合はそのブランチについてのみ問い合わせ、ほとんどのクローンではブランチとタグについてのみ問い合わせます。これで全てが解決するように見えるかもしれませんが、サーバーのリポジトリには、他の参照 (リポジトリ作成以降に開かれたすべてのプルリクエストの先頭など) が保存されている場合があります。これで、大規模なリポジトリからのフェッチの速度が向上し、特にフェッチ自体が小さい場合にその効果が顕著になります。フェッチ自体が小さいと、最初の参照の広告のコストが相対的に高くなります。そして何より素晴らしいのは、何もする必要がないことです。巧妙な設計により、新しいプロトコルを話すクライアントは、古いサーバーと新しいサーバーの両方とシームレスに連携でき、サーバーがサポートしていない場合は元のプロトコルにフォールバックします。プロトコルの導入からデフォルトになるまでの遅延の唯一の理由は、早期採用者がバグを発見できるようにするためでした。 ↑ "Git - git-gui ドキュメント" . Git . 2025年7月26日のオリジナルから アーカイブ済み 。 2024年 7月1日 に取得。 ↑ 「Git - GUI クライアント」 . Git . 2025年7月28日のオリジナルから アーカイブ済み 。 2024年 7月1日 に取得。 ↑ 「Eclipseコミュニティ調査2014の結果 | イアン・スケレット」 。Ianskerrett.wordpress.com。2014年6月23日。 2014年6月25日のオリジナルから アーカイブ。 2014年 6月23日 取得 。 ↑ 「Eclipseコミュニティ調査2012の結果」 。eclipse.org。 2016年4月11日にオリジナルから アーカイブ済み。 ↑ 「リポジトリの比較 – Open Hub」 。 2014年9月7日にオリジナルから アーカイブされました。 ↑ 「Stack Overflow 年次開発者調査」 。Stack Exchange, Inc. 2020 年 1 月 9 日 取得 。Stack Overflow の年次開発者調査は、世界中のプログラマーを対象とした最大かつ最も包括的な調査です。毎年、開発者のお気に入りのテクノロジーから仕事の好みまで、あらゆることを網羅した調査を実施しています。今年は、年次開発者調査の結果を発表する 9 年目にあたり、今年初めに約 9 万人の開発者が 20 分間の調査に回答しました。 ↑ 「Stack Overflow開発者調査2015」 。Stack Overflow。 2019年5月4日の オリジナルからアーカイブ済み 。 2019年 5月29日 取得。 ↑ 「Stack Overflow 開発者調査 2017」 。Stack Overflow。2019 年 5 月 29 日時 点のオリジナルからアーカイブ済み。2019 年 5 月 29 日 取得 。 ↑ 「Stack Overflow開発者調査2018」 。Stack Overflow。 2019年5月30日の オリジナルからアーカイブ済み 。 2019年 5月29日 取得。 ↑ 「Git(ソフトウェア)の仕事、Git分散バージョン管理システムスキルの平均給与」 。Itjobswatch.co.uk。 2016年10月8日のオリジナルから アーカイブ。 2016年 9月30日 取得 。 ↑ 「Team Foundation Server の求人、Microsoft Team Foundation Server (TFS) スキルの平均給与」 。Itjobswatch.co.uk。2016 年 10 月 29 日のオリジナルから アーカイブ。2016 年 9 月 30 日 取得 。 ↑ 「Subversion の求人、Apache Subversion (SVN) スキルの平均給与」 。Itjobswatch.co.uk。2016 年 10 月 25 日のオリジナルから アーカイブ。2016 年 9 月 30 日 取得 。 ↑ 「変化の激しい仕事、変化の激しいスキルに対する平均給与」 。Itjobswatch.co.uk。 2016年9月23日のオリジナルから アーカイブ 。 2016年 9月30日 取得。 ↑ 「VSS/SourceSafe の求人、Microsoft Visual SourceSafe (VSS) スキルの平均給与」 。Itjobswatch.co.uk。2016 年 10 月 29 日のオリジナルから アーカイブ。2016 年 9 月 30 日 取得 。 ↑ 「WindowsのGitへの移行がほぼ完了:1日あたり8,500件のコミットと1,760件のビルド」 。Ars Technica 。2017年5月24日。 2017年5月24日のオリジナルから アーカイブ。 2017年 5月24日 に取得 。 ↑ "git-init" . Git . 2022年3月15日にオリジナルから アーカイブされました。 ↑ 「Git – ブランチの概要」 . Git . 2020年12月20日のオリジナルから アーカイブ済み 。 2020年 6月15日 取得。Git の「master」ブランチは特別なブランチではありません。他のブランチとまったく同じです。ほとんどすべてのリポジトリにmasterブランチが存在する唯一の理由は、git initコマンドがデフォルトで作成し、ほとんどの人が変更しようとしないからです。 ↑ github/renaming 、GitHub、2020年12月4日、 2025年7月26日のオリジナルから アーカイブ、 2020年 12月4日 取得 ↑ 新しいリポジトリのデフォルトブランチ名が main に変更されました 、GitLab、2021年6月22日、 2025年5月19日のオリジナルから アーカイブ、 2021年 6月22日 取得 ↑ 「Git 3.0に向けた準備がさらに進んだGit 2.52がリリースされました」 。www.phoronix.com 。 2025年 12月19日 取得 。 ↑ "Git Revert | Atlassian Git チュートリアル" . Atlassian . 2025 年 6 月 19 日にオリジナルから アーカイブ済み . 2025 年 8 月 25 日 に取得. リバートにはリセットに比べて 2 つの重要な利点があります。まず、プロジェクトの履歴を変更しないため、共有リポジトリに既に公開されているコミットに対しては「安全な」操作となります。 ↑ 「Gitflowワークフロー|Atlassian Gitチュートリアル」 。Atlassian 。 2020年 6月15日 取得 。 ↑ 「ワークフローのフォーク | Atlassian Git チュートリアル」 。Atlassian 。 2020 年6月24日のオリジナルから アーカイブ済み 。 2020年 6月15日 取得。 ↑ 「Gitリポジトリのアクセス制御」 。 2016年9月14日にオリジナルから アーカイブ済み 。 2016年 9月6日 に取得。 ↑ Pettersen, Tim (2014年12月20日). 「CVE-2014-9390 から Git サーバーを保護する」 . 2014年12月24日のオリジナルから アーカイブ済み 。 2014年 12月22日 取得。 ↑ 浜野、JC (2014 年 12 月 18 日)。 「 [ お知らせ ] Git v2.2.1 (および古いメンテナンス トラックの更新)」 。 ニュース グループ : gmane.linux.kernel。2014 年 12 月 19 日の オリジナル からアーカイブ済み。2014 年 12 月 22 日 取得 。 ↑ 「CVE-2015-7545」 。2015年12月15日。 2015年12月26日にオリジナルから アーカイブ済み 。 2015年 12月26日 に取得。 ↑ "Git 2.6.1" . GitHub . 2015年9月29日。 2016年4月11日のオリジナルから アーカイブ済み。 2015年 12月26日 取得 。 1 2 3 Blake Burkhart 他 (2015 年 10 月 5 日) 「Re: CVE リクエスト: git」 2015 年 12 月 27 日のオリジナルから アーカイブ済み 。2015 年 12 月 26 日 取得 。 ↑ 「ハッシュ - 署名付きGitタグはどれくらい安全ですか?SHA-1と同じくらい安全ですか、それとももっと安全ですか?」 。Information Security Stack Exchange。2014年9月22日 。2016年6月24日にオリジナルから アーカイブされました。 ↑ 「Gitはなぜ暗号学的ハッシュ関数を使用するのか?」 。Stack Overflow。2015年3月1日。 2016年7月1日にオリジナルから アーカイブ済み。 ↑ 「Git – hash-function-transition ドキュメント」 . Git .
外部リンク 公式サイト