
Git的基本工作流程
在工作目錄中修改某些文件。
對修改后的文件進(jìn)行快照,然后保存到暫存區(qū)域。
提交更新,將保存在暫存區(qū)域的文件快照永久轉(zhuǎn)儲到 Git 目錄中。
Git服務(wù)器搭建
環(huán)境部署
系統(tǒng)環(huán)境:
服務(wù)器端:CentOS 6.5 ,ip:192.168.0.130
客戶端:CentOS 6.5 ,ip:192.168.0.110軟件版本:
服務(wù)器端:源碼編譯安裝,git-1.9.0.tar.gz
客戶端:yum在線安裝機(jī)制
安裝
服務(wù)器端安裝
- 安裝git:
#yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
#wget http://git-core.googlecode.com/files/git-1.9.0.tar.gz
#tar zxvf git-1.9.0.tar.gz
#cd git-1.9.0
#make prefix=/usr/local all
#make prefix=/usr/local install #root用戶運(yùn)行
- 查看版本號:
#git --version
git version 1.9.0
- 安裝gitosis:gitosis為Git用戶權(quán)限管理系統(tǒng),通過管理服務(wù)端的/home/git/.ssh/authorized_key文件來執(zhí)行對用戶權(quán)限的管理,是一個python模塊包
#yum install python python-setuptools
#git clone git://github.com/res0nat0r/gitosis.git
#cd gitosis/
#python setup.py install
- 顯示Finished processing dependencies for gitosis==0.2即表示成功
客戶端安裝
#yum install git
#git --version
git version 1.7.1
配置
ssh設(shè)置
客戶端操作:生產(chǎn)密鑰并上傳到服務(wù)器端
#ssh-keygen -t rsa -C "你的郵箱(不能有數(shù)字,可以隨便編)"
#scp ~/.ssh/id_rsa.pub root@192.168.0.130:~/
注意:這里會生成兩個文件,id_rsa與id_rsa.pub。打開id_rsa.pub 看一下,如果最后面的郵箱地址有數(shù)字,后面配置會報錯,所以這里如果有數(shù)字要重新生成。
服務(wù)器生成git用戶
- 添加用戶git:
#useradd -r -s /bin/sh -c 'git version control' -d /home/git git
- 設(shè)置權(quán)限:
#mkdir -p /home/git
#chown git:git /home/git
- 在服務(wù)器端生成管理庫:
#sudo -H -u git gitosis-init < ~/id_rsa.pub
Initialized empty Git repository in /home/git//repositories/gitosis-admin.git/ Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/
注解:
- 生成的gitosis-admin為Git的用戶訪問權(quán)限管理庫,gitosis通過這個git庫來管理所有g(shù)it庫的訪問權(quán)限。
- 通過執(zhí)行初始化,該公鑰的擁有者就能修改用于配置gitosis的那個特殊Git倉庫了
- 修改上傳權(quán)限:
#chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
客戶端配置
- 客戶端導(dǎo)出管理:
#mkdir -p /git-repo/
#cd /git-repo/
#git clone git@192.168.0.130:gitosis-admin.git
#cd gitosis-admin
#find .
./gitosis.conf
./keydir
./keydir/oot@vm1.pub
注解:
- 如果報錯請嘗試 git clone git@192.168.0.130:repositories/gitosis-admin.git
- gitosis.conf文件用來設(shè)置用戶、倉庫和權(quán)限的控制文件
- keydir目錄則是保存所有具有訪問權(quán)限用戶公鑰的地方
- git-repo目錄為項目管理目錄
- 客戶端創(chuàng)建及設(shè)置管理項目
#cd /git-repo/gitosis-admin
查看已經(jīng)上傳密鑰
#ls keydir/
root@vm1.pub
- 權(quán)限及權(quán)限控制
#vim gitosis.conf
[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = root@vm1 #顯示用戶root@vm1.pub是初始化gitosis公鑰的擁有者,是唯一能管理gitosis-admin項目的人
[group jay_fans] #組名稱
members = root@vm1 #密鑰用戶名
writable = git-test #項目名稱
注解:
- members可以填多個用戶,用戶之間空格分隔
- writable為可寫,只讀為readonly,設(shè)置為只讀則只能pull不能push
項目管理
項目創(chuàng)建
接下來我們在客戶端創(chuàng)建一個git-test的項目,然后推送到服務(wù)端倉庫。
- 在本地創(chuàng)建項目,并設(shè)為遠(yuǎn)程倉庫,然后推送至服務(wù)端
#cd /git-repo
#mkdir git-test
#cd git-test
#git init
#touch README
#git add .
#git commit -a -m "init git-test"
#git remote add origin git@192.168.0.130:git-test.git
#git push origin master
注解:
在新項目git-test里首次推送數(shù)據(jù)到服務(wù)器前,需先設(shè)定該服務(wù)器地址為遠(yuǎn)程倉庫,但你不用事先到服務(wù)器上手工創(chuàng)建該項目的裸倉庫— Gitosis 會在第一次遇到推送時自動創(chuàng)建。
- 客戶端給成員配置此項目的權(quán)限
修改gitosis.conf
[group jay_fans] # 組名稱
members = jay # 項目成員
writable = git-test
- 權(quán)限配置推送至服務(wù)端
#git commit -a -m "granted jay commit rights to git-test"
#git push
注解:
gitosis實(shí)際上是從服務(wù)器端的/home/git/.gitosis.conf文件讀取信息的,通過以上操作,會將新的權(quán)限信息寫入到該文件中,如果搞錯了配置,導(dǎo)致失去了推送權(quán)限,可以通過修改該文件來重新設(shè)定,如果你手工編輯該文件的話,它會一直保持到下次向 gitosis-admin 推送新版本的配置內(nèi)容為止。
- 成員jay拉取代碼
#git clone git@192.168.56.1:git-test.git
項目分配
- gitosis.conf 配置文件說明
[group gitosis-admin] # 項目組 隨意起名字即可 可以和項目同名
members = lfz@lfz root110 fengzhen # 此項目組成員 多個成員用空格分隔
writable = gitosis-admin # writable是可讀寫 readonly是只讀 等號后面是項目名 在倉庫中對應(yīng) gitosis-admin.git
- 添加用戶步驟
- 用戶在自己電腦的默認(rèn)目錄(mac中為~/.ssh/)下生成或者拿到id_rsa.pub文件,然后傳給管理員。(注意:id_rsa.pub最后的郵箱部分不能用數(shù)字)
- 管理員將文件改名,例如改為abc.pub,此時abc就是此用戶的用戶名。然后放入gitosis-admin/keydir/目錄下。
- 管理員編輯gitosis.conf文件,以abc為用戶名,添加到對應(yīng)項目組內(nèi)。
- 管理員將更改推送到服務(wù)器倉庫。
- 此時,用戶即獲得項目權(quán)限,可以從遠(yuǎn)程倉庫拉取項目。
后記
有幾個使用當(dāng)中需要注意的點(diǎn):
- 如果pub文件沒有和服務(wù)器中對應(yīng)起來,操作的時候會提示輸入git用戶的密碼,此時如果有密碼的話同樣可以使用管理功能。
- 將用戶的pub文件和上傳至服務(wù)器,其實(shí)是類似免密登錄的原理,利用本地的私鑰id_rsa和服務(wù)端的公鑰id_rsa.pub實(shí)現(xiàn)不需要密碼對項目進(jìn)行管理。
- 如果pub文件和服務(wù)器沒對應(yīng)起來,也就是操作還需要輸入git密碼的時候,在進(jìn)行g(shù)it操作時,倉庫的地址要加上repositories。例如:
原:
#git clone git@192.168.0.130:test.git
現(xiàn):
#git@192.168.0.130:repositories/test.git
-
如果不小心將有數(shù)字的pub傳入服務(wù)端倉庫,導(dǎo)致倉庫不能使用。可以登錄倉庫所在的服務(wù)器,git用戶下,編輯/home/git/.ssh/authorized_keys,刪除對應(yīng)的有數(shù)字的秘鑰所在行就可以恢復(fù)。