Skip to content

Instantly share code, notes, and snippets.

@nobeans
Created April 21, 2015 06:37
Show Gist options
  • Save nobeans/69d41bf69add73c2fb81 to your computer and use it in GitHub Desktop.
Save nobeans/69d41bf69add73c2fb81 to your computer and use it in GitHub Desktop.
#!/bin/bash
set -e
#
# NWの制約がある場合に大きいリポジトリをチマチマとpushするスクリプト
#
# 実行時の注意事項:
# 巨大サイズのブランチ操作をするとファイルバッファの出し入れが大きすぎるため、
# git statusするだけで1分ぐらい待たされる場合がある。
# zshのフックでgit statusを発動するなどのモダン環境を使っている場合は、
# 何も操作できなくなってしまう。一時的にbashにするなどで回避すること。
# よく固まる....
# masterブランチからpushしないと、push後にgitlabが500エラーになってしまう。
# 万が一そうなった場合はグループの設定画面から該当リポジトリをいったん削除する。
# というわけで、masterブランチをいじりまくるので待避しておく。
#
# bisectスクリプト中でHEAD:masterとpushしても大丈夫だったので、
# 500エラーになるのは初回コミットだけなのかも知れない。
#git branch master-orig master
# git bisect用のスクリプト
echo "git push origin HEAD:master" > /tmp/push-with-bisect.sh
chmod +x /tmp/push-with-bisect.sh
# httpでのpush次のサイズ上限を調整する。
# あくまでローカルからNWに送信する前の制限を解除するだけ。
# NW自体の制限(GW等)が解除できるわけではない。
# 以下のエラーメッセージがある場合はこれで改善できる。
# error: RPC failed; result=22, HTTP code = 503 | 477.14 MiB/s
# 小さくしておけば、無駄に大きすぎるデータ送信をNW上に流さないためのガードになる。
# NWが遅いのでむしろ小さい方がトータルで速くなるかもしれないしそうでないかもしれない。
# 上限は3GB前後らしい。それ以上は実行時にエラーとなる。
#git config http.postBuffer 104857600 # 100MB
#git config http.postBuffer 524288000 # 500MB
git config http.postBuffer 1048576000 # 1GB. 1コミット自体が大きすぎる場合は上限を引き上げて躱すしかない...
#git config http.postBuffer 2097152000 # 2GB. 1コミット自体が大きすぎる場合は上限を引き上げて躱すしかない...
while TRUE
do
local_mater_id=$(git show -s --format=%H master)
origin_master_id=$(git show -s --format=%H origin/master)
if [ $local_mater_id = $origin_master_id ]; then
echo "Synchronized."
break
fi
echo "----------------------------------------------------------"
echo "Start bisect sequence..."
git bisect start HEAD origin/master
git bisect run /tmp/push-with-bisect.sh
git bisect reset
done
echo "Done."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment