在Centos7下搭建Git服務器


 

 

Git簡介

Git是一款免費、開源的分布式版本控制系統,用於敏捷高效地處理任何或小或大的項目。
Git是一個開源的分布式版本控制系統,可以有效、高速的處理從很小到非常大的項目版本管理。
Git 是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。
Torvalds 開始着手開發 Git 是為了作為一種過渡方案來替代 BitKeeper,后者之前一直是 Linux 內核開發人員在全球使用的主要源代碼工具。
開放源碼社區中的有些人覺得BitKeeper 的許可證並不適合開放源碼社區的工作,因此 Torvalds 決定着手研究許可證更為靈活的版本控制系統。
盡管最初 Git 的開發是為了輔助 Linux 內核開發的過程,但是我們已經發現在很多其他自由軟件項目中也使用了 Git。
例如 很多 Freedesktop 的項目遷移到了 Git 上。
 
環境:
服務器 CentOS7 + git(version 1.8.3.1-6.el7_2.1.x86_64)
客戶端 Windows7 + git(version 2.13.0-64-bit)

① 安裝 Git

centos7 做為服務器端系統,Windows 作為客戶端系統,分別安裝 Git

服務器端:


先檢查服務器有沒有自帶或者安裝git;查詢Git版本

[root@localhost ~]# git --version
git version 1.8.3.1

[root@localhost ~]# rpm -qa git
git-1.8.3.1-6.el7_2.1.x86_64

查詢到沒有的話就yum安裝一下;

#yum install -y git

安裝完后,查看 Git 版本

[root@localhost ~]# git --version

git version 1.8.3.1



客戶端:

下載 Git for Windows,地址:https://git-for-windows.github.io/

安裝完之后,可以使用 Git Bash 作為命令行客戶端。

安裝完之后,查看 Git 版本

Administrator@SG MINGW64 ~
$ git --version
git version 2.13.0.windows.1

 

② 服務器端創建 git 用戶,用來管理 Git 服務,並為 git 用戶設置密碼

[root@localhost home]# id git
id: git:無此用戶
[root@localhost home]# useradd git
[root@localhost home]# passwd git

 

 

③ 服務器端創建 Git 倉庫

設置 /home/data/git/gittest.git 為 Git 倉庫

然后把 Git 倉庫的 owner 修改為 git

[root@localhost home]# mkdir -p data/git/gittest.git
[root@localhost home]# git init --bare data/git/gittest.git
初始化空的 Git 版本庫於 /home/data/git/gittest.git/
[root@localhost home]# cd data/git/
[root@localhost git]# chown -R git:git gittest.git/

 

 

④ 客戶端 clone 遠程倉庫

首先解釋一下wamp這個目錄,這個是一組常用來搭建動態網站或者服務器的開源軟件,我安裝的目錄是D盤;

進入 Git Bash 命令行客戶端,創建項目地址(設置在 d:/wamp/www/gittest_gitbash)並進入:

 
         

Administrator@SG-20170206ABCD MINGW64 ~

$ cd /d

 

Administrator@SG-20170206ABCD MINGW64 /d

$ cd wamp/www

 

Administrator@SG-20170206ABCD MINGW64 /d/wamp/www

$ mkdir gittest_gitbash

 

Administrator@SG-20170206ABCD MINGW64 /d/wamp/www

$ cd gittest_gitbash

 
         

Administrator@SG-20170206ABCD MINGW64 /d/wamp/www/gittest_gitbash

git clone git@192.168.20.101:/home/data/gittest.git

 

然后從Centos7 Git 服務器上 clone 項目:

$ git clone git@192.168.20.101:/home/data/gittest.git

執行過程如下圖所示:

當第一次連接到目標 Git 服務器時會得到一個提示:

輸入 yes:

The authenticity of host '192.168.20.101 (192.168.20.101)' can't be established.
ECDSA key fingerprint is SHA256:HEaAUZgd3tQkEuwzyVdpGowlI6YKeQDfTBS6vVkY6Zc.
Are you sure you want to continue connecting (yes/no)?

輸入git設置的密碼:

Warning: Permanently added '192.168.20.101' (ECDSA) to the list of known hosts.
git@192.168.20.101's password:

 

此時 C:\Users\用戶名\.ssh 下會多出一個文件 known_hosts,以后在這台電腦上再次連接目標 Git 服務器時不會再提示上面的語句。

后面提示要輸入密碼,可以采用 SSH 公鑰來進行驗證。

 

⑤ 客戶端創建 SSH 公鑰和私鑰

$ ssh-keygen -t rsa -C "1838370@qq.com"

此時 C:\Users\用戶名\.ssh 下會多出兩個文件 id_rsa 和 id_rsa.pub

id_rsa 是私鑰

