最近公司項目需要用到Git來管理項目,正好逢週末花了點時間在虛擬機的unbuntu系統中搭建了下git的服務器,由於搭建過程中多多少少遇到了一些小問題,再因爲個人記性不太好,所以在這裏記錄下來,以備不時之需。開始我已經在虛擬機的ubuntu12.04系統下已經裝過一次,忘了記錄,這次重新再在虛擬機的ubuntu13.10系統下一步一步的來搭建,後面介紹包括了在客戶端機器(宿主機器win7)安裝git客戶端,及客戶端git bash的簡單使用。
一、安裝git服務器所需軟件
打開終端輸入以下命令:
- ubuntu:~$ sudo apt-get install git-core openssh-server openssh-client
git-core是git版本控制核心軟件
安裝openssh-server和openssh-client是由於git需要通過ssh協議來在服務器與客戶端之間傳輸文件
然後中間有個確認操作,輸入Y後等待系統自動從鏡像服務器中下載軟件安裝,安裝完後會回到用戶當前目錄。如果
安裝提示失敗,可能是因爲系統軟件庫的索引文件太舊了,先更新一下就可以了,更新命令如下:
- ubuntu:~$ sudo apt-get update
更新完軟件庫索引後繼續執行上面的安裝命令即可。
安裝python的setuptools和gitosis,由於gitosis的安裝需要依賴於python的一些工具,所以我們需要先安裝python
的setuptools。
執行下面的命令:
- ubuntu:~$ sudo apt-get install python-setuptools
這個工具比較小,安裝也比較快,接下來準備安裝gitosis,安裝gitosis之前需要初始化一下服務器的git用戶信息,這個
隨便填。
- ubuntu:~$ git config --global user.name "myname"
- ubuntu:~$ git config --global user.email "******@gmail.com"
初始化服務器用戶信息後,就可以安裝gitosis了,gitosis主要是用於給用戶授權,設置權限也算是很方便的。
可以通過以下命令獲取gitosis版本文件
- ubuntu:~$ git clone https://github.com/res0nat0r/gitosis.git
注意:中間有兩個是數字零
獲取gitosis文件後,進入到文件目錄下面
- ubuntu:/tmp$ cd gitosis/
接着使用python命令安裝目錄下的setup.py的python腳本進行安裝
- ubuntu:/tmp/gitosis$ sudo python setup.py install
到這裏,整個安裝步驟就完成了,下面就開始對git進行一些基本的配置。
二、創建git管理員賬戶、配置git
創建一個賬戶(git)作爲git服務器的管理員,可以管理其他用戶的項目權限。
- ubuntu:/tmp/gitosis$ sudo useradd -m git
- ubuntu:/tmp/gitosis$ sudo passwd git
然後再/home目錄下創建一個項目倉庫存儲點,並設置只有git用戶擁有所有權限,其他用戶沒有任何權限。
- ubuntu:/tmp/gitosis$ sudo mkdir /home/gitrepository
- ubuntu:/tmp/gitosis$ sudo chown git:git /home/gitrepository/
- ubuntu:/tmp/gitosis$ sudo chmod 700 /home/gitrepository/
由於gitosis默認狀態下會將倉庫放在用戶的repositories目錄下,例如git用戶的倉庫地址默認在
/home/git/repositories/目錄下,這裏我們需要創建一個鏈接映射。讓他指向我們前面創建的專門用於存放項目
的倉庫目錄/home/gitrepository。
- ubuntu:/tmp/gitosis$ sudo ln -s /home/gitrepository /home/git/repositories
這裏我將在服務器端生成ssh公鑰,如果想在其他機器上管理也可以在其他機器上生成一個ssh的公鑰。
- ubuntu:/home/git$ ssh-keygen -t rsa
這裏會提示輸入密碼,我們不輸入直接回車即可。
然後用剛生成公鑰id_rsa.pub來對gitosis進行初始化。
出現如上信息說明gitosis已經初始化成功。
gitosis主要是通過gitosis-admin.git倉庫來管理一些配置文件的,如用戶權限的管理。這裏我們需要對其中的一
個post-update文件添加可執行的權限。
- ubuntu:/home/git$ sudo chmod 755 /home/gitrepository/gitosis-admin.git/hooks/post-update
三、服務器上創建項目倉庫
使用git賬戶在服務器上創建一個目錄(mytestproject.git)並初始化成git項目倉庫。
- ubuntu:/home/git$ su git
- $ cd /home/gitrepository
- $ mkdir mytestproject.git
- $ git init --bare
- $ exit
如果出現以下信息就說明已經成功創建了一個名爲mytestproject.git的項目倉庫了,新建的這個倉庫暫時還是空
的,不能被客戶端clone,還需要對gitosis進行一些配置操作。
四、使用gitosis管理用戶操作項目的權限
首先需要在前面生成ssh公鑰(用來初始化gitosis)的機器上將gitosis-admin.git的倉庫clone下來。
在客戶端機器上新建一個目錄用於存放gitosis-admin.git倉庫
- ubuntu:~$ mkdir gitadmin
- ubuntu:~$ cd gitadmin/
- ubuntu:~/gitadmin$ git clone [email protected]:gitosis-admin.git
clone正確會顯示一下信息
clone下來會有一個gitosis.conf的配置文件和一個keydir的目錄。gitosis.conf用於配置用戶的權限信息,
keydir主要用戶存放ssh公鑰文件(一般以“用戶名.pub”命名,gitosis.conf配置文件中需使用相同用戶名),用
於認證請求的客戶端機器。
現在讓需要授權的用戶使用前面的方式各自在其自己的機器上生成相應的ssh公鑰文件,管理員把他們分別按用戶名
命名好,複製到keydir目錄下。
- ubuntu:~$ cp /home/aaaaa/Desktop/zhangsan.pub /home/aaaaa/gitadmin/gitosis-admin/keydir/
- ubuntu:~$ cp /home/aaaaa/Desktop/lisi.pub /home/aaaaa/gitadmin/gitosis-admin/keydir/
繼續編輯gitosis.conf文件
[gitosis]
[group gitosis-admin] ####管理員組
members = charn@ubuntu ####管理員用戶名,需要在keydir目錄下找到相應的.pub文件,多個可用空格隔開(
下同)
writable = gitosis-admin####可寫的項目倉庫名,多個可用空格隔開(下同)
[group testwrite] ####可寫權限組
members = zhangsan####組用戶
writable = mytestproject####可寫的項目倉庫名
[group testread]####只讀權限組
members =lisi####組用戶
readonly= mytestproject####只讀項目倉庫名
因爲這些配置的修改只是在本地修改的,還需要推送到服務器中才能生效。
- ubuntu:~/gitadmin/gitosis-admin$ git add .
- ubuntu:~/gitadmin/gitosis-admin$ git commit -am "add a user permission"
- ubuntu:~/gitadmin/gitosis-admin$ git push origin master
推送成功會顯示下面提示信息
又是後新增的用戶不能立即生效,這時候需要重新啓動一下sshd服務
- ubuntu:~/gitadmin/gitosis-admin$ sudo /etc/init.d/ssh restart
現在,服務端的git就已經安裝和配置完成了,接下來就需要有權限的組成員在各自的機器上clone服務器上的相應
項目倉庫進行相應的工作了。
五、客戶端(windows)使用git
下載安裝windows版本的git客戶端軟件,下載地址:http://msysgit.github.io/
安裝完成後右鍵菜單會出現幾個git相關的菜單選項,我們主要使用其中的git bash通過命令行來進行操作。
在本地新建一個目錄,使用git初始化這個目錄,然後再裏面新建一個文本文件用於測試,最後關聯到git服務器倉庫
中的相關項目,最後上傳本地版本到服務器。
- $ mkdir testgit
- $ cd testgit
- $ git init
- $ echo "this is a test text file,will push to server" > hello.txt
- $ git add .
- $ git commit -am "init a base version,add a first file for push to server"
- $ git remote add origin git@serverip:mytestproject.git
- $ git push origin master
這樣服務端就創建好了一個mytestproject.git的倉庫的基礎版本了,現在其他組員只要從服務端進行clone就可以
了。
window下面進入到需要克隆的本地目錄下面右鍵選擇git bash選項,輸入
- $ git clone git@serverip:mytestproject.git
就可以把項目clone到本地倉庫了。
下面進行簡單的修改和提交操作
- $ cd mytestproject
- $ echo "this is another text file created by other" >another.txt
- $ git add .
- $ git commit -am "add a another file by other"
- $ git push origin master
最後推送到服務器成功會顯示如下信息
clone下來會有一個gitosis.conf的配置文件和一個keydir的目錄。gitosis.conf用於配置用戶的權限信息,
keydir主要用戶存放ssh公鑰文件(一般以“用戶名.pub”命名,gitosis.conf配置文件中需使用相同用戶名),用
於認證請求的客戶端機器。
現在讓需要授權的用戶使用前面的方式各自在其自己的機器上生成相應的ssh公鑰文件,管理員把他們分別按用戶名
命名好,複製到keydir目錄下。
- ubuntu:~$ cp /home/aaaaa/Desktop/zhangsan.pub /home/aaaaa/gitadmin/gitosis-admin/keydir/
- ubuntu:~$ cp /home/aaaaa/Desktop/lisi.pub /home/aaaaa/gitadmin/gitosis-admin/keydir/
繼續編輯gitosis.conf文件
[gitosis]
[group gitosis-admin] ####管理員組
members = charn@ubuntu ####管理員用戶名,需要在keydir目錄下找到相應的.pub文件,多個可用空格隔開(
下同)
writable = gitosis-admin####可寫的項目倉庫名,多個可用空格隔開(下同)
[group testwrite] ####可寫權限組
members = zhangsan####組用戶
writable = mytestproject####可寫的項目倉庫名
[group testread]####只讀權限組
members =lisi####組用戶
readonly= mytestproject####只讀項目倉庫名
因爲這些配置的修改只是在本地修改的,還需要推送到服務器中才能生效。
- ubuntu:~/gitadmin/gitosis-admin$ git add .
- ubuntu:~/gitadmin/gitosis-admin$ git commit -am "add a user permission"
- ubuntu:~/gitadmin/gitosis-admin$ git push origin master
推送成功會顯示下面提示信息
又是後新增的用戶不能立即生效,這時候需要重新啓動一下sshd服務
- ubuntu:~/gitadmin/gitosis-admin$ sudo /etc/init.d/ssh restart
現在,服務端的git就已經安裝和配置完成了,接下來就需要有權限的組成員在各自的機器上clone服務器上的相應
項目倉庫進行相應的工作了。
五、客戶端(windows)使用git
下載安裝windows版本的git客戶端軟件,下載地址:http://msysgit.github.io/
安裝完成後右鍵菜單會出現幾個git相關的菜單選項,我們主要使用其中的git bash通過命令行來進行操作。
在本地新建一個目錄,使用git初始化這個目錄,然後再裏面新建一個文本文件用於測試,最後關聯到git服務器倉庫
中的相關項目,最後上傳本地版本到服務器。
- $ mkdir testgit
- $ cd testgit
- $ git init
- $ echo "this is a test text file,will push to server" > hello.txt
- $ git add .
- $ git commit -am "init a base version,add a first file for push to server"
- $ git remote add origin git@serverip:mytestproject.git
- $ git push origin master
這樣服務端就創建好了一個mytestproject.git的倉庫的基礎版本了,現在其他組員只要從服務端進行clone就可以
了。
window下面進入到需要克隆的本地目錄下面右鍵選擇git bash選項,輸入
- $ git clone git@serverip:mytestproject.git
就可以把項目clone到本地倉庫了。
下面進行簡單的修改和提交操作
- $ cd mytestproject
- $ echo "this is another text file created by other" >another.txt
- $ git add .
- $ git commit -am "add a another file by other"
- $ git push origin master
最後推送到服務器成功會顯示如下信息