天天看點

利用阿裡雲搭建私有Git伺服器

伺服器系統:Centos 6 (檢視centos版本指令:

lsb_release -a

用戶端系統:Windows 7

一、伺服器端安裝Git

==通常centos上使用yum源安裝的git版本過低==

1. 檢查系統上是否已經安裝git,若已有則解除安裝

// 檢視目前git版本
# git --version
git version 1.7.1

// 解除安裝舊版本
# yum remove -y git      

2. 安裝依賴包,下載下傳最新版本git源碼

# yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
# wget https://github.com/git/git/archive/v2.13.2.tar.gz
# tar zxf v2.13.2.tar.gz      

3. 安裝git,配置環境變量

# cd git-2.13.2
# make prefix=/usr/local/git all
# make prefix=/usr/local/git install
# echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
# source /etc/bashrc    // 實時生效       

4. 檢視git版本号,正确顯示則安裝成功

# git --version
git version 2.13.2      

5. 若編譯時報錯如下

libgit.a(utf8.o): In function `reencode_string_iconv‘:
/usr/local/src/git-2.13.2/utf8.c:463: undefined reference to `libiconv‘
libgit.a(utf8.o): In function `reencode_string_len‘:
/usr/local/src/git-2.13.2/utf8.c:524: undefined reference to `libiconv_open‘
/usr/local/src/git-2.13.2/utf8.c:535: undefined reference to `libiconv_close‘
/usr/local/src/git-2.13.2/utf8.c:529: undefined reference to `libiconv_open‘
collect2: ld returned 1 exit status
make: *** [git-credential-store] Error 1       

可以按照如下方式解決

// 對之前git的make 操作進行 make clean
# make clean
# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
# tar zxf libiconv-1.14.tar.gz
# cd libiconv-1.14
# ./configure --prefix=/usr/local/libiconv
# make && make install
// 建立一個軟連結到/usr/lib
# ln -s /usr/local/lib/libiconv.so /usr/lib
# ln -s /usr/local/lib/libiconv.so.2 /usr/lib      

然後

# make configure
# ./configure --prefix=/usr/local/git --with-iconv=/usr/local/libiconv/
# make && make install
# echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
# source /etc/bashrc      

6. 配置git 使用者名及郵箱(客戶機安裝後也要配置,在這裡略過windows的git安裝過程)

# git config --global user.name ‘your name‘
# git config --global user.email ‘your email address‘      

二、伺服器設定

1、添加一個git使用者,為安全起見禁用shell登入

# useradd git      

2、初始化一個項目目錄為一個倉庫

su git
//git的~的實際位址為/home/git
cd ~
//yourName為自定義的倉庫名稱
mkdir yourName.git
cd yourName.git
git init --bare      

 至此,我們的倉庫完整位址為/home/git/yourName.git

【問題】:建立遠端倉庫使用 git init 指令,也可以增加 --bare 參數。寫不寫 --bare 參數有什麼差別呢?

【答案】:

  我們知道,一般從遠端 clone 下來的倉庫會生成一個獨立的目錄,在這個目錄下有目前分支最新版本的檔案,同時還有一個 .git 檔案夾,與 .git 同級的檔案夾稱為我們的“工作目錄”,我們的修改都在這個目錄中進行。而 .git 就是我們 Git 本地倉庫的工作目錄,我們 add 和 commit 的東西都會被送出到這個目錄中。對 git init 指令添加 --bare 參數就表示初始化 Git 倉庫的時候不要建立本地工作目錄,是以相當于 .git 檔案夾下的所有内容直接建立到目前目錄下,而不是被放到 .git 目錄下。在 Git 伺服器上建立好倉庫以後,使用者就可以克隆這個倉庫了。等等。。還沒配置使用者 SSH 公鑰呢,這麼就讓使用者去下載下傳,肯定還是要輸入密碼才行的。

3、在 Git 伺服器上為使用者配置 SSH 公鑰

 還是先在 Git 伺服器上使用 authorized_keys 檔案來管理所有使用者的 SSH 公鑰。(密鑰登入的方式比密碼登入更安全、更便捷,注意保管好自己的私鑰,下面會講到如何生成秘鑰對)

git@Linux:~$ mkdir .ssh
git@Linux:~$ touch .ssh/authorized_keys
git@Linux:~$ chmod 600 .ssh/authorized_keys 
git@Linux:~$      

注意:這裡的authorized_keys跟配置好的centos的證書方式ssh登入不同(如已配置),我們git的證書檔案路徑為/home/git/.ssh/authorized_keys(ssh終端登入所用證書檔案路徑為/etc/ssh/authorized_keys,一般使用xshell或者putty等工具用的證書登入ssh所用的pub密鑰資訊都在裡面)

4、打開伺服器的RSA認證

# vim /etc/ssh/sshd_config
// 找到下面3行并去掉注釋
 1. RSAAuthentication yes     
 2. PubkeyAuthentication yes     
 3. AuthorizedKeysFile  .ssh/authorized_keys      

 重新開機sshd

service sshd restart      

5、為安全起見禁用git使用者shell登入

// 為安全起見,禁用 git 使用者的 shell 登入
# vim /etc/passwd
// 修改 git 使用者的 shell 為 git-shell,路徑使用 which git-shell 檢視
// 找到如下一行
git:x:1001:1001::/home/git:/bin/bash
// 修改成如下
git:x:1001:1001::/home/git:/usr/local/git/bin/git-shell      

 重新開機sshd服務

service sshd restart      

 版權聲明:本文由 

數控等離子切割機 http://www.hycsk.com http://www.hycsk.com/

整理編輯!本文章來源于網絡,如有侵權,請聯系雲栖社群,歡迎分享本文,轉載請保留出處!

三、用戶端開始使用

1、打開git bash

2、生成秘鑰對

  2.1 客戶機執行以下指令将在windows的“使用者目錄/.ssh”下得到秘鑰對

cd ~/.ssh
ssh-keygen -t rsa -C “[email protected]

  2.2上傳公共秘鑰到git伺服器有以下2種方式:

  ①複制到git伺服器的/home/git/.ssh/authorized_keys檔案末尾中;

  ②通過ftp等方式上傳後,執行以下指令:

cat 源秘鑰檔案路徑 >> /home/git/.ssh/authorized_keys      

2、任意建立一個工作區檔案夾

3、執行clone指令(輸入自己的IP位址,端口預設為22,如有不同就加上去)

git clone git@ip:/home/git/yominhi.git      

4、随便建立個檔案

5、送出

cd 項目檔案下下
git add .
git commit -m "本次送出的備注"
git push      

6、伺服器端驗證是否上傳成功

cd /home/git/yourName.git/branches
git log      

成功資訊:

commit 087966c9f3f73f4aee153213213212132132ac191a7 (HEAD -> master)
Author: upLoadUserName <yourEmailAddress>
Date:   Tue Oct 9 08:59:21 2018 +0800