Git
centos7

ソースコードからインストールしたGitを削除して、IUSリポジトリからインストールする。

More than 1 year has passed since last update.

モチベーション

yum でインストールできる Git はとても古いので、ソースコードからインストールした。
でも更新とか面倒くさいので、 yum を使いたい。

検証環境

  • OS: macOS High Sierra (10.13.1)
  • Vagrant: 2.0.1
  • Virtualbox: 5.2.0 r118431

前提

ソースコードから Git をインストールした時の手順

必要なパッケージをインストールする

$ yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker

wgetが入っていない場合はインストールする

$ yum install -y wget

ソースコードをダウンロードする

$ cd /usr/local/src/
$ wget <git url>
$ tar xzvf git-2.15.0.tar.gz

Git をインストールする

$ cd git-2.15.0
$ make prefix=/usr/local all
$ make prefix=/usr/local install

tar.gz を削除する

$ rm -rf git-2.15.0.tar.gz

ソースコードからインストールした Git を削除する

1. DESTDIR を指定して Git をインストールする(インストール先は任意)

!削除したい Git のインストール時と同じ設定にする(prefix, exec-prefix 等)
※ 手元では make all は実行しなくても大丈夫でした

$ mkdir /var/tmp/git
$ make prefix=/usr/local DESTDIR=/var/tmp/git all
$ make prefix=/usr/local DESTDIR=/var/tmp/git install

2. 対象ファイルをリストアップして削除する

$ find /var/tmp/git -type f -printf '/%P\n' | xargs -n 10 rm -f

補足1: find について

%P: コマンドライン引き数で指定された部分を除いて、ファイル名を印字する
\n: 改行

-printf なし

/var/tmp/git/usr/local/bin/git
/var/tmp/git/usr/local/bin/git-upload-pack
/var/tmp/git/usr/local/bin/git-shell
/var/tmp/git/usr/local/bin/git-cvsserver
(以下略)

-printf '/%P'

/usr/local/bin/git/usr/local/bin/git-upload-pack/usr/local/bin/git-shell/usr/local/bin/git-cvsserver/(以下略)

-printf '/%P\n'

/usr/local/bin/git
/usr/local/bin/git-upload-pack
/usr/local/bin/git-shell
/usr/local/bin/git-cvsserver
(以下略)

補足2: xargs について

-n MAX-ARGS: コマンドライン1つにつき最大MAX-ARGS個の引数を使用する

$ echo 'foo bar baz' | xargs -n 1 echo
foo
bar
baz

$ echo 'foo bar baz' | xargs -n 2 echo
foo bar
baz

3. 対象ディレクトリをリストアップして削除する

※ 手元ではこの手順は飛ばしました

$ find /var/tmp/git -type d -printf '/%P\n'

※ 下記のように削除してはいけないディレクトリも出力に含まれているため、自分で取捨選択をする必要があります

/
/usr
/usr/local
/usr/local/bin
/usr/local/libexec
/usr/local/libexec/git-core
(以下略)

4. yum から Git を削除する

ここで削除しておかないと、後続の git2u インストール時に下記のようなエラーが出たりします
※ 手順3.をちゃんとやっていれば必要ないかもしれません

Error: git2u-perl-Git conflicts with perl-Git-1.8.3.1-12.el7_4.noarch

yum から Git を削除

$ yum remove git

IUS リポジトリから Git をインストールする

1. IUS リポジトリを追加する

$ wget https://centos7.iuscommunity.org/ius-release.rpm
$ rpm -Uvh ius-release.rpm

rpm 実行時に下記のようなエラーがでたら

error: Failed dependencies:
    epel-release = 7 is needed by ius-release-1.0-15.ius.centos7.noarch

epel-release を追加する

$ yum install -y epel-release

yum コマンド実行時の自動使用を無効にする(任意)

$ vi /etc/yum.repos.d/ius.repo
-----
[ius]
:(略)
enabled=1
↓変更
enabled=0
-----

ius リポジトリを指定して Git(git2u) をインストールする

$ yum --enablerepo=ius install -y git2u

確認

$ git --version
git version 2.14.3

もし、下記のようなエラーがでたら

-bash: /usr/local/bin/git: No such file or directory

hash コマンドで修正する
-r: ハッシュテーブルに記憶しているパス情報を消去する
-d: コマンド名: コマンド名に対応する記憶を削除する

$ type git
git is hashed (/usr/local/bin/git)

$ hash -r
 or
$ hash -d git

$ type git
git is /usr/bin/git

参考

How to uninstall git installed from the source?

CentOS7.1 64bitのyumリポジトリにIUSを追加

How do I clear Bash's cache of paths to executables?