ベアレポジトリ(bare repository) は、空のベアレポジトリを作成するか、作成済みのgitレポジトリ(ノンベアレポジトリ)から作成する2つの方法があります。

空のベアレポジトリ作成

作成したいディレクトリに移動後、以下のコマンドで空のベアレポジトリが作成できます。 ベアレポジトリ名の最後は.gitにするのが慣例です。

git init --bare --shared [レポジトリ名].git

例 レポジトリ名sampleの作成

$ cd /tmp
$ git init --bare --shared sample.git
Initialized empty shared Git repository in /git/sample.git/
これは /tmp ディレクトリに移動後、ベアレポジトリ /tmp/sample.git を作成しています。

ベアレポジトリの構成

ベアレポジトリはディレクトリです。その中は以下のようになります。

$ ls -al sample.git/
合計 40
drwxrwsr-x 7 mikan pub 4096  8月 18 20:11 2024 .
drwxr-xr-x 8 mikan pub 4096  8月 18 20:11 2024 ..
-rw-rw-r-- 1 mikan pub   23  8月 18 20:11 2024 HEAD
drwxrwsr-x 2 mikan pub 4096  8月 18 20:11 2024 branches
-rw-rw-r-- 1 mikan pub  126  8月 18 20:11 2024 config
-rw-rw-r-- 1 mikan pub   73  8月 18 20:11 2024 description
drwxrwsr-x 2 mikan pub 4096  8月 18 20:11 2024 hooks
drwxrwsr-x 2 mikan pub 4096  8月 18 20:11 2024 info
drwxrwsr-x 4 mikan pub 4096  8月 18 20:11 2024 objects
drwxrwsr-x 4 mikan pub 4096  8月 18 20:11 2024 refs

ベアレポジトリへの反映

作成した空ベアレポジトリに既存レポジトリを反映することができます。 その場合、既存レポジトリにリモートレポジトリとして登録して空ベアレポジトリに push する必要があります。

既存レポジトリにリモートレポジトリとして登録するコマンドは以下です。

git remote add origin [空ベアレポジトリのパス]

例 空レポジトリが git.example.com サーバーの /git/sample.git ディレクトリ、ユーザー"user" が sshで接続する場合

$ git remote add origin ssh://user@git.example.com/git/sample.git

コマンドの実行後、.git/config は以下のようになっていて、 [remote "origin"] の項目が追加されています。

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
  [remote "origin"]
        url = ssh://user@git.example.com/git/sample.git
        fetch = +refs/heads/*:refs/remotes/origin/*

次に以下のコマンドを実行して、ベアレポジトリに反映します。

git push --set-upstream origin master
オプションの "--set-upstream" は初回だけ実行します。以後のpushでは必要ありません。

このコマンド実行後、.git/config に以下が追加されています。

[branch "master"]
        remote = origin
        merge = refs/heads/master

ノンベアレポジトリからベアレポジトリを作成

すでに存在するgitレポジトリ(ノンベアレポジトリ)からベアレポジトリを作成することができます。 最近のフレームワーク等ではプロジェクトを作成すると自動でgitレポジトリが含まれている場合があり、そのような場合に使えます。

コマンドは以下になります。ベアレポジトリ名の最後は.gitにするのが慣例です。

git clone --bare [既存レポジトリパス] [ベアレポジトリパス]

例 既存レポジトリが /work/sample、 作成するベアレポジトリが /tmp/sample.git の場合

$ git clone --shared --bare /work/sample /tmp/sample.git
Initialized empty Git repository in /tmp/sample.git/
実行後、ベアレポジトリ /tmp/sample.git 作成されています。

ベアレポジトリ名は既存レポジトリ名と変えることもできます。

$ git clone --shared --bare /work/sample /tmp/test.git
Initialized empty Git repository in /tmp/test.git/

注意 既存レポジトリからベアレポジトリを作成しても、ベアレポジトリは既存レポジトリのリモートリポジトリになっていません。 git remoteコマンドなどで追加する必要があります。