いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

git を使って git をインストール (ソースビルド)

概要

Chromebook の Linux コンテナ を使っていますが、ディストリがDebianなので少し枯れたバージョンのソフトが入ります。

で、git だと

$ git version
git version 2.20.1

という感じです。2.20 だと、まだ git switchgit restore が無いんですよね。

現在(2020-09-01時点)の最新バージョンは v2.28.0 となっているので、アップデートすることにしてみました。

が、 apt で入るのは v2.20 ですので、ソースビルドする必要があります。

git は github 上でホスティングされているので、git のソースを取得するのにgit が使えます。

OS

$ cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

現在の git のバージョン

$ git version
git version 2.20.1

git を git でクローン

$ git clone https://github.com/git/git
$ du -sh git/
197M    git/

移動しておきます。

$ cd git/

今回インストールのバージョンのタグをチェックアウト

github.com

上記で、インストールしたいバージョンのタグを見て、チェックアウト

$ git checkout -b v2.28.0 refs/tags/v2.28.0
Checking out files: 100% (467/467), done.
Switched to a new branch 'v2.28.0'

READMEとINSTALL を読む

大抵のメジャーなソフトウェアにはしっかりとドキュメントがついています。

まずは、READMEとINSTALL に目を通しておきましょう。

$ ls -1 | grep -i -E 'readme|install'
INSTALL
README.md
$ lv README.md
$ lv INSTALL

依存ライブラリの用意

INSTALL を見ると git が依存しているライブラリが記載されています。

以下のページとかを参照して必要なものをインストール

www.digitalocean.com

make

INSTALL を読むと、make 実行時に prefix に所定のディレクトリを指定すると、そこにインストールできるよとのこと。

私は $HOME/.local の下に置きたいので、以下のように指定しました。後、CUIで利用するのでGUIインターフェースはいらないので除去するようにしました。

$ make prefix=$HOME/.local/git NO_TCLTK=1
GIT_VERSION = 2.28.0
    * new build flags
    CC fuzz-commit-graph.o
    CC fuzz-pack-headers.o
    CC fuzz-pack-idx.o
    CC bugreport.o
    * new link flags
    CC common-main.o
   ・
   ・
   ・

少し時間がかかります。気長に待ちましょう。

make install

最後にインストールします。今回は自分のホームディレクトリ配下にインストールするので make install するのにルート権限は必要ありません。

$ make prefix=$HOME/.local/git NO_TCLTK=1 install
    SUBDIR templates
install -d -m 755 '/home/devlights/.local/git/bin'
install -d -m 755 '/home/devlights/.local/git/libexec/git-core'
install   git-bugreport git-credential-store git-daemon git-fast-import git-http-backend git-imap-send git-remote-testsvn git-sh-i18n--envsubst git-shell git-http-fetch git-http-push git-credential-cache git-credential-cache--daemon git-remote-http git-remote-https git-remote-ftp git-remote-ftps git-bisect git-difftool--helper git-filter-branch git-merge-octopus git-merge-one-file git-merge-resolve git-mergetool git-quiltimport git-request-pull git-submodule git-web--browse git-add--interactive git-archimport git-cvsexportcommit git-cvsimport git-cvsserver git-send-email git-svn git-p4 git-instaweb '/home/devlights/.local/git/libexec/git-core'
install -m 644  git-mergetool--lib git-parse-remote git-rebase--preserve-merges git-sh-i18n git-sh-setup '/home/devlights/.local/git/libexec/git-core'
install git git-receive-pack git-shell git-upload-archive git-upload-pack git-cvsserver '/home/devlights/.local/git/bin'
make -C templates DESTDIR='' install
  ・
  ・
  ・

確認

インストールが終わったら確認してみます。

$ cd $HOME/.local/git/bin
$ ls -1
git
git-cvsserver
git-receive-pack
git-shell
git-upload-archive
git-upload-pack

$ ./git version
git version 2.28.0

オッケイですね。

私の場合は、$HOME/.local/bin にパス通しているので、最後にシンボリックリンクを貼って終わりです。

$ cd $HOME/.local/bin
$ ln -s $HOME/.local/git/bin/git git
$ ls -l | grep -- "->" | grep git
lrwxrwxrwx 1 devlights devlights  34  91 11:14 git -> /home/devlights/.local/git/bin/git

参考情報

www.digitalocean.com

h2ham.net


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com