id_rsa.pub 是公鑰

⑥ 服務器端 Git 打開 RSA 認證

進入 /etc/ssh 目錄,編輯 sshd_config,打開以下三個配置的注釋:

 
         

[root@localhost git]# cd /etc/ssh/


[root@localhost ssh]# vim sshd_config

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

:wq 保存

保存並重啟 sshd 服務:

[root@localhost ssh]# systemctl restart sshd.service

 

由 AuthorizedKeysFile 得知公鑰的存放路徑是 .ssh/authorized_keys,

實際上是 $Home/.ssh/authorized_keys,

由於管理 Git 服務的用戶是 git,所以實際存放公鑰的路徑是 /home/git/.ssh/authorized_keys

在 /home/git/ 下創建目錄 .ssh

[root@localhost git]# pwd
/home/git
[root@localhost git]# mkdir .ssh
[root@localhost git]# ls -a
. .. .bash_logout .bash_profile .bashrc .gnome2 .mozilla .ssh

然后把 .ssh 文件夾的 owner 修改為 git

[root@localhost git]# chown -R git:git .ssh
[root@localhost git]# ll -a
總用量 32
drwx------. 5 git  git  4096 8月  28 20:04 .
drwxr-xr-x. 8 root root 4096 8月  28 19:32 ..
-rw-r--r--. 1 git  git    18 10月 16 2014 .bash_logout
-rw-r--r--. 1 git  git   176 10月 16 2014 .bash_profile
-rw-r--r--. 1 git  git   124 10月 16 2014 .bashrc
drwxr-xr-x. 2 git  git  4096 11月 12 2010 .gnome2
drwxr-xr-x. 4 git  git  4096 5月   8 12:22 .mozilla
drwxr-xr-x. 2 git  git  4096 8月  28 20:08 .ssh

 

⑦ 將客戶端公鑰導入服務器端 /home/git/.ssh/authorized_keys 文件

回到 Git Bash 下,導入文件:

Administrator@SG-20170206ABCD MINGW64 /d/wamp/www/gittest_gitbash
$ ssh git@192.168.20.101 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

需要輸入服務器端 git 用戶的密碼

回到服務器端,查看 .ssh 下是否存在 authorized_keys 文件:

[root@localhost git]# cd .ssh
[root@localhost .ssh]# ll
總用量 4
-rw-rw-r--. 1 git git 398 8月  28 20:08 authorized_keys

可以查看一下是否是客戶端生成的公鑰。

 

重要:

修改 .ssh 目錄的權限為 700

修改 .ssh/authorized_keys 文件的權限為 600

[root@localhost git]# chmod 700 .ssh
[root@localhost git]# cd .ssh
[root@localhost .ssh]# chmod 600 authorized_keys 

 

⑧ 客戶端再次 clone 遠程倉庫

$ git clone git@192.168.20.101:/home/data/git/gittest.git

 

 

 查看客戶端項目目錄:

 項目已經 clone 了。

 

 

也可以使用 tortoiseGit 客戶端來管理項目:

 

⑨ 禁止 git 用戶 ssh 登錄服務器

之前在服務器端創建的 git 用戶不允許 ssh 登錄服務器

編輯 /etc/passwd

[root@localhost .ssh]# vim /etc/passwd

找到:

git:x:502:504::/home/git:/bin/bash

修改為

git:x:502:504::/home/git:/bin/git-shell

此時 git 用戶可以正常通過 ssh 使用 git,但無法通過 ssh 登錄系統。

 

管理公鑰

如果團隊很小,把每個人的公鑰收集起來放到服務器的/home/git/.ssh/authorized_keys文件里就是可行的。如果團隊有幾百號人,就沒法這么玩了,這時,可以用Gitosis來管理公鑰。

這里我們不介紹怎么玩Gitosis了,幾百號人的團隊基本都在500強了,相信找個高水平的Linux管理員問題不大。

管理權限

有很多不但視源代碼如生命,而且視員工為竊賊的公司,會在版本控制系統里設置一套完善的權限控制,每個人是否有讀寫權限會精確到每個分支甚至每個目錄下。因為Git是為Linux源代碼托管而開發的,所以Git也繼承了開源社區的精神,不支持權限控制。不過,因為Git支持鈎子(hook),所以,可以在服務器端編寫一系列腳本來控制提交等操作,達到權限控制的目的。Gitolite就是這個工具。

這里我們也不介紹Gitolite了,不要把有限的生命浪費到權限斗爭中。

小結

  • 搭建Git服務器非常簡單,通常10分鍾即可完成;

  • 要方便管理公鑰,用Gitosis

  • 要像SVN那樣變態地控制權限,用Gitolite

介紹一個很不錯的git教程 參考:杜雪峰-git


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM