ベアリポジトリ(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コマンドなどで追加する必要があります。