6
7

More than 5 years have passed since last update.

gitリポジトリをoriginからpullして複数のremoteにpushする

Last updated at Posted at 2016-02-09

個人的な備忘録のたぐいです。
試験用やバックアップ的にlan内など複数のremote(VPN経由なgitlab)に同期していたわけですが、手動がダルかったので自動にしましたというだけです。
いまさら感MAXですみません。
(定期で自動で同期しとくとoriginにアクセスできないことがあったときにLAN内のgitlabのブラウザから確認できていいんじゃないかと思いますです)

ラベルつきでリモートを追加

# git remote add lan git@gitlab.hoge.net:infra/test.git
# git remote add foreign git@gitlab-hoge-test.net:infra/test2.git
# git remote -v
lan git@gitlab.hoge.net:infra/test.git (fetch)
lan git@gitlab.hoge.net:infra/test.git (push)
origin  git@gitlab.mng.hoge.net:infra/test.git (fetch)
origin  git@gitlab.mng.hoge.net:infra/test.git (push)
foreign       git@gitlab-hoge-test.net:infra/test2.git (fetch)
foreign       git@gitlab-hoge-test.net:infra/test2.git (push)

設定かくにん

# cat .git/config 
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = git@gitlab.mng.hoge.net:infra/test.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
[remote "lan"]
        url = git@gitlab.hoge.net:infra/test.git
        fetch = +refs/heads/*:refs/remotes/lan/*
[remote "foreign"]
        url = git@gitlab-hoge-test.net:infra/test2.git
        fetch = +refs/heads/*:refs/remotes/foreign/*

とりあえずpushしてみる

# git push lan
# git push foreign

手動でやることをそのまま書いたようなスクリプトをつくってみた。
(addしてないやつを自動でするのはキケンな気がするのでしない)

# cat /root/git-sync-test.sh 

#!/bin/bash
export PATH=$PATH:/usr/local/bin
GITCMD=/usr/local/bin/git
exec 1> >(logger -p local0.info) 2>&1
cd /var/git-repos/test
${GITCMD} checkout master
${GITCMD} pull origin master
${GITCMD} push lan master
${GITCMD} push foreign master
exit

ログ出すだけだと気づかないのでほんとうは失敗したらチャットかなんかに飛んでくるかんじのがいいんでしょうけども。それは今後の課題ということで。
たぶん同期が失敗するのってディスクがあふれたとか壊れたとかネットワーク的な疎通の問題とかくらいですかね。
一回動かしたあとにログをかくにん(きりまわすのまで書くのだるかったので適当にsyslogにだした)

# tail /var/log/messages

Feb  9 14:24:42 git01 komi: Already on 'master'
Feb  9 14:24:42 git01 komi: M#011.chef/knife.rb
Feb  9 14:24:45 git01 komi: From gitlab.mng.hoge.net:infra/test
Feb  9 14:24:45 git01 komi:  * branch            master     -> FETCH_HEAD
Feb  9 14:24:45 git01 komi: Already up-to-date.
Feb  9 14:24:46 git01 komi: Everything up-to-date
Feb  9 14:24:53 git01 komi: Everything up-to-date

cron登録。jenkinsつかってもいいけどとりあえずここは誰も見える化といいださない気がするのでcronで。

# crontab -l|tail -1
30 22 * * 1-5 /root/git-sync-test.sh 

rootのcronに登録したらgitコマンドのPATHが通ってなかったのでちょっと修正しました。
あとちょっとスクリプトのおき場所がフリーダムすぎますかね。

参考:
http://bayashi.net/diary/2012/0714
http://qiita.com/h141dev/items/5af16b869248cf0d994e
http://qiita.com/mykysyk@github/items/e5398bc8262d35f4a1b9

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7