エンジニアはこわくない

好きなように書く

Githubでタグを指定してpushを分割する


スポンサーリンク

f:id:tsujitaku50:20170410224800j:plain:w400

こんにちは、つじたく(@Tsuji_Taku50)です。

Github関連の作業をしているときに

2GB以上のサイズをpushしようとすると、以下のようなエラーが出ました。
(いや、そもそもそんなサイズをpushするなという声はごもっともなのですが泣)

Writing objects:  81% (324492/397119), 1.99 GiB | 333.00 KiB/s  
Writing objects:  81% (324492/397119), 2.00 GiB | 328.00 KiB/s  
remote: fatal: pack exceeds maximum allowed size        
fatal: The remote end hung up unexpectedly

「pushサイズ大きすぎるぞ!」っていうエラーっぽいですね。

この問題に対して「タグを指定してpushを分割する」という方法を実行したので、

それについて書きたいと思います。

ちなみにGithubリポジトリサイズ1GB以下を推奨しています。

なので1GBを超えてpushしようとしている時点でGithubの推奨からは外れていますorz

分割pushの方法

git pushコマンドではブランチだけではなくコミットのハッシュ値を指定してpushすることも可能です。

今回はそのハッシュ値を指定してpushするということを利用します。

サンプルコードではmasterブランチにpushしています。

以下がサンプルコードです。

git push origin `git show タグ名 | grep commit | cut -d' ' -f2`:refs/heads/master

少し説明しますと、

git show タグ名

でコンソール出力したタグ情報をgrepコマンドやcutコマンドで整形してcommitのハッシュ値だけを取得します。

そして、そのハッシュ値を指定してpushするという動作になっています。

つまり内部的には

git push origin ハッシュ値:refs/heads/master

のようになっています。

このようにしてタグ名を指定してpushすることが可能です。

まとめ

今回は「2GB以上のサイズをpushする」という特殊な状況でしたが、

普段のpushでもタグを指定して分割することができます。

あまり使わないかもしれませんが、もし機会があればタグを指定して分割pushを試してみて下さい。

おわり!!