例)
Server A
└ repo-sv.git (共有リポジトリ)
└ repo (ローカルリポジトリ)
Client A
└ repo (ローカルリポジトリ)
- Client A が repo (ローカルリポジトリ) で変更・コミット
- Client A が Server A の共有リポジトリへpush
- Server A の repo (ローカルリポジトリ) を自動的に更新
これを実現するために hooks/post-update を使用します。
ハマったんで流れを書いておきます。
まず Clien A でローカルリポジトリを作成・コミットします
$ mkdir repo $ cd repo $ git init $ touch test.txt $ git add . $ git commit -m 'first'
次に Server A に共有リポジトリを作成します。
$ mkdir repo-sv.git $ cd repo-sv.git $ git init --bare --shared
次に Client A に戻り、共有リポジトリへpushします。
$ git remote add origin ssh://@ /repo-sv.git $ git push origin master
これでpushは完了です。
ただこれだと普通に共有リポジトリにpushしただけです。
自動的にローカルリポジトリを更新するため、hooks/post-updateを修正します。
$ cd hooks $ cp post-update.sample post-update $ vi post-update // 中身はこんなかんじ #!/bin/sh cd /repo && git --git-dir=.git pull // そのまま共有リポジトリからcloneしてローカルリポジトリを作成 $ cd / $ git clone /repo-sv.git repo // ファイルがあるか確認する $ ls repo test.txt
これで Server A にもローカルリポジトリができたことがわかると思います。
hooks/post-updateの処理も追加していますので Client A に戻って再度コミット・プッシュしてみましょう。
$ touch add.txt $ git add . $ git commit -m 'added' $ git push origin master
Server A でローカルリポジトリ内を確認してみると先ほど追加した add.txt が作成されていると思います。
$ ls /repo test.txt add.txt
これでOK。
自分がハマったのは Server A でローカルリポジトリを作成するとき、clone先をsshで指定していました。
一見問題ないように思えるんですが(実際にcloneもpushもpullもうまくいくと思います) Client A が push したとき、permissionのエラーがでてしまいました。
けっこうハマったけどとりあえず動いたんでまぁいいか。
0 件のコメント:
コメントを投稿