kmuto’s blog

はてな社でMackerel CREをやっています。料理と旅行といろんなIT技術

git allsyncというのを作った

業務でGitのリポジトリを多数扱っていて、サポートのお手伝いのためにエラーメッセージからコードリーディングを串し刺しで探すことがある。で、このときに

  • 「うぉー見つからねーどれが出してるんだー」「まったくわからん」「pullしてないやん…」
  • 「なるほどーこれはあかんね」「いや確か直したってこの前聞いたよな」「pullしてないやん…」

といった悲しい出来事がまれによくあるケースになりそうなので、カレント直下のGitリポジトリ群をともかく最新にpullするツールを書くことにした。

この手のツールといえば、debian-installer開発の頃に使っていた、Joey Hessの通称mr、myreposが思い浮かぶのだが(パッケージはまだ配布されていてbrewにもある)、Perl依存はあまりしたくないというのと、ちょっとアレは用途に対して大きすぎる(VCS乱立期だったので、ほぼ全部のVCSに対応しようとしている)ので、git限定のシンプルなもので実装する。

github.com

単純にpullしかしない。デフォルトではブランチ名がmainかmasterのときのみpullする。

$ git allsync
[adventcalendar]...main pulled
[mackerel-agent]...master pulled
[mackerel-agent-plugins]...master pull error
error: Your local changes to the following files would be overwritten by merge:
        packaging/deb/debian/rules
Please commit your changes or stash them before you merge.
Aborting
Updating f6817a6..9b891c4
[mackerel-plugin-f2b]...master pulled
[mkr]...test-modify (skip)

Perl依存からRuby依存になっただけでは?という疑問は「RubyはOSレイヤー」と捉えることで置いておこう。