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で事足りるようです。