リポジトリとは?ローカルとリモートで変更の履歴を持つ仕組み

Gitの版:2.56.0
GitHubを使い始めると、最初に「リポジトリを作成」という言葉に出会います。続いて「ローカル」「リモート」「クローン」と言葉が増え、何がどこにあるのか分からなくなりがちです。
本記事では、Gitの公式ドキュメントと、公式サイトで公開されている『Pro Git』をもとに、リポジトリの役割とローカルとリモートの違いを解説しましょう。
リポジトリとは
リポジトリは、ファイルの変更の履歴をためておく保管場所です。Gitで管理するフォルダーには、ふだん編集するファイルのほかに .git という隠しフォルダーがあり、変更の日時や作者、内容の記録はすべてこの中に入っています。
リポジトリを手に入れる方法は2つです。手元のフォルダーで git init を実行して新しく作るか、別の場所にあるリポジトリを git clone で写してくるかのどちらかになります。
ローカルリポジトリとリモートリポジトリ
リポジトリは、置き場所によって2つに呼び分けます。
ローカルリポジトリは、自分のパソコンの中にあるリポジトリです。ファイルを編集し、変更を記録するのは、いつもこちらで行います。
リモートリポジトリとは、別の場所に置いたリポジトリのことです。『Pro Git』は、インターネットやネットワークのどこかに置いたプロジェクトの版、と説明していました。複数の人が同じリモートリポジトリにつなぎ、自分の変更を送ったり、ほかの人の変更を受け取ったりして作業を共有します。送る操作はプッシュ、受け取る操作はプルという名前です。
ここでの「リモート」は「遠く」ではなく「別の場所」という意味にすぎません。『Pro Git』によると、同じパソコンの別のフォルダーにあるリポジトリも、リモートとして扱えます。
クローンは履歴ごと写す
リモートリポジトリから手元にリポジトリを作る操作が、クローンです。
クローンで写されるのは、最新のファイルだけではありません。『Pro Git』によると、何も指定しなければ、すべてのファイルの過去のすべての版が手元に届きます。手元のリポジトリは、リモートと同じ履歴を持つ完全な写しです。
そのため、Gitのほとんどの操作は手元だけで済みます。履歴を見る、版を比べる、コミットして変更を記録する、といった作業にネットワークは要りません。移動中でも作業を進め、つながったときにまとめてリモートへ送れば十分です。
クローンすると、写してきた元のリモートリポジトリは origin という名前で登録されます。コマンドで origin と書けば、このリモートを指せるわけです。
注意したいこと
手元のリポジトリは完全な写しなので、リモートに上げたものは、クローンした全員の手元にも残ります。パスワードやAPIキーのような秘密の値を一度コミットしてプッシュすると、あとでファイルを消しても履歴には残ったままです。ほかの人の手元にも、すでに写っているかもしれません。秘密の値は、最初からリポジトリに入れないようにしましょう。
逆に、手元のリポジトリだけにある変更は、パソコンが故障すると失われます。リモートへ定期的にプッシュしておけば、それが控えになるでしょう。
製品での使われ方
リモートリポジトリの置き場所としては、GitHubやGitLabのようなサービスがよく使われます。どちらも、Webの画面からリポジトリを作り、ほかの人と共有できる仕組みです。
GitHubでの作り方と消し方は、本サイトの「【GitHub】新しいリポジトリを作成する方法」と「【GitHub】リポジトリを削除する方法」で案内しました。
プログラミング用のAIエージェントにも、リポジトリを単位に動くものがあります。たとえば、プロジェクトごとのメモリーを、同じリポジトリの中で共有する製品です。