問題描述
centos7 系統默認的 git 安裝版本是 1.8,可是在項目構建中發現 git 版本太低,因而用源碼編譯的方式進行升級.同時該文章也適用於安裝新的 git,相信你們對 git 都有必定的瞭解了,在文章過程當中有的步驟也就不細細講了.php
操做環境
centos7.0git
軟件準備
安裝流程
一、第一步卸載原有的 git。curl
yum remove git
二、安裝相關依賴url
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc yum install gcc perl-ExtUtils-MakeMaker
三、安裝 gitcentos7
將壓縮包解壓到/usr/local/src目錄 tar -C /usr/local/src -vxf git-2.7.3.tar.xz cd git-2.7.3 // 編譯 make prefix=/usr/local/git all // 安裝 make prefix=/usr/local/git install // 寫入到環境變量中(方法一) echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/profile && source /etc/profile // 寫入到環境變量中(方法二) export PATH=$PATH:/usr/local/bin/git // 查看是否已經安裝成功 git --version
問題解決
正常的流程就是按照上面的流程進行安裝便可,下面總結一些在安裝過程當中遇到的幾個問題.
一、make prefix=/usr/local/git all 進行編譯的時候提示以下錯誤code
LINK git-credential-store libgit.a(utf8.o): In function `reencode_string_iconv': /usr/src/git-2.8.3/utf8.c:463: undefined reference to `libiconv' libgit.a(utf8.o): In function `reencode_string_len': /usr/src/git-2.8.3/utf8.c:502: undefined reference to `libiconv_open' /usr/src/git-2.8.3/utf8.c:521: undefined reference to `libiconv_close' /usr/src/git-2.8.3/utf8.c:515: undefined reference to `libiconv_open' collect2: ld returned 1 exit status make: *** [git-credential-store] Error 1
這個問題主要是系統缺乏 libiconv 庫致使的。根據上面提供的連接,下載 libiconv 便可。ssl
cd /usr/local/src wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz tar -zxvf libiconv-1.14.tar.gz cd libiconv-1.14 配置 ./configure --prefix=/usr/local/libiconv 編譯 make 安裝 make install 創建軟鏈接 ln -s /usr/local/lib/libiconv.so /usr/lib ln -s /usr/local/lib/libiconv.so.2 /usr/lib
這時候還 libiconv 庫已經安裝完成,下面進入咱們的 git 安裝目錄,按照下面的方式進行安裝ci
make configure ./configure --prefix=/usr/local --with-iconv=/usr/local/libiconv 編譯 make 安裝 make install 加入環境變量 export PATH=$PATH:/usr/local/bin/git 檢測版本號 git --version
二、在安裝 libiconv 時會遇到./stdio.h:1010:1: error: 'gets' undeclared here (not in a function)的錯誤提示,進行下面的操做便可解決.rem
進入錯誤文件路徑 cd libiconv-1.14/srclib 編輯文件stdio.in.h找到698行的樣子,內容是_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); 將這一行註釋掉(注意註釋必定要用/**/來進行註釋),替換爲下面的內容 #if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16) _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); #endif
本文由博客一文多發平臺 OpenWrite 發佈!