1. 程式人生 > >Ubuntu下搭建Git伺服器

Ubuntu下搭建Git伺服器

下面搭建的git伺服器的簡易網路拓撲圖如下所示:


一、安裝及配置所需軟體[Git伺服器,[email protected]]

git-core是git版本控制核心軟體,而且git是通過ssh協議來在伺服器與客戶端之間傳輸檔案,故openssh-server、openssh-client必不可少。
[[email protected]:~$] sudo apt-get install git-core openssh-server openssh-client

初始化git使用者資訊(內容隨便填寫,若省略這步操作,後面的git命令無法完成)

[[email protected]
:~$] git config --global user.name "coffee"  
[[email protected]:~$] git config --global user.email "[email protected]"

下載Gitosis。Gitosis是什麼?在這不細說,您只需要知道它是Git許可權管理系統即可。

[[email protected]:~$] git clone https://github.com/res0nat0r/gitosis.git

安裝python的setuptools。Gitosis的工作依賴於某些Python工具,所以首先要安裝Python的setuptools包。

[[email protected]:~$] sudo apt-get install python-setuptools

安裝Gitosis。這裡便需要用到上面安裝的python工具了。
[[email protected]:~$] cd gitosis/
[[email protected]:~$] sudo python setup.py install


二、在Git伺服器上建立git倉庫使用者[Git伺服器,[email protected]]
1. 什麼叫git倉庫使用者?我是這樣定義的:一個“用來將管理倉庫(gitosis-admin.git)以及所有的git專案倉庫儲存於它的home空間”的ubuntu使用者。git倉庫使用者並不一定就是git管理員!!這點必須明白。
2. 此處再羅嗦幾句。這一步要建立的使用者,網上絕大部分文件都取名為“git”。這點我一直沒弄明白,為什麼非得叫“git”,而不能是“張三”、“李四”,是Git的明文規定嗎?非也!為了更好的理解本篇文章以及git伺服器的工作原理,我建立的這個具有git屬性的使用者名稱字叫做“john”。(我相信這對初學者來說,對理清思路是有幫助的。當然,對於深入理解git的人來說叫啥都是一樣的)
[
[email protected]
:~$] sudo useradd -m john
[[email protected]:~$] sudo passwd john

將john設定為sudo使用者,ubuntu建立的使用者預設都不屬於sudo使用者組。
[[email protected]:~$] sudo vi /etc/group
[[email protected]:~$] sudo:x:27:zhouxiang,john

注意,您不要著急敲下面的命令,只看就行,因為這些命令與《搭建git伺服器》其實半毛錢關係也沒有!我講這些的目的是為了不讓您再被網上的那些資料所困擾
/////////////////////////////////////////////////////

~$ sudo mkdir /home/gitrepository  
~$ sudo chown john:john /home/gitrepository/  
~$ sudo chmod 700 /home/gitrepository/
~$ sudo ln -s /home/gitrepository /home/john/repositories

/////////////////////////////////////////////////////
我在最開始搭建git伺服器的時候,也是參考網上的一些資料,按照他們說的步驟一步一步操作。當碰到上面這些操作的時候,我就蒙圈了!我不明白為什麼要這麼做?既然Gitosis預設狀態下會將git倉庫放在伺服器上git使用者主目錄(home)下的repositories目錄下,那就讓它放在那唄,為什麼非得搞一個連結,將repositories指向別的目錄呢?難道這也是Gitosis明文規定的嗎?非也!可惜,網上這些作者根本就不解釋為什麼這麼做。雖然心中一直“不爽”,但是作為小白的我只能按著“聖典”操作。直到現在,終於理解了,上述命令只是那些作者的一些“個人愛好”而已,完全是沒必要的!那些作者們您非要改變它的存放位置,那也請給出適當的解釋嘛(比如說是為了防止git使用者的儲存空間不夠用了啊什麼的)。廢話少說,接著講正題...


三、生成git管理員的公鑰[開發機1,[email protected]]
正式任命[email protected]為git管理員

[[email protected]:~$] ssh-keygen -t rsa #不需要密碼,一路回車就行(在本地操作)


[[email protected]:~$] scp ~/.ssh/id_rsa.pub [email protected]:/tmp/  #上傳ssh public key到Git伺服器

說明:如果scp提示如下錯誤:
ssh: Could not resolve hostname workpc1: Name or service not known
lost connection
兩種解決辦法,一是修改/etc/hosts檔案;二是用ip地址替換主機名workpc1。

四、初始化Gitosis[Git伺服器,[email protected]]
目前為止,Git伺服器端還一直在coffe使用者下,現切換至john使用者(因為在第二步,定義了john為git倉庫使用者,倉庫將都會存放在john的使用者空間下)
[[email protected]:~$] su john

[[email protected]:~$] cd #轉至john的home目錄

初始化git使用者資訊(內容隨便填寫)
[[email protected]:~$] git config --global user.name "john"  
[[email protected]:~$] git config --global user.email "[email protected]"

[[email protected]:~$] sudo -H -u john gitosis-init < /tmp/id_rsa.pub #用git管理員的公鑰來對Gitosis進行初始化


執行之後,home目錄下出現一個repositories的目錄,目錄下存在一個gitosis-admin.git的git庫. 其實Gitosis就是通過這個git庫來管理所有git庫的訪問許可權的。gitosis-admin的庫中存在一個gitosis.conf和一個keydir的目錄。其中:

1. gitosis.conf檔案就是許可權配置的地方(其語法及用法可以去檢視相關幫助),該檔案位於~/repositories/gitosis-admin.git/。用vi開啟gitosis.conf檔案,可看到[email protected]對giosis-admin.git倉庫具有寫許可權,他即是管理員。


2. keydir目錄下存放的是所有客戶端的公鑰,該目錄位於~/repositories/gitosis-admin.git/gitosis-export/keydir/,公鑰名字必須和配置檔案中的member名字對應。

這裡我們還需要對其中的一個post-update檔案新增可執行的許可權。(其實,在我的環境下,該檔案的許可權已經是755了)

[[email protected]:~$] sudo chmod 755 ~/repositories/gitosis-admin.git/hooks/post-update

截止到這,Git伺服器架構搭建完畢,倉庫是空的(除了自帶的gitosis-admin.git倉庫),配置檔案也是最簡單的配置。

接下來,我們來建立git專案,編輯gitosis.conf配置檔案為git專案指定可操作的使用者和使用者所擁有的許可權,為使用者生成公鑰,最後將所有改動上傳到Git伺服器。


五、配置gitosis-admin[開發機1,[email protected]]
目前,git管理員只有一名成員:[email protected],只有它有許可權配置gitosis-admin。
[[email protected]:~$] git clone [email protected]:gitosis-admin.git #獲取Gitosis管理專案

在當前目錄下將會產生一個gitosis-admin的目錄,裡面有配置檔案gitosis.conf和一個keydir的目錄,keydir目錄主要存放git使用者名稱。

[[email protected]:~$] vi gitosis-admin/gitosis.conf  #編輯gitosis-admin配置檔案

新增新的git專案的資訊:
[group project1]
members = [email protected] [email protected]
writable = project1

我們指定了project1的members,包含tiger,因此我們還需要將專案成員tiger的公鑰上傳到Git伺服器。



六、生成客戶端專案成員的公鑰[開發機2,[email protected]]
[[email protected]:~$] ssh-keygen -t rsa #不需要密碼,一路回車就行(在本地操作)
[[email protected]:~$] scp ~/.ssh/id_rsa.pub [email protected]:/tmp/


七、更新gitosis-admin至Git伺服器[開發機1,[email protected]]
將開發機2的tiger使用者的公鑰拷貝到keydir目錄下,且必須重新命名為[email protected]
[[email protected]:~$] cp /tmp/id_rsa.pub ~/gitosis-admin.git/gitosis-export/keydir/[email protected]

[[email protected]~$] cd gitosis-admin

[[email protected]~/gitosis-admin$] git add . #記錄所有操作

[[email protected]~/gitosis-admin$] git commit -am “xxxxx” #提交到本地倉庫
[[email protected]~/gitosis-admin$] git push origin master #將本地倉庫提交到Git伺服器


八、在客戶端建立專案[開發機2,[email protected]]

在第五步,我們添加了新的git專案的資訊,名稱為project1,成員有zhouxiang、tiger。現在來建立真正的git專案,可以在開發機1([email protected]),也可以在開發機2([email protected])來建立這個git專案,我選擇在開發機2([email protected])下建立:
[[email protected]:~$] mkdir ~/project1
[[email protected]xiaoyulong-ThinkCentre-XXXX:~$] cd ~/project1
[[email protected]:~/project1$] git init
[[email protected]:~/project1$] touch a.txt #建立一個空檔案,這步省略的話,在git push時,會報錯。後面有說明
[[email protected]:~/project1$] git add . #新增檔案 留意後面有一個點
[[email protected]:~/project1$] git commit -am “初始化專案project1″

然後就到把這個專案放到git server伺服器上去.
[[email protected]:~/project1$] git remote add origin [email protected]:project1.git
[[email protected]:~/project1$] git push origin master
也可以把上面的兩步合成一步
[[email protected]:~/project1$] git push [email protected]:project1.git master

說明:如果在執行 git push origin master 的時候,提示以下錯誤:
error: src refspec master does not match any.
error: failed to push some refs to '[email protected]:project1.git'
這是由於專案為空的原因,我們在專案目錄裡新建立一個檔案
[[email protected]:~/project1$] touch a.txt  #建立一個空檔案

再經過->add -> commit -> push 就可以解決了

至此,我認為Git伺服器搭可正常工作了,相信您可以建立自己的git專案了。用一張圖簡單表示git伺服器的網路拓撲及其成員之前的關係:



九、其它

1. 什麼是Gitosis

git作為一個分散式的版本控制系統,其實client端和server的差別並不是很大,只是server端往往沒有工作拷貝的需求,所以往往是 一個裸庫(bare repository),往往資料夾的名稱為xxxx.git ,裸庫的內容其實就相當於客戶端某個工程下的.git目錄了.

使用git的時候,一般和伺服器通訊使用的是ssh協議,用ssh的主要優點是速度快(傳輸前資料會先壓縮,比HTTP快),安全,方便讀寫。 客戶端通過ssh訪問伺服器端的驗證方式一般有兩種,一種是使用者名稱密碼的方式,一種是使用公私鑰認證的方式. 使用公私鑰的方式比較方便,無需每次登入輸入密碼。 某個受信任的客戶端的公鑰會被設定在伺服器端的 ~/.ssh/authorized_keys檔案中,有關此檔案的格式可以參見 sshd的使用者手冊 man sshd . authorized_keys有個比較厲害的功能是 支援 command引數,使得每次使用者使用此公鑰進行驗證的時候執行此後面的命令.這樣就可以做一些邏輯處理了.

一般git庫的管理需要許可權控制,如何方便簡單的進行庫的許可權管理呢? authorized_keys是一個思路,指定特定command引數,每次驗證好使用者後首先執行相關邏輯,檢測當前使用者是否具有某個許可權。 所以便有了gitosis,與其說gitosis是一個git許可權管理系統,還不如說它是一個authorized_keys檔案管理器.
gitosis的設計思路很巧妙,開天闢地之初,需要一個gitosis的管理員,所以你就在你的客戶端機器上生成一對公私鑰,將公鑰拷貝到git伺服器 端的/tmp/下,然後通過gitosis在git使用者home目錄下執行如下初始化命令,後面的公鑰便是gitosis首個管理員的公鑰

sudo -H -u git gitosis-init < /tmp/id_rsa.pub

