Gitをソースからビルドしたらなんかでかい

ファイルサイズがでかい

最新バージョンのGitを使いたかったので、ソースからビルドすると、 パッケージインストールした場合と比べて、ファイルサイズが大きい気がする。

バージョンも環境も違うことを承知の上で、サイズを比較すると、、、

ソースからビルド

$ du -sh /opt/git/libexec/git-core/
91M /opt/git/libexec/git-core/

パッケージインストール

$ du -sh /usr/lib/git-core/
22M /usr/lib/git-core/

でかい。

謎解き

ディストリビューターはどのようにビルドしているのだろうか。 Ubuntuのビルドログを参照してみる。

1:2.20.1-2ubuntu1 : git package : Ubuntu

$ /usr/bin/make all NO_OPENSSL=1 prefix=/usr gitexecdir=/usr/lib/git-core libexecdir=/usr/lib/git-core mandir=/usr/share/man htmldir=/usr/share/doc/git/html INSTALLDIRS=vendor SANE_TOOL_PATH= INSTALL=install TAR=tar NO_CROSS_DIRECTORY_HARDLINKS=1 NO_INSTALL_HARDLINKS=1 NO_PERL_CPAN_FALLBACKS=1 DEFAULT_PAGER=pager DEFAULT_EDITOR=editor CC='gcc' CFLAGS='-Wall -g -O2 -fdebug-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' LDFLAGS='-Wl,-Bsymbolic-functions -Wl,-z,relro' V=1 USE_LIBPCRE2=1

うーん、いろいろ指定しているが、最適化レベルが効いているのだろうか。

シンボリックリンク

パッケージインストールの場合、多くのファイルがbin/gitへのシンボリックリンクになっていることに気付く。 NO_CROSS_DIRECTORY_HARDLINKS=1とNO_INSTALL_HARDLINKS=1が効いているようだ。 INSTALL_SYMLINKS=1でも同様のことができるかもしれない。(未検証)

結果

Ubuntuのオプションを参考にしつつ、makeして得られた結果は、、、

$ du -sh /opt/git/libexec/
21M /opt/git/libexec/

小さい。

上記のmakeのオプション

$ make SANE_TOOL_PATH= INSTALL=install TAR=tar NO_CROSS_DIRECTORY_HARDLINKS=1 NO_INSTALL_HARDLINKS=1 NO_PERL_CPAN_FALLBACKS=1 DEFAULT_PAGER=less DEFAULT_EDITOR=vi CC='gcc' CFLAGS='-Wall -O2 -Wformat -Werror=format-security' LDFLAGS='-Wl,-Bsymbolic-functions -Wl,-z,relro' V=1 NO_TCLTK=1 -j2 install

Git version

$ git --version
git version 2.21.0

備考

USE_LIBPCRE2=1

Git v2.17.0以降でUSE_LIBPCRE2を有効にすると、git grepが高速になるらしい。(未検証)

Compiling Git v2.17.0 with USE_LIBPCRE2=YesPlease (#3516) · Issues · GitLab.org / omnibus-gitlab · GitLab