ksaitoの日記

日々試したことの覚え書き

gitの共有リポジトリ

移転しました。

自動的にリダイレクトします。

gitは、分散リポジトリですがSubversionのようにセンターに共有リポジトリをつくることもできます。
共有リポジトリを立てて試してみました。

共有リポジトリの作成

git initコマンドで--bareオプションを付けると共有リポジトリを作成することができます。
git initコマンドは、.gitディレクトリができますが、--bareオプションを付けるとSubversionっぽいファイルが作成されます。

$ mkdir sample.git
$ cd sample.git
$ git init --bare --shared=true
Initialized empty shared Git repository in ~/git/sample.git/
$ ls
HEAD  branches  config  description  hooks  info  objects  refs
$ 

ローカルリポジトリの作成

ローカルマシンにgit initコマンドでローカルリポジトリを作成します。
git remoteコマンドを使って共有リポジトリsshでアクセスするためのパスを登録します。

$ mkdir sample.git
$ cd sample.git/
$ git init
Initialized empty Git repository in ~/git/sample.git/.git/
$ git remote add center ssh://git.local/var/lib/git/sample.git
$ git add .
$ git commit -m "center repository test"
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)
$ 

ファイルを追加して共有リポジトリにpush

分散リポジトリは、commit/updateといったおなじみの操作と別リポジトリに対するpush/pull操作があります。
共有リポジトリにコミットする場合には、ローカルリポジトリへのcommitと共有リポジトリへのpushの二段階の操作になります。

$ touch file1.txt
$ git add file1.txt 
$ git commit -m "add file1.txt"
[master (root-commit) 1cd08d3] add file1.txt
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file1.txt
$ git push center master
Counting objects: 3, done.
Writing objects: 100% (3/3), 216 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://git.local/~/git/sample.git
 * [new branch]      master -> master
$ 

共有リポジトリからチェックアウト

共有リポジトリからのチェックアウトは、cloneコマンドを使います。

$ git clone ssh://git.local/~/git/sample.git sample2.git
Cloning into sample2.git...
remote: Counting objects: 3, done.
Receiving objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
$ 

競合が発生しなければ、日々の変更操作は、clone/commit&pull/pushで事足りるようです。