【Git】容量無制限でGitを使うなら「Visual Studio Team Services」

Gitのホスティングサービスは色々ありますが、オープンソースなら github、プライベートリポジトリなら bitbucket が主流でしょう。私の場合、bitbucket をデータベースのバックアップに利用してるのですが、2GB以下という制限が厳しくて悩んでいました。

そんな時に見つけたのが、「全部無料⇒プライベートgitリポジトリ+CI環境+Issue管理。 VisualStudio Team servicesのススメ」という記事です。容量無制限は凄い!

  • 無制限で無料のプライベート コード リポジトリ
    プライベートリポジトリのみですが、容量、数の制限はありません。
    なお、パブリック公開リポジトリは作れません。

ただ…ファイルの一覧画面でサイズの記載が無かったり、日本語に未対応など気になる点も多く、細かな操作性は Bitbucket の方が優れている印象です。慣れの問題なのかな。まぁマイクロソフトのサービスだけあって安心感はありますし、実際に使ってみました。

remote: Storing packfile… みたいなのが 標準エラー出力(stderr)で表示される件

【WordPressにも使える】サーバーのファイルとmysqlデータベースを自動バックアップして、Bitbucket(Git)を使って外部サーバに保管」の Bitbucket の設定部分を VSTS に変更して完了…と思いきや、cron で実行すると stderr でこんなのが出力されました。

remote: Storing packfile... done (35 ms)
remote: Storing index... done (42 ms)

問題なく push されていたので、おそらく VSTS 側が勝手に出力しているメッセージでしょう。ただ標準エラー出力のため、push の度にアラートメールが来るんですよね…。

シェルスクリプトはほとんど触ったことがなかったのですが、どうにか対応しました。

#!/bin/bash

# ローカルリポジトリへ移動
cd "/hogehoge/fugafuga/piyopiyo"

#Visual Studio Team Services
git add -A
git commit -m "Commit at $(date "+%Y-%m-%d %T")" || true
out=$(git push -f -q origin master:master 2>&1)
out=$(echo -e "$out" | sed -e "s/remote: Storing packfile\.\.\. done (\([0-9]\+\) ms).*//g")
out=$(echo -e "$out" | sed -e "s/remote: Storing index\.\.\. done (\([0-9]\+\) ms).*//g")
echo -e "$out" | sed -e '/^$/d' 1>&2

具体的に何をしてるかというと、まず最初に git の出力結果を out 変数に代入します。

out=$(git push -f -q origin master:master 2>&1)

標準出力じゃないと変数に代入できない?ので、エラー出力を一旦標準出力へ変換しています(2>&1)。 その後、sed を使って該当メッセージを削除(置換)します。

out=$(echo -e "$out" | sed -e "s/remote: Storing packfile\.\.\. done (\([0-9]\+\) ms).*//g")
out=$(echo -e "$out" | sed -e "s/remote: Storing index\.\.\. done (\([0-9]\+\) ms).*//g")

注意点としては、メッセージの行末に文字化け?のようなものがついているため、行末部分に「.*」という正規表現を使って取り除いています。これがターミナルだと確認できず苦戦しました。(echo -e “$out” | sed -e ‘/^$/d’ 1>&2 > test.txt でテキストファイルに出力した際に発見しました)最後は、標準出力をエラー出力に戻します。(1>&2)

echo -e "$out" | sed -e '/^$/d' 1>&2

これで VSTS でも、エラー時のみアラートメールが飛ばせるようになりました!