今回はローカルリポジトリが存在する状態で共有リポジトリを作成する方法を調べてみました。

以下の二つがあるようです。

  1. 空の共有リポジトリを作成しローカルリポジトリからプッシュする
  2. ローカルリポジトリを共有リポジトリとして複製する

準備

以下のディレクトリを用意します。

  • 共有リポジトリを作成するディレクトリ:c:/share
  • ローカルリポジトリのあるディレクトリ:c:/gittest/hoge
    (コミット履歴ありのリポジトリ)

方法1.空の共有リポジトリを作成しローカルリポジトリからプッシュ

$ cd c:/share
# 共有リポジトリは慣例としてディレクトリ名の終わりを`.git`にします
$ mkdir hoge.git
$ cd hoge.git
$ git init --bare --shared

--bareはベアリポジトリを作成するオプション。 ベアリポジトリとは作業ディレクトリを持たないリポジトリです。

--sharedはリポジトリを共有するときのアクセス権を設定するオプションで--shared=0666のようにアクセス権を設定します。

パーミッション指定なしの場合は0664です。
同じグループのみに読み書き許可するには0660を指定します。

これで空の共有リポジトリが作成できました。

あとはローカルリポジトリから共有リポジトリにプッシュします。

$ cd c:/gittest/hoge
# 送信対象で"*"を指定するとすべてのブランチ、タグがプッシュされるようです
$ git push c:/share/hoge.git "*"

方法2.ローカルリポジトリを共有リポジトリとして複製する

$ cd c:/share
$ git clone --bare c:/gittest/hoge hoge.git

--baregit initと同様にベアリポジトリを作成します。

方法1.と2.で設定ファイルが微妙に違ったりしますが、特に問題ないと思います。

あとはこのリポジトリをサーバー上に置き、アクセスするためのプロトコルの準備をすると他の開発者と共有できるようになります。