新聞中心
前言:當(dāng)我們想要實(shí)現(xiàn)幾個(gè)小伙伴合作開發(fā)同一個(gè)項(xiàng)目,或者建立一個(gè)資源分享平臺(tái)的時(shí)候,Git就是一個(gè)很好的選擇。當(dāng)然,既然是一個(gè)共有平臺(tái),那么把這個(gè)平臺(tái)放到個(gè)人計(jì)算機(jī)上明顯是不合適的,因此就要在服務(wù)器上搭建GIT了。另一個(gè)需求是,我們在本地開發(fā),然后推送到服務(wù)器上,并且自動(dòng)同步到web站點(diǎn)目錄,這樣就可以直接看到網(wǎng)頁效果了,這就要實(shí)現(xiàn)自動(dòng)同步。下面我?guī)ьI(lǐng)大家實(shí)現(xiàn)這么一個(gè)功能。

如果條件允許的話,大家可以跟著做的(注:我的服務(wù)器是CentOS 7,LAMP環(huán)境)。
一、在服務(wù)器上安裝git:
//yum安裝
yum install -y git
在安裝完之后你可以運(yùn)行g(shù)it進(jìn)行測試,看看是否安裝成功。
二、在服務(wù)器上創(chuàng)建裸版本庫:
ps:遠(yuǎn)程倉庫通常只是一個(gè)裸倉庫(bare repository) — 即一個(gè)沒有當(dāng)前工作目錄的倉庫。因?yàn)樵搨}庫只是一個(gè)合作媒介,所以不需要從硬盤上取出最新版本的快照;倉庫里存放的僅僅是 Git 的數(shù)據(jù)。簡單地說,裸倉庫就是你工作目錄中 .git 子目錄內(nèi)的內(nèi)容
我們就在 /home/testgit/ 下創(chuàng)建一個(gè)叫 sample.git的裸倉庫吧:
mkdir /home/testgit
cd /home/testgit
git init --bare sample.git
//這里 git init 是初始化空倉庫的意思,而參數(shù) --bare 是代表創(chuàng)建裸倉庫,這個(gè)參數(shù)一定記得帶上
當(dāng)運(yùn)行完上面的最后一句命令時(shí),會(huì)有提示:Initialized empty Git repository in /home/testgit/sample.git/
如果你得不到該結(jié)果,可能就要回頭檢查哪一步出問題了
三、創(chuàng)建web站點(diǎn)目錄www
現(xiàn)在我的 web 站點(diǎn)目錄在 /home/www
四、在本地克隆服務(wù)器上的裸倉庫:
前提:本地已安裝git
打開 git bash ,我打算在我的D盤下創(chuàng)建一個(gè)名為 lsgogit 的版本庫
cd /d
git clone [email protected]:/home/testgit/sample.git lsgogit
在這里如果沒有配置公鑰的話,會(huì)提示輸入密碼,但是我們可能并不知道密碼,那就配置公鑰咯:
1、查看自己計(jì)算機(jī)的公鑰:
//查看是否有了ssh密鑰,如果沒有密鑰則不會(huì)有此文件夾
cd ~/.ssh
ls -al
//如果列出了authorized_keys2 id_dsa known_hosts config id_dsa.pub 則證明你擁有公鑰。
我們需要尋找一對(duì)以 id_dsa 或 id_rsa 命名的文件,其中一個(gè)帶有 .pub 擴(kuò)展名。 .pub 文件是你的公鑰,另一個(gè)則是私鑰。 如果找不到這樣的文件(或者根本沒有 .ssh 目錄),你可以通過運(yùn)行 ssh-keygen 程序來創(chuàng)建它們。在 Linux/Mac 系統(tǒng)中,ssh-keygen 隨 SSH 軟件包提供;在 Windows 上,該程序包含于 MSysGit 軟件包中。
首先 ssh-keygen 會(huì)確認(rèn)密鑰的存儲(chǔ)位置(默認(rèn)是 .ssh/id_rsa),然后它會(huì)要求你輸入兩次密鑰口令。如果你不想在使用密鑰時(shí)輸入口令,將其留空即可。
現(xiàn)在,進(jìn)行了上述操作的用戶需要將各自的公鑰發(fā)送給任意一個(gè) Git 服務(wù)器管理員(假設(shè)服務(wù)器正在使用基于公鑰的 SSH 驗(yàn)證設(shè)置)。 他們所要做的就是復(fù)制各自的 .pub 文件內(nèi)容,并將其通過郵件發(fā)送。 公鑰看起來是這樣的:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAcnTC3A++ginnxr2dvtQa881abjGIzk99KQVg/sPpqvtT3espFKBs/wqrJ9naIPtCswKDMg2tBVgJzg5FimDjI44O072qAftRcjU2EEySlGDDetREOvcDxqcXzf6cAdhnKlYcPk8s46oC+SxhK0zAFZCZNc7z9GcEPOC+ESIettycDw/Bo11WfxAWS0hky2F3rYh5CRr8j7BKRsAvEaAyKwzmM9X0XCRniC2pD0ObX0/SjPwq9Q5/Vjg03muiSo5Bm/xmuHkwb4/uQglBwnaSqEr6YkL9xLMoNsQaJ1TAvTrEaZLNhWzN8iaPyKZMJEzPLX1NgeEx9AEae39N+NsJ LSGO@zhongjin
現(xiàn)在我們回到服務(wù)器管理員的身份
由于前面安裝git的時(shí)候,centos會(huì)默認(rèn)創(chuàng)建一個(gè)git用戶(其他系統(tǒng)貌似需要手動(dòng)創(chuàng)建),我們進(jìn)入/home/git/.ssh,里面有一個(gè)名為 authorized_keys 的文件,我們分別將其他開發(fā)者的公鑰(全選、復(fù)制、不能更改?。┨砑拥皆撐募?,一個(gè)開發(fā)者的公鑰分一行。
現(xiàn)在我們看看有兩個(gè)開發(fā)者(個(gè)人電腦分別是zhongjin 和 jinjinzhong)的authorized_keys文件:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAcnTC3A++ginnxr2dvtQa881abjGIzk99KQVg/sPpqvtT3espFKBs/wqrJ9naIPtCswKDMg2tBVgJzg5FimDjI44O072qAftRcjU2EEySlGDDetREOvcDxqcXzf6cAdhnKlYcPk8s46oC+SxhK0zAFZCZNc7z9GcEPOC+ESIettycDw/Bo11WfxAWS0hky2F3rYh5CRr8j7BKRsAvEaAyKwzmM9X0XCRniC2pD0ObX0/SjPwq9Q5/Vjg03muiSo5Bm/xmuHkwb4/uQglBwnaSqEr6YkL9xLMoNsQaJ1TAvTrEaZLNhWzN8iaPyKZMJEzPLX1NgeEx9AEae39N+NsJ LSGO@zhongjin
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAcnTC3A++ginnxr2dvtQa881abjGIzk99KQVg/sPpqvtT3espFKBs/wqrJ9naIPtCswKDMg2tBVgJzg5FimDjI44O072qAftRcjU2EEySlGDDetREOvcDxqcXzf6cAdhnKlYcPk8s46oC+SxhK0zAFZCZNc7z9GcEPOC+ESIettycDw/Bo11WfxAWS0hky2F3rYh5CRr8j7BKRsAvEaAyKwzmM9X0XCRniC2pD0ObX0/SjPwq9Q5/Vjg03muiSo5Bm/xmuHkwb4/uQglBwnaSqEr6YkL9xLMoNsQaJ1TAvTrEaZLNhWzN8iaPyKZMJEzPLX1NgeEx9AEae39N+NsJ LSGO@jinjinzhong
至此,我們就可以實(shí)現(xiàn)不用輸密碼克隆遠(yuǎn)程倉庫了:
cd /d
git clone [email protected]:/home/testgit/sample.git lsgogit
命令運(yùn)行完后,lsgogit現(xiàn)在就是一個(gè)空的倉庫了,現(xiàn)在我們可以在該倉庫下添加文件,然后push到遠(yuǎn)程倉庫了。
cd lsgogit
touch index.php
git add index.php
git commit -m "test commit"
git push origin master
如果在這里推送失敗了,極有可能是因?yàn)榉?wù)器的權(quán)限問題,就比如之前我們建的 testgit 文件夾,在這里我的解決方法是:
chown -R git:git testgit
將testgit文件夾以及下面的子文件夾都賦給了git,這樣就保證了推送成功。
第一次push可能會(huì)有一些提示,因?yàn)槁惆姹編爝€什么都沒有,你可能需要 git push origin master寫全命令,之后就沒必要了,直接 git push 就可以了。
到目前為止,我們完成了第一個(gè)任務(wù),實(shí)現(xiàn)了一個(gè)共享平臺(tái),既可拉取數(shù)據(jù),又可以推送數(shù)據(jù)。
四、實(shí)現(xiàn)自動(dòng)同步到站點(diǎn)目錄(www)
就比如剛才我們往遠(yuǎn)程倉庫推送了index.PHP文件,雖然提示推送成功,但是我們現(xiàn)在在服務(wù)器端還看不到效果,心理總是不爽。又比如我寫了個(gè)html頁面,我想在站點(diǎn)中馬上看到,那自動(dòng)同步就派上用場了。
自動(dòng)同步功能用到的是 git 的鉤子功能,
服務(wù)器端:進(jìn)入裸倉庫:/home/testgit/sample.git
cd /home/testgit/sample.git
cd hooks
//這里我們創(chuàng)建post-receive文件
vim post-receive
//在該文件里輸入以下內(nèi)容
#!/bin/bash
git --work-tree=/home/www checkout -f
//保存退出后,將該文件用戶及用戶組都設(shè)置成git
chown git:git post-receive
//由于該文件其實(shí)就是一個(gè)shell文件,我們還應(yīng)該為其設(shè)置可執(zhí)行權(quán)限
chmod +x post-receive
現(xiàn)在我們可以在本地計(jì)算機(jī)中修改index.php文件,或者添加一個(gè)新文件,提交到遠(yuǎn)程倉庫,然后到/home/www下面,看看有???有我們剛才提交的文件。
如果你在Git推送的工程中發(fā)現(xiàn)推送成功 但是在www目錄下并沒有自己的代碼,這時(shí)候你可要注意了:這是由于文件夾的權(quán)限的原因造成的! 假設(shè)你的www目錄的所屬的用戶組為root,你可以將你的git用戶加入這個(gè)組;并給git添加寫入權(quán)限,或者其他解決方法,反正你要服務(wù)器上的git用戶有權(quán)限進(jìn)入www文件夾。
現(xiàn)在終于掌握了,有點(diǎn)小高興。
網(wǎng)站欄目:搭建Git服務(wù)器并實(shí)現(xiàn)自動(dòng)同步到Web站點(diǎn)目錄
分享URL:http://m.fisionsoft.com.cn/article/cdpgpde.html


咨詢
建站咨詢
