CentOSにソースから最新版のgitをインストール

本項ではCentOS環境にソースから最新バージョンのgitをインストールする手順についてまとめていきます。

## サーバ環境

| 項目 | バージョン |
| :--- | :--- |
| CentOS | 7.6.1810 |

## 背景

gitをソースからインストールする背景としては、以下のようにCentOS上のデフォルトの yum reposiotryの情報では、gitのバージョンが1.8.3.1と古く最新バージョンの gitのコマンドを利用できないという課題があります。
そこで、本項では[こちら]()の情報を参考に最新バージョンの gitをインストールする手順を記載します。

### yum info gitの結果

```
$ sudo yum info git
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ty1.mirror.newmediaexpress.com
 * epel: mirror.pregi.net
 * extras: ty1.mirror.newmediaexpress.com
 * updates: ty1.mirror.newmediaexpress.com
Installed Packages
Name        : git
Arch        : x86_64
Version     : 1.8.3.1
Release     : 20.el7
Size        : 22 M
Repo        : installed
From repo   : updates
Summary     : Fast Version Control System
URL         : http://git-scm.com/
License     : GPLv2
Description : Git is a fast, scalable, distributed revision control system with an
            : unusually rich command set that provides both high-level operations
            : and full access to internals.
            :
            : The git rpm installs the core tools with minimal dependencies.  To
            : install all git packages, including tools for integrating with other
            : SCMs, install the git-all meta-package.
```

## 依存関係のあるパッケージをインストール

ソースから gitをインストールするために、まずはじめに、依存関係のあるパッケージをインストールしていきます。

### コンパイルに必要なパッケージをインストール

```
$ sudo yum install -y wget gcc
```

### 依存関係のあるパッケージをインストール

```
$ sudo yum install -y curl-devel expat-devel gettext-devel openssl-devel perl-devel zlib-devel
```

## 最新版のgitのtarballをダウンロード

[こちら](https://mirrors.edge.kernel.org/pub/software/scm/git/) のサイトから git のtarballをダウンロードしておきます。<br>
本投稿では、バージョン2.9.4をダウンロードします。


```
$ cd /usr/local/src/  # ソースファイルの保存先フォルダに移動
$ sudo wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.4.tar.gz
--2019-06-18 23:26:41--  https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.4.tar.gz
mirrors.edge.kernel.org (mirrors.edge.kernel.org) をDNSに問いあわせています... 147.75.69.165, 2604:1380:1000:8100::1
mirrors.edge.kernel.org (mirrors.edge.kernel.org)|147.75.69.165|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 5921866 (5.6M) [application/x-gzip]
`git-2.9.4.tar.gz' に保存中

100%[=============================================================================>] 5,921,866    105KB/s 時間 34s

2019-06-18 23:27:16 (172 KB/s) - `git-2.9.4.tar.gz' へ保存完了 [5921866/5921866]

$ ls -l
total 5784
-rw-r--r--. 1 root root 5921866  5月 10  2017 git-2.9.4.tar.gz
```

## ソースから gitをインストール

続いて、ダウンロードしてきたtarballを解凍し、ソースからgitをインストールしていきます。

### tarballの解凍

```
$ sudo tar -zxf git-2.9.4.tar.gz
$ cd git-2.9.4/
```

### make step1

```
$ sudo make configure
GIT_VERSION = 2.9.4
    GEN configure
```

### make step2

```
$ sudo ./configure --prefix=/usr
configure: Setting lib to 'lib' (the default)
configure: Will try -pthread then -lpthread to enable POSIX Threads.
configure: CHECKS for site configuration
.
.
.
configure: creating ./config.status
config.status: creating config.mak.autogen
config.status: executing config.mak.autogen commands
```

### make step3

```
$ sudo make all
    * new build flags
    CC credential-store.o
    * new link flags
    CC common-main.o
    CC abspath.o
    CC advice.o
    CC alias.o
    .
    .
    .
    GEN bin-wrappers/test-svn-fe
    GEN bin-wrappers/test-urlmatch-normalization
    GEN bin-wrappers/test-wildmatch
    GEN git-remote-testgit
```

### make installでインストール

make installコマンドでインストールしていきます。

```
$ sudo make install
```

## gitのバージョン確認

インストールした gitのバージョンを確認し、gitのバージョンが2.9.4になっていればソースインストールの完了です。

```
$ git version
git version 2.9.4
```

## 最新バージョンへのアップデート

最後にgitのインストール後に最新バージョンへアップデートしていきます。

### 最新バージョンの gitリポジトリをダウンロード

gitのインストール後は **git**コマンドが使用可能になるので、**git clone git://git.kernel.org/pub/scm/git/git.git** で最新バージョンのリポジトリをダウンロードしていきます。

```
$ sudo git clone git://git.kernel.org/pub/scm/git/git.git
Cloning into 'git'...
remote: Counting objects: 270102, done.
remote: Compressing objects: 100% (64378/64378), done.
remote: Total 270102 (delta 203589), reused 269929 (delta 203497)
Receiving objects: 100% (270102/270102), 60.71 MiB | 330.00 KiB/s, done.
Resolving deltas: 100% (203589/203589), done.
Checking connectivity... done.
$ ls -l
total 40
drwxr-xr-x. 31 root root 24576  6月 18 16:07 git
```

### make installの実行

前回の2.9.4をインストールした手順と同様に以下のコマンドを実行し、最新版のgitのインストールを行います。

```
$ cd git
$ sudo make configure
$ sudo ./configure --prefix=/usr
$ sudo make all
$ sudo make install
```

## gitが最新バージョンに更新されていることを確認

最後に gitのバージョンを確認し、最新バージョンのgitになっていれば完了です。
※ 2019年6月時点の最新バージョンは 2.22.0のため、以下ではバージョン2.22.0になっています。

```
$ git version
git version 2.22.0.190.ga6a95cd
```

## 参考文献

1. Git - Gitのインストール, https://git-scm.com/book/ja/v2/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-Git%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB, Online; accessed 19-June-2019.
2. Index of _pub_software_scm_git_, https://mirrors.edge.kernel.org/pub/software/scm/git/, Online; accessed 19-June-2019.
3. git_git_ Git Source Code Mirror - This is a publish-only repository and all pull requests are ignored. Please follow Documentation_SubmittingPatches procedure for any of your improvements., https://github.com/git/git, Online; accessed 19-June-2019.