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

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