1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

git subtree pushをした際、どんどん重くなってしまうときの対処法

Posted at

問題

メインの開発ブランチからgit subtree push コマンドで、リポジトリの一部を別のブランチへと切り出したとき、
処理内で、開発ブランチのコミットを全部クロールするようになっています。

開発が続くとどんどんコミットが増えていくので、コマンドの実行が重くなっていきます(泣)

>> git subtree push --prefix _site/ origin master
git push using:  engine-remote master
-n 1/    1193 (0) 
-n 2/    1193 (1) 
-n 3/    1193 (2)
...
-n 1193/    1193 (1152) <-これがどんどん増える。。
Counting objects: 176, done.
...

経緯

GitHub PagesでJekyllで作成したサイトを表示しています。

一番簡単なのは、Jekyllプロジェクトをそのままリポジトリに突っ込む方法です。

ただ、今回はGitHub Pages側では対応していないプラグインを使いたかったので、
jekyll buildで生成した静的サイト(_siteディレクトリ以下)をリポジトリに渡していました。

そのままリポジトリ内でjekyll buildしただけではプロジェクトのルートに_siteが生成されてしまい、GitHub Pages側に参照させることができません。

_siteだけgitの管理下に置くという方法もありますが、個人的にプロジェクトごと管理したかったので、違う方法を取りました。

参考 ↓↓↓↓
Github pagesで意地でもサブディレクトリをルートにする

現在はプロジェクトに対して、developブランチ(メイン)、masterブランチ(_siteディレクトリのみ、コイツが表示される)で管理しています。

更新後developブランチでコミットし、

>> git subtree push --prefix _site/ origin master

でGitHub Pagesが参照しているmasterブランチに_siteの中身だけpushしています。

しかし、この状態で開発をしていると、前述の通りどんどん処理が重くなっていきます。。。

対処法

>> git subtree push --prefix _site/ origin master

を以下に置き換えます。

>> git subtree split --prefix _site/ --rejoin --branch subtree_branch
>> git push origin subtree_branch:master

なにしてるの?

git subtree pushでは、git subtree splitgit pushをやってくれるのですが、
subtree splitを実行時に、コミットをクロールしています。

このクロール対象は、git subtreeを実行した際に付くコミットメッセージの内容から判断されます。

そのコミットメッセージが無いと、すべてのコミットをクロールしてしまいます。

これを避けるため、subtree split実行時に--rejoinオプションで、コミットメッセージを付けさせる事により、クロール対象を最新のコミットのみに絞っています。

なおsubtree_branchは、git subtree pushの処理を分けて書くために作成している一時的なブランチです。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?