執行之後,home目錄下出現一個repositories的目錄,目錄下存在一個gitosis-admin.git的git庫. 其實gitosis就是通過這個git庫來管理所有git庫的訪問許可權的。
在剛才你的客戶端機器上clone出這個庫,因為你剛剛用你的公鑰初始化了gitosis,所以你有許可權訪問伺服器端的庫(其實你可以在伺服器端看看 authorized_keys檔案便知道原因了)。 這個gitosis-admin的庫中存在一個gitosis.conf和一個keydir的目錄,gitosis.conf檔案就是許可權配置的地 方,keydir目錄下存放的是所有客戶端的公鑰,公鑰名字必須和配置檔案中的member名字對應.至於gitosis.conf的語法及用法可以去查 看幫助。
當修改完配置和新增好需要新增的公鑰之後,提交併push到git伺服器,這個庫的存在hook,當提交後,會根據新的配置和公鑰去更新伺服器端git用 戶的authorized_keys,以便加入新使用者的公鑰,用於許可權控制命令,以及在裸庫的目錄下提取出新的gitosis.conf檔案。

2. git init --bare和git init的區別

git init --bare
初始化的版本庫,只生成版本歷史記錄檔案/資料夾,不包含實際專案原始檔的拷貝。因此,一般在git伺服器上建立新的倉庫時,使用此命令。

git init
初始化的版本庫,生成.git目錄以及在該目錄下的版本歷史記錄檔案/資料夾,且當前目錄就是git的work目錄,可以進行任何git操作(add、commit、push等)。因此,一般在git客戶端初始化並上傳新的倉庫時,使用此命令。

相關推薦

Ubuntu搭建Git伺服器

下面搭建的git伺服器的簡易網路拓撲圖如下所示: 一、安裝及配置所需軟體[Git伺服器,[email protected]] git-core是git版本控制核心軟體,而且git是通過ssh協議來在伺服器與客戶端之間傳輸檔案,故openssh-server、o

Ubuntu 18.04.1 LTS搭建git伺服器

sudo apt-get install git 安裝好git sudo adduser git 系統會提示設定密碼,此時請設定好你的密碼,還會要你設定email之類的此時可以按Enter回車預設為空 sudo vim /home/git/.ssh/authorized_keys 此時把你電腦裡

Linux搭建Git伺服器 Jenkins持續整合環境部署

1、安裝Git 見 Jenkins持續整合環境部署 第四節 2、建立Git使用者和使用者組 1 groupadd git 2 useradd git -g git 3、建立證書切換到git使用者建立證書 1 su git 2 cd /home/git 3 mkdir .ssh 4 c

在 Linux 搭建 Git 伺服器後如何新建專案和新增使用者

