リポジトリってなんだろ(Gitを知ろう)

Gitについて学習してする連載の8回目です。前回の記事はこちらになります。 hirocom777.hatenadiary.org

リポジトリとは何か

ここまでGitについて色々ご紹介してきましたが、Gitの重要な要素であるリポジトリについては詳しい説明してきませんでした。今回はリポジトリについて説明していきたいと思います。そもそもリポジトリって何なんでしょうか?

この連載の2回目で git init を使ってリポジトリを作成しました。そして、Gitはポジトリを使ってフォルダー内のファイルを管理すると説明したと思います。正確に言うと、 git add でステージングして git commit でコミットした内容を記録している場所ということです。リポジトリの中身を見てみましょう。任意のフォルダーの中に、Localという名前のフォルダーを作ってLocalフォルダー内にリポジトリを作ってみます。(実際のやり方はファイル管理をしてみようを参考にしてください)

Localフォルダーの下に、 .git というフォルダーができていると思います。見つからない場合は、Localフォルダーの表示設定で 隠しファイル の項目にチェックを入れてください。この中を見ると、以下の様に複数のファイルとフォルダーが見つかります。

フォルダー

  • hooks
  • info
  • objects
  • refs

ファイル

  • config
  • description
  • HEAD

これがリポジトリの正体です。コミットした内容はこれらのファイル、フォルダー群で記録、管理されるというわけです。

そしてリポジトリには以下の2種類があります。

個別の端末内などで指定したフォルダー内のファイルを管理するリポジトリです。この連載で今まで操作してきたリポジトリはローカルリポジトリになります。

リモートリポジトリは複数の人がWeb、ネット上で共用してデータを編集、管理したい時等に使用するリポジトリです。ローカルリポジトリの内容をコピーしたり、逆にリモートリポジトリの内容をローカルリポジトリにコピーしたりできます。個別の編集作業はローカルリポジトリで行い、管理はリモートリポジトリで行うといった具合です。

リモートリポジトリをつくる

今まで操作してみたローカルリポジトリの方はともかく、リモートリポジトリの方は上の説明だけではピンとこないと思います。実際にリモートリポジトリを作って操作してみたいと思います。まず、上で説明した作業(任意のフォルダーを用意して、その下にLocalフォルダーを作成。Localフォルダー内にリポジトリを作成。)を済ませておいてください。

まず、リモートリポジトリの元となる ベアリポジトリ を作ります。ベアリポジトリとは作業領域を持たない更新情報だけを持っているリポジトリのことです。今まで操作してきたローカルリポジトリは編集対象のファイルやフォルダーを置く場所があって、それらを管理していました(この様なリポジトリのことを、ベアリポジトリに対してノンベアリポジトリと呼びます。)が、ベアリポジトリにはそのような対象がありません。

以下の手順でベアリポジトリを作っていきます。

  1. 任意のフォルダーの下に Remote.git という名前でフォルダーを作成する。

  2. 作成したRemote.gitフォルダーを選択して右クリック。メニューの Git Bash Here を選択する。

  3. Git BashCLIが現れる。

この状態まできたら、Git Bashの画面で以下の様に入力してみてください。

git init --bare

画面は、以下の様になります。

この様にベアリポジトリもフォルダーで作成できるのですが、慣例的に拡張子に .git と付けます。

この状態でRemote.gitフォルダーの中を覗いてみると・・・先に確認したLocalフォルダー内リポジトリの内容と同じです。内容も同じでしょうか?2つのリポジトリのフォルダーをファイル差分確認プログラムで確認したところconfigだけが違っていました。configはテキストファイルの様なので、中を覗いてみましょう。

Localフォルダーの .git 内のconfigは

[core]
 repositoryformatversion = 0
 filemode = false
 bare = false
 logallrefupdates = true
 symlinks = false
 ignorecase = true

Remote.git 内のconfigは

[core]
 repositoryformatversion = 0
 filemode = false
 bare = true
 symlinks = false
 ignorecase = true

bareという項目の設定が違います。ここでベアリポジトリかどうかの識別をしているみたいです。また、ベアリポジトリの方はlogallrefupdatesの項目がありません。基本的な構造は同じようですが、少しだけ違うんですね。

次回はリポジトリ間のやりとり

いかがでしたか?リポジトリについて少しわかった気になりましたかねwww 次回は作成したベアリポジトリとローカルリポジトリ間のやりとりについて説明してみようと思います。お楽しみに!!

hirocom777.hatenadiary.org

Gitを知ろうの連載記事はコチラからどうぞ