用語辞典・クラウド・開発運用

リポジトリ

リポジトリとは

repository(リポジトリ、略してrepo/リポ)は、ソースコードや変更履歴、関連ファイルを保存・共有する管理場所です。バージョン制御システムでは、ファイルの現在内容だけでなく、誰がどの変更を一まとまりとして記録し、どの履歴から分岐したかを管理します。

Gitでは各複製が履歴を持つローカルリポジトリです。GitHubやGitLab等はリポジトリをネットワーク上で共有し、レビュー、問題、権限、CI/CD等を加えるホスティングサービスであり、「リポジトリ」と特定サービスは同義ではありません。

作業フォルダー、コミット前の選択領域、履歴を持つリポジトリは別です。ファイルを保存しただけではコミットされず、コミットしただけではリモートへ共有されません。

作業木構造の変更を索引で選び、オブジェクトデータベースへコミットする分岐・タグ・ローカル・リモート・レビュー・権限を別の層として見る
編集ファイルを持つ作業フォルダーから検証環境trayを経てリポジトリcabinetへ保存し、ブロブ・木構造・コミットと分岐pointer・タグを管理し、二人の開発者のローカルリポジトリとリモートリポジトリが取得・プッシュ・統合し、アクセス保護と署名・スキャン・バックアップを行うピクトグラム図解
図1中央上段はGitを主な例にしたデータモデルです。他のバージョン制御システムは内部構造や操作が異なります。

Gitで区別する四つの場所

Working木構造実際に編集するファイル群

エディターやビルドツールが読む現在の内容で、未追跡・変更済みファイルを含みます。

Index次のコミットへ入れるスナップショット

検証環境領域とも呼ばれ、作業木構造から選んだ内容を一時的に組み立てます。

Objectデータベース履歴の実体

ブロブ、木構造、コミット等をコンテンツ由来のIDで保存します。

Reference履歴上の位置を指す名前

分岐やタグがコミットを指し、HEADが現在の位置を示します。

Local手元のリポジトリ

ネットワークがなくてもコミット・分岐・差分・ログ等を利用できます。

Remote共有相手の登録名

取得・プッシュ先となる別リポジトリで、リモート名とホスティングサービスを分けます。

ブロブ・木構造・コミット

ブロブはファイルコンテンツ、木構造は名前とブロブ・部分ツリーを組み合わせたディレクトリー相当、コミットは一つの木構造と親コミット、作成者等のメタデータを指します。

コミットは変更差分そのものというより、その時点のプロジェクト木構造を識別し親へつなぐオブジェクトです。Gitは同じコンテンツをオブジェクトとして再利用し、履歴間で効率よく保存します。

作業木構造・索引・コミットを移動する

編集すると作業木構造だけが変わります。addで選んだ内容を索引へ反映し、コミットで索引のスナップショットを履歴へ記録します。編集ファイルの一部分だけステージすることもできます。

復元、リセット、チェックアウト等は似た名前でも作業木構造、索引、参照のどこを変えるかが違います。実行前に状態と差分を見て、未保存変更を退避します。

分岐とタグ

分岐は通常、新コミットを作ると先へ動く参照です。機能や修正を別行で進め、統合またはリベースで履歴関係を整理します。

タグはリリース等の特定コミットへ固定した名前として使います。注釈付き・署名済みタグなら作成者、メッセージ、署名を持てます。分岐名やタグ名だけでコンテンツを信用せず、コミットIDと署名を確認します。

複製・取得・プル・プッシュ

複製はリモートからリポジトリと作業木構造を作ります。取得はリモートの新オブジェクトとリモート追跡参照を取得しますが、自分の現在分岐を自動統合しません。

プルは取得後に統合またはリベースまで進める高段階操作です。プッシュはローカルオブジェクトと参照更新をリモートへ送ります。どの分岐へ何が起きるかを明示します。

統合と競合

別分岐の変更を一つの履歴へ統合するのが統合です。Gitが両立を判断できない同じ行や構造の変更では競合になり、人が意図を理解して解決します。

テキスト上の競合がなくても業務ロジックが衝突する場合があります。レビューと自動化された試験で動作を確認します。

コミットメッセージとレビュー

コミットは一つの意図に絞り、なぜ変更したか、制約、関連問題、移行をメッセージへ残します。巨大コミットはレビュー、二分探索、打ち消しを難しくします。

プル要求等のレビューはホスティングサービス側の作業手順で、Gitオブジェクト自体とは別です。承認、必須確認、コード所有者、保護された分岐で統合条件を定義します。

履歴を書き換える操作

リベース、修正、フィルター等は新しいコミットオブジェクトを作り、コミットIDが変わります。共有済み分岐を強制プッシュすると他者の履歴と分岐するため、保護規則と合意が必要です。

公開履歴の修正には、元コミットを打ち消す打ち消しが追跡しやすい場合があります。秘密情報漏えいは履歴から消すだけでなく認証情報を直ちに失効します。

リポジトリへ入れないもの

パスワード、API鍵、秘密鍵、本番環境データ、個人情報、巨大な生成済みバイナリー、ローカルキャッシュを無差別にコミットしません。除外規則は未追跡ファイルへの予防で、既にコミットした秘密情報は消えません。

大容量ファイル用保存領域、パッケージレジストリ、成果物リポジトリ、オブジェクトストレージを役割に応じて使います。ソースリポジトリとビルド成果物の保管先を分けます。

リポジトリはバックアップか

分散複製は冗長性を高めますが、分岐、タグ、問題、レビュー、CI設定、リリース、アクセス制御等がすべて複製へ含まれるとは限りません。リモートホスティングのバックアップ・書き出し・復元を別に設計します。

誤った強制プッシュやアカウント侵害に備え、保護された参照、保持期間、オフライン複製、復元試験を行います。

リポジトリはファイルと履歴を保存する管理場所です。Gitでは作業木構造、索引、オブジェクトデータベース、参照を分け、ローカルとリモートの間を明示的に取得・プッシュします。

Git repository、working tree、index、object database、blob・tree・commit・reference:Git Reference「git」、三領域間の操作:Git User Manual

関連用語