安裝git和openssh。在當前用戶下執行以下命令安裝git和openssh:sudo apt-get install git-core openssh-server openssh-client
python
git-core是git版本控制核心軟件linux
安裝openssh-server和openssh-client是因爲git須要經過ssh協議來在服務器與客戶端之間傳輸文件git
而後中間有個確認操做,輸入Y後等待系統自動從鏡像服務器中下載軟件安裝,安裝完後會回到用戶當前目錄。若是github
安裝提示失敗,多是由於系統軟件庫的索引文件太舊了,先更新一下就能夠了,更新命令以下:ubuntu
sudo apt-get updatevim
配置gitwindows
建立全部代碼倉庫和用戶權限的管理者git,並更改用戶的密碼。在當前用戶下執行:sudo useradd -m -s /bin/bash git
sudo passwd git
bash
useradd會在ubuntu上增長一個git用戶
服務器
建立git倉庫的存儲目錄、更改文件目錄屬主爲代碼倉庫的管理者git,只讓git用戶對此目錄有權限。本文檔以/home/repo目錄作爲git倉庫的存儲目錄。在當前用戶下執行:sudo mkdir /home/repo
sudo chown git:git /home/repo
sudo chmod 700 /home/repo
app
安裝gitosis前準備
初始化git用戶。在任何一臺機器上使用git,第一次必須初始化一下。在當前用戶下初始化全局的git信息:git config --global user.name "jackliu"
git config --global user.email "xcltl618@gmail.com"
安裝python的setup tool。在當前用戶下執行以下命令安裝:sudo apt-get install python-setuptools
安裝gitosis。在當前用戶下進行安裝,執行以下命令:
cd /tmp
git clone https://github.com/res0nat0r/gitosis.git
上面有2個零啊,不要打錯了
cd gitosis
sudo python setup.py install
默認狀態下,gitosis會將git倉庫放在 git用戶的home下,因此咱們作一個連接到/home /repo,su到git用戶,執行以下命令:ln -s /home/repo /home/git/repositories
而後退出git用戶,必定要切換到git用戶下執行
配置gitosis。若是你是git服務器的管理員,在你的計算機上(最好是另外一臺PC)來生成訪問git服務器的ssh公鑰,而後將生成的公鑰拷貝到git服務器,執行相關命令來容許你用我的的計算機進行訪問和管理git服務器。本文檔以liutailin@liutailin-ThinkPad-Edge來作爲遠程訪問和控制git服務器的管理用戶。若是另一臺電腦仍是linux的電腦,還要在linux上安裝上git(傳送下載地址http://git-scm.com/downloads),而且初始化用戶git config那兩句命令,若是是linux,在此計算機上的/home/liutailin目錄下,執行以下命令:
在你的PC上選擇一個用戶作爲遠程訪問及管理git服務器的用戶,同時並生成ssh公鑰。在選中的用戶的home下,執行以下命令:ssh-keygen -t rsa
windows電腦也同樣是經過這個命令來生成公鑰,默認保存在c盤用戶文件夾下的.ssh文件夾,id_rsa.pub是公鑰,用於身份驗證的
將生成的公鑰拷貝到服務器的/tmp下,注意要把改爲git服務器對應的IP地址:scp .ssh/id_rsa.pub git@<server-IP>:/tmp
你也能夠直接用U盤拷貝id_rsa.pub到這臺服務器上到/tmp目錄下
回到git服務器/tmp/gitosis目錄,執行:sudo chmod a+r /tmp/id_rsa.pub
在git服務器上執行以下命令,讓gitosis運行起來:sudo -H -u git gitosis-init < /tmp/id_rsa.pub
會出現以下應答:Initialized empty Git repository in /home/repo/gitosis-admin.git/
Reinitialized existing Git repository in /home/repo/gitosis-admin.git/
gitosis經過一個git倉庫來管理配置文件,倉庫放在/home/repo/gitosis- admin.git。咱們須要爲一個文件加上可執行權限,以root用戶登陸,cd /home/git/repositories
cd gitosis-admin.git/
sudo chmod 755 /home/repo/gitosis-admin.git/hooks/post-update
exit
創建倉庫名「test」的測試倉庫。在git服務器上切換到git用戶,執行以下命令創建測試倉庫:su - git
cd /home/repo
mkdir test.git
cd test.git
git init --bare
exit
到目前爲止,這只是一個空倉庫,空倉庫是不能clone的。爲了能clone,咱們必須先讓某個有權限的人放一個初始化的版本到倉庫中。因此,咱們必須先修改一下gitosis-admin。此時須要 管理gitosis的配置文件。
gitosis自己的配置也是經過git來實現的。
克隆gitosis-admin.git倉庫。
在git管理員用戶目錄下,把gitosis-admin.git這個倉庫clone下來,接下來咱們能夠用管理員的身份修改配置了。在git管理員用戶目錄下執行:
git clone git@<server>:gitosis-admin.git
在windows電腦上git base下同樣執行這個克隆命令
若是出現:fatal: '~/gitosis-admin.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
改爲:sudo git clone git@<Server-IP>:/home/repo/gitosis-admin.git
拷貝須要訪問git服務器的開發用戶的ssh公鑰 獲取倉庫後,執行cd gitosis-admin/ 進入到剛剛克隆的管理倉庫
該目錄下的keydir目錄是用來存放全部須要訪問git服務器的用戶的ssh公鑰:各個用戶按照前面提到的辦法生成各自的ssh公鑰文件後,把全部人的ssh公鑰文件都拿來,按名字命名一下,好比b@pc1.pub, lz@pc2.pub等,通通拷貝到keydir下:su root
cp /path/.ssh/id_rsa.pub ./keydir/b@pc1.pub
exit
windows下直接複製粘貼
修改gitosis.conf文件[gitosis]
[group gitosis-admin]
members = test@liutailin-ThinkPad-Edge ltl@it-c-015
writable = gitosis-admin
[group hello]
members = ltl@liutailin-ThinkPad-Edge ltl@it-c-015
writable = test
這個配置文件說明:
members = 後面跟的必定要和 .pub的前綴一致,不然沒有訪問權限
目前這些配置文件的修改只是在你的本地,你必須推送到遠程的gitserver上才能真正生效。 加入新文件、提交併push到git服務器:git add .
git commit -am 「add test prj and users」
git push origin master
gitosis-admin組成員有test@liutailin-ThinkPad-Edge, ltl@it-c-015, 該組對gitosis-admin倉庫有讀寫權限;
hello組有test@liutailin-ThinkPad-Edge, ltl@it-c-015兩個成員, 該組對test倉庫有讀寫權限;
服務器搭建完了,而且有一個空的項目test在服務器上。接下來測試一下,空倉庫是不能clone的,因此須要某一個有寫權限的人初始化一個版本。 下面是在ltl@it-c-015客戶端完成。mkdir test-ori
cd test-ori/
git init
echo 「/*add something*/」 > hello
git add .
git commit -am 「initial version」
git remote add origin git@<server-ip>:test.git
git push origin master
到此,test已經有了一個版本了,test倉庫的其餘成員只要先clone一下test倉庫,就能夠進行倉庫的開發了。下面是一個用戶b來克隆test:su b
cd /home/b
git clone git@<server-ip>:test.git
cd teamwork
vim hello
git add .
git commit -am 「b add」
git push origin master
exit
當咱們有一個現成的git倉庫,想放到 gitserver上供team使用。以zark倉庫爲例。
首先須要從你的工做倉庫中獲得一個純倉庫, 好比你的工做目錄爲~/kernel, 你想導出純倉庫到指定路徑,而後拷貝到gitserver上去。git clone –bare ~/workspace/zark ~/zark.git
而後把zark.git 拷貝到git服務器/home/repo/下,同時把zark.git的全部者變動爲git scp ~/zark.git git@<server-ip>:/home/repo/
chown -R git:git /home/repo/zark.git
同時須要配置 gitosis相關配置文件,增長zark倉庫的用戶