Git的基本工作流程
在工作目錄中修改某些文件。
對(duì)修改后的文件進(jìn)行快照锦庸,然后保存到暫存區(qū)域蒲祈。
提交更新萝嘁,將保存在暫存區(qū)域的文件快照永久轉(zhuǎn)儲(chǔ)到 Git 目錄中扬卷。
Git服務(wù)器搭建
環(huán)境部署
系統(tǒng)環(huán)境:
服務(wù)器端:CentOS 6.5 ,ip:192.168.0.130
客戶(hù)端:CentOS 6.5 咱枉,ip:192.168.0.110軟件版本:
服務(wù)器端:源碼編譯安裝徒恋,git-1.9.0.tar.gz
客戶(hù)端:yum在線(xiàn)安裝機(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用戶(hù)運(yùn)行
- 查看版本號(hào):
#git --version
git version 1.9.0
- 安裝gitosis:gitosis為Git用戶(hù)權(quán)限管理系統(tǒng),通過(guò)管理服務(wù)端的/home/git/.ssh/authorized_key文件來(lái)執(zhí)行對(duì)用戶(hù)權(quán)限的管理入挣,是一個(gè)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即表示成功
客戶(hù)端安裝
#yum install git
#git --version
git version 1.7.1
配置
ssh設(shè)置
客戶(hù)端操作:生產(chǎn)密鑰并上傳到服務(wù)器端
#ssh-keygen -t rsa -C "你的郵箱(不能有數(shù)字,可以隨便編)"
#scp ~/.ssh/id_rsa.pub root@192.168.0.130:~/
注意:這里會(huì)生成兩個(gè)文件葛假,id_rsa與id_rsa.pub滋恬。打開(kāi)id_rsa.pub 看一下,如果最后面的郵箱地址有數(shù)字带斑,后面配置會(huì)報(bào)錯(cuò),所以這里如果有數(shù)字要重新生成遏暴。
服務(wù)器生成git用戶(hù)
- 添加用戶(hù)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ù)器端生成管理庫(kù):
#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的用戶(hù)訪(fǎng)問(wèn)權(quán)限管理庫(kù)朋凉,gitosis通過(guò)這個(gè)git庫(kù)來(lái)管理所有g(shù)it庫(kù)的訪(fǎng)問(wèn)權(quán)限醋安。
- 通過(guò)執(zhí)行初始化,該公鑰的擁有者就能修改用于配置gitosis的那個(gè)特殊Git倉(cāng)庫(kù)了
- 修改上傳權(quán)限:
#chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
客戶(hù)端配置
- 客戶(hù)端導(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
注解:
- 如果報(bào)錯(cuò)請(qǐng)嘗試 git clone git@192.168.0.130:repositories/gitosis-admin.git
- gitosis.conf文件用來(lái)設(shè)置用戶(hù)亲怠、倉(cāng)庫(kù)和權(quán)限的控制文件
- keydir目錄則是保存所有具有訪(fǎng)問(wèn)權(quán)限用戶(hù)公鑰的地方
- git-repo目錄為項(xiàng)目管理目錄
- 客戶(hù)端創(chuàng)建及設(shè)置管理項(xiàng)目
#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 #顯示用戶(hù)root@vm1.pub是初始化gitosis公鑰的擁有者团秽,是唯一能管理gitosis-admin項(xiàng)目的人
[group jay_fans] #組名稱(chēng)
members = root@vm1 #密鑰用戶(hù)名
writable = git-test #項(xiàng)目名稱(chēng)
注解:
- members可以填多個(gè)用戶(hù),用戶(hù)之間空格分隔
- writable為可寫(xiě)踪栋,只讀為readonly,設(shè)置為只讀則只能pull不能push
項(xiàng)目管理
項(xiàng)目創(chuàng)建
接下來(lái)我們?cè)诳蛻?hù)端創(chuàng)建一個(gè)git-test的項(xiàng)目夷都,然后推送到服務(wù)端倉(cāng)庫(kù)予颤。
- 在本地創(chuàng)建項(xiàng)目,并設(shè)為遠(yuǎn)程倉(cāng)庫(kù)党饮,然后推送至服務(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
注解:
在新項(xiàng)目git-test里首次推送數(shù)據(jù)到服務(wù)器前笆焰,需先設(shè)定該服務(wù)器地址為遠(yuǎn)程倉(cāng)庫(kù),但你不用事先到服務(wù)器上手工創(chuàng)建該項(xiàng)目的裸倉(cāng)庫(kù)— Gitosis 會(huì)在第一次遇到推送時(shí)自動(dòng)創(chuàng)建。
- 客戶(hù)端給成員配置此項(xiàng)目的權(quán)限
修改gitosis.conf
[group jay_fans] # 組名稱(chēng)
members = jay # 項(xiàng)目成員
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文件讀取信息的荞驴,通過(guò)以上操作,會(huì)將新的權(quán)限信息寫(xiě)入到該文件中霹娄,如果搞錯(cuò)了配置鲫骗,導(dǎo)致失去了推送權(quán)限,可以通過(guò)修改該文件來(lái)重新設(shè)定枕磁,如果你手工編輯該文件的話(huà),它會(huì)一直保持到下次向 gitosis-admin 推送新版本的配置內(nèi)容為止计济。
- 成員jay拉取代碼
#git clone git@192.168.56.1:git-test.git
項(xiàng)目分配
- gitosis.conf 配置文件說(shuō)明
[group gitosis-admin] # 項(xiàng)目組 隨意起名字即可 可以和項(xiàng)目同名
members = lfz@lfz root110 fengzhen # 此項(xiàng)目組成員 多個(gè)成員用空格分隔
writable = gitosis-admin # writable是可讀寫(xiě) readonly是只讀 等號(hào)后面是項(xiàng)目名 在倉(cāng)庫(kù)中對(duì)應(yīng) gitosis-admin.git
- 添加用戶(hù)步驟
- 用戶(hù)在自己電腦的默認(rèn)目錄(mac中為~/.ssh/)下生成或者拿到id_rsa.pub文件沦寂,然后傳給管理員。(注意:id_rsa.pub最后的郵箱部分不能用數(shù)字)
- 管理員將文件改名传藏,例如改為abc.pub,此時(shí)abc就是此用戶(hù)的用戶(hù)名哭靖。然后放入gitosis-admin/keydir/目錄下叫惊。
- 管理員編輯gitosis.conf文件,以abc為用戶(hù)名霍狰,添加到對(duì)應(yīng)項(xiàng)目組內(nèi)。
- 管理員將更改推送到服務(wù)器倉(cāng)庫(kù)康震。
- 此時(shí)宾濒,用戶(hù)即獲得項(xiàng)目權(quán)限,可以從遠(yuǎn)程倉(cāng)庫(kù)拉取項(xiàng)目橘忱。
后記
有幾個(gè)使用當(dāng)中需要注意的點(diǎn):
- 如果pub文件沒(méi)有和服務(wù)器中對(duì)應(yīng)起來(lái)卸奉,操作的時(shí)候會(huì)提示輸入git用戶(hù)的密碼,此時(shí)如果有密碼的話(huà)同樣可以使用管理功能榄棵。
- 將用戶(hù)的pub文件和上傳至服務(wù)器,其實(shí)是類(lèi)似免密登錄的原理拧略,利用本地的私鑰id_rsa和服務(wù)端的公鑰id_rsa.pub實(shí)現(xiàn)不需要密碼對(duì)項(xiàng)目進(jìn)行管理瘪弓。
- 如果pub文件和服務(wù)器沒(méi)對(duì)應(yīng)起來(lái),也就是操作還需要輸入git密碼的時(shí)候杠茬,在進(jìn)行g(shù)it操作時(shí),倉(cāng)庫(kù)的地址要加上repositories宁赤。例如:
原:
#git clone git@192.168.0.130:test.git
現(xiàn):
#git@192.168.0.130:repositories/test.git
-
如果不小心將有數(shù)字的pub傳入服務(wù)端倉(cāng)庫(kù)栓票,導(dǎo)致倉(cāng)庫(kù)不能使用愕够》鹈停可以登錄倉(cāng)庫(kù)所在的服務(wù)器,git用戶(hù)下继找,編輯/home/git/.ssh/authorized_keys遂跟,刪除對(duì)應(yīng)的有數(shù)字的秘鑰所在行就可以恢復(fù)。