利用阿里雲搭建私有Git服務器

服務器系統:Centos 6 (查看centos版本命令:lsb_release -ahtml

客戶端系統:Windows 7git

1、服務器端安裝Gitgithub

==一般centos上使用yum源安裝的git版本太低==shell

 

1. 檢查系統上是否已經安裝git,若已有則卸載vim

// 查看當前git版本
# git --version
git version 1.7.1

// 卸載舊版本
# yum remove -y git

 

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

# 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,配置環境變量centos

# 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 

能夠按照以下方式解決bash

// 對以前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'

 

2、服務器設置

一、添加一個git用戶

# useradd git

 

二、初始化一個項目目錄爲一個倉庫

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 公鑰呢,這麼就讓用戶去下載,確定仍是要輸入密碼才行的。

 

三、在 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密鑰信息都在裏面)

 

四、打開服務器的RSA認證

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

 重啓sshd

service sshd restart

 

五、爲安全起見禁用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

 

3、客戶端開始使用

一、打開git bash

二、生成祕鑰對

  2.1 客戶機執行如下命令將在windows的「用戶目錄/.ssh」下獲得祕鑰對

cd ~/.ssh
ssh-keygen -t rsa -C 「youremail@example.com」 

 

  2.2上傳公共祕鑰到git服務器有如下2種方式:

  ①複製到git服務器的/home/git/.ssh/authorized_keys文件末尾中;

  ②經過ftp等方式上傳後,執行如下命令:

cat 源祕鑰文件路徑 >> /home/git/.ssh/authorized_keys


二、任意新建一個工做區文件夾

三、執行clone命令(輸入本身的IP地址,端口默認爲22,若有不一樣就加上去)

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

 

四、隨便新建個文件

五、提交

cd 項目文件下下
git add .
git commit -m "本次提交的備註"
git push

 

六、服務器端驗證是否上傳成功

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

成功信息:

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

 

【遇到的坑】

一、回到家git clone一下發覺這玩意兒 Permission denied我了!

解決辦法:再次百度鼓搗一趟,原來是的ssh-keygen的時候自定義了密鑰的文件名,保持默認回車下去生成的id_rsa可以正常使用,ssh -v 服務器IP 一下發現可能客戶端的git默認使用了id_rsa的私鑰,待深刻學習git考究(原諒我懶人不看git官網原著,專門看百度出來的博客被坑)

 

二、git push報錯1

$ git push
Enter passphrase for key '/c/Users/PC-name/.ssh/id_rsa':
Enumerating objects: 145, done.
Counting objects: 100% (145/145), done.
Delta compression using up to 4 threads.
Compressing objects: 100% (134/134), done.
fatal: sha1 file '<stdout>' write error: Broken pipe
error: remote unpack failed: unable to create temporary object directory error: failed to push some refs to 'git@youripaddr:survey.git'

緩存區不夠大,搞大它

$ git config http.postBuffer 52428800

 

三、git push報錯2

$ git push
Enter passphrase for key '/c/Users/hp206/.ssh/id_rsa':
Enumerating objects: 145, done.
Counting objects: 100% (145/145), done.
Delta compression using up to 4 threads.
Compressing objects: 100% (134/134), done.
Writing objects: 100% (145/145), 103.16 KiB | 685.00 KiB/s, done.
Total 145 (delta 64), reused 0 (delta 0)
error: remote unpack failed: unable to create temporary object directory
To youripaddr:yourprojectname.git
 ! [remote rejected] master -> master (unpacker error) error: failed to push some refs to 'git@youripaddr:survey.git'

權限的問題,由於不是服務器git用戶建立的目錄
到服務器git目錄下

chown -vR git *

完美!

 

參考文章:

1.搭建私有git服務器進行版本控制
2.向git服務器添加shh公鑰
3.搭建Git服務器遇到的那些坑

相關文章
相關標籤/搜索