關於如何在Linux 下搭建 Git 伺服器的問題,大家可以參考這篇文章(https://www.cnblogs.com/dee0912/p/5815267.html)。 我按照上面文章內容操作,確實搭建完成Git伺服器後,但是又出現了一個問題,如何新建專案,並且把參與開發人員加到該專案呢?下面

Ubuntu搭建Nginx伺服器+整合RTMP視訊直播流處理(邊做邊做更新)

簡介: 要求:做一個網頁獲取攝像頭的視訊流,然後將視訊流經過流伺服器推送到後臺視訊處理伺服器,再由後臺視訊處理伺服器推送到流伺服器,最終推送到頁面。如圖: 經過查閱資料,目前有red5以及nginx+nginx-rtmp-module實現,選擇第二種方式來實現。 準備工作:

Ubuntu搭建web伺服器

一、開始安裝MySQL5 sudo apt-get install mysql-server mysql-client 二、安裝Apache2 Apache2的是作為一個Ubuntu的軟體包,因此我們可以直接用下面命令安裝它: sudo apt-get ins

Win搭建git伺服器

轉載連結 https://blog.csdn.net/qwer971211/article/details/71156055 由於網上在window下搭建本地伺服器的教程較少,基本上都是Linux系統下的教程。所以就在這裡寫下這篇部落格,面向初使用Git的新手。 這裡搭建Git本地伺服器我用

最詳細的CentOS7搭建git伺服器

第一步:升級|安裝git最新版 1. 檢視 yum 源倉庫的 Git 資訊: yum into git 可以看出,截至目前,yum 源倉庫中最新的 Git 版本才 1.8.3.1,而檢視最新的 Git 釋出版本,已經 2.9.2 了。 2. 依賴庫安裝 #

【linux】ubuntu搭建FTP伺服器

關於FTP File Transfer Protocol(檔案傳輸協議)搭建個人網站需要向自己的雲主機上傳(upload)寫好的網站模版,在Linux下就需要一個接收(download)檔案的伺服器。ubuntu 16.04 預設是沒有FTP的,就需要自己搭建環境。 搭建FTP伺服器流程

如何在Linux系統環境搭建Git伺服器

搭建環境: 伺服器 CentOS6.6 + git(version 1.8.3.1) 客戶端 Windows10 + git(version 2.11.1.windows.1) 1. 安裝Git相關軟體 Linux是伺服器端系統,Windows作為客戶端系統,分別安裝Git 安裝服務端: [[em

git搭建git伺服器 在 Linux 搭建 Git 伺服器

在 Linux 下搭建 Git 伺服器 目錄 ① 安裝 Git ② 伺服器端建立 git 使用者,用來管理 Git 服務,併為 git 使用者設定密碼 ③ 伺服器端建立 Git 倉庫 ④ 客戶端 clone 遠端倉庫 ⑤ 客

手把手教你在 Ubuntu搭建 Git 伺服器

最近在寫一些指令碼,為了保持連續性,就在家也抽空趕進度,所以碰到了程式碼同步的問題,目前想到的方法有三個: 使用雲盤,這個拿來即用,但是因為雲盤還存放了其他一些東西,總是實時同步不太妥當; 使用 SVN,傳統的程式碼託管工具,一直在用; 使用

Linux ubuntu搭建boa伺服器

如果對Linux檔案操作不熟悉的可以看文末的補充內容 學習Linux過程中,記錄配置boa伺服器詳細過程 一、官網下載boa原始碼 boa官網 http://www.boa.org/ 我這裡下的版本是boa-0.94.13 將檔案拷貝到虛擬機器上,這裡我直接放在了home使用者檔案根

Windows平臺搭建Git伺服器

Git沒有客戶端伺服器端的概念,但是要共享Git倉庫,就需要用到SSH協議(FTP , HTTPS , SFTP等協議也能實現Git共享,此文件不討論),但是SSH有客戶端伺服器端,所以在window

ubuntu搭建svn伺服器以及設定SVN

======================================================================================= OS :Ubuntu 12.04.3 LTS kernel :3.2.0-29-generic s

windows搭建Git伺服器(轉)

以下兩篇文章是在安裝Git伺服器時借鑑的文章,不錯,轉載在此: 1、所需的軟體下載及安裝 所需工具下載地址: 若只要使用git,只需要安裝msysgit就行了。copssh是一個ssh伺服器軟體。 msysgit的安裝: 我把安裝中關鍵的幾步截圖說明,其餘直接點

ubuntu完美搭建git伺服器-完善版

最近公司專案需要用到Git來管理專案,正好逢週末花了點時間在虛擬機器的unbuntu系統中搭建了下git的伺服器,由於搭建過程中多多少少遇到了一些小問題,再因為個人記性不太好,所以在這裡記錄下來,以備不時之需。開始我已經在虛擬機器的ubuntu12.04系統下已經裝過一次

Windows搭建git伺服器,簡潔版,伺服器端msysgit加copssh,客戶端msysgit(原創)

在看了網上各種攻略之後,自己在windows環境下還是遇到了各種各樣的問題,什麼permission deny啊等等,去網上找解決方案呢,尼瑪找不到一個適用的,在折騰了一天後,終於搞定,在這裡上傳一篇解決方案,為遇到同樣問題的人提供一個參考,願你看到後能少走一些

ubuntu搭建lamp伺服器及安裝wordpress

下載wordpress包反到/var/www資料夾下: 如果這條命令不行的話可以採用直接在網頁上輸入以上網址下載到系統中然後採用 #cp wordpress.xxxx.tar.gz /var/www/ 命令下載完成。 然後解壓: #tar –zxvf latest.tar

在CentOS6.2搭建git伺服器gitosis

1.安裝git先檢查git 是否已經安裝 [[email protected] ~]# rpm -q git          如果沒有安裝則進行安裝      [[email protected] ~]# yum install git