前言
Git環(huán)境之前我們已經(jīng)在本地安裝過了汇四,現(xiàn)在也可以用SSH連接到服務(wù)器上了接奈,那么接下來就是要在服務(wù)器上面安裝Git,并且建立一個(gè)遠(yuǎn)程倉(cāng)庫(kù)來幫助我們完成部署過程通孽。
這篇文章序宦,我會(huì)告訴你如何升級(jí)Linux系統(tǒng)的Git版本,以及建立遠(yuǎn)程倉(cāng)庫(kù)背苦,用鉤子實(shí)現(xiàn)分離倉(cāng)庫(kù)和文件內(nèi)容互捌,最后用一條命令行完成部署Hexo博客。
時(shí)隔四年行剂,重啟Hexo歷險(xiǎn)計(jì)劃秕噪!
其實(shí)在本系列的第三篇文章中,已經(jīng)與伙伴們?cè)敿?xì)解釋了如何安裝Git環(huán)境硼讽,可能當(dāng)時(shí)還不甚理解巢价。我也不是故意賣關(guān)子牲阁,說不用著急配置他固阁,而是因?yàn)橹挥械搅诉@個(gè)需要遠(yuǎn)程部署的時(shí)候,才是真的需要使用他城菊。一語帶過我是解釋不清的备燃,而詳細(xì)展開又會(huì)影響到安裝Hexo的理解,所以才放到這里凌唬。
張三有話說
張三:我有問題并齐,你不給我解答,我就不看你叨叨的這一堆東西了客税。明明SSH也是可以復(fù)制文件的啊况褪,為什么還要用Git呢?
君匡:因?yàn)槲覀円肎it實(shí)現(xiàn)版本控制啊更耻,編寫完一篇博客后测垛,提交部署,其實(shí)只是需要更新這一篇內(nèi)容吧秧均,其他內(nèi)容都不會(huì)涉及改動(dòng)的食侮。雖然用SCP命令也可以復(fù)制渲染頁面,但是就會(huì)缺少版本管理的功能目胡,發(fā)生文件丟失锯七,缺損,當(dāng)我們想要找回之前刪除的一句話時(shí)誉己,連回滾文件都做不到眉尸。
張三:好吧好吧,你說的有道理。那么我用低版本的Git也不行噪猾,非得要我升級(jí)地消?
君匡:其實(shí)沒必要非得追求最新版的Git,低版本的Git也可以實(shí)現(xiàn)版本控制的畏妖,比如1.8.*
脉执。但是過低的版本會(huì)缺少功能且有安全隱患,比如CVE-2022-24765戒劫、CVE-2022-24767
就是低版本Git無法抵御的問題半夷,只有升級(jí)到2.35.2
才能起到限制作用,所以建議你升級(jí)Git迅细。
張三:那么巫橄,我們?yōu)槭裁匆獎(jiǎng)?chuàng)建遠(yuǎn)程倉(cāng)庫(kù)呢?明明本地已經(jīng)有一個(gè)倉(cāng)庫(kù)了呀茵典,還要單獨(dú)配置真的很麻煩湘换,難道不能夠省略么?
君匡:必須使用Git建立一個(gè)遠(yuǎn)程倉(cāng)庫(kù)统阿,我們才可以將本地渲染出來的文章頁面用命令傳輸?shù)椒?wù)器上彩倚,而這種傳輸方式以后是經(jīng)常用的。單獨(dú)配置遠(yuǎn)程倉(cāng)庫(kù)則是為了能夠保存文件變動(dòng)記錄的同時(shí)扶平,將具體的文件也保存到路徑里帆离。
張三:行,那我就再看看你叨叨的這一堆東西结澄。
君匡:(/和藹笑/握拳)
本地配置Git
之前已經(jīng)在本地安裝過Git環(huán)境了哥谷,那么接下來就是要配置Git了。
在拉取和上傳文件的時(shí)候麻献,Git會(huì)記錄是誰發(fā)起了變動(dòng)们妥,而標(biāo)識(shí)的方式就是用名字和郵箱,所以必須全局配置勉吻。
#?格式?git?config?--global?user.name?"yourname"
#?格式?git?config?--global?user.email?youremail@example.com
git?config?--global?user.name?"junkuang"
git?config?--global?user.email?123@qq.com
為了以后上傳博客時(shí)候不會(huì)出現(xiàn)下圖警告监婶,就再加上一條禁用自動(dòng)轉(zhuǎn)換。
git?config?--global?core.autocrlf?false
在Git 客戶端上設(shè)置緩沖區(qū)大小餐曼,以增加倉(cāng)庫(kù)對(duì)單個(gè)文件大小的限制压储,當(dāng)推送大量數(shù)據(jù)時(shí)尤為有用。
git?config?--global?http.postBuffer?157286400
服務(wù)器升級(jí)Git
正如在前言所說源譬,如果你不升級(jí)集惋,低版本的也是可以正常實(shí)現(xiàn)功能的,但是在駭客的眼里就幾乎是不設(shè)防的踩娘。如果你認(rèn)為在遠(yuǎn)程服務(wù)器上又沒有什么重要的東西刮刑,不想費(fèi)力升級(jí)喉祭,那么你可以直接跳到建立遠(yuǎn)程倉(cāng)庫(kù)的部分。
在安裝新版本的時(shí)候雷绢,你其實(shí)有兩個(gè)選擇泛烙,一個(gè)就是仍然使用包管理進(jìn)行安裝,好處是方便快捷翘紊,缺點(diǎn)就是無法指定小版本蔽氨。另一個(gè)就是直接從網(wǎng)站上下載壓縮包蝠检,直接編譯安裝摇予,缺點(diǎn)是操作繁雜份氧,優(yōu)點(diǎn)是可以任意選擇版本喷面,也可以離線。
查看版本
運(yùn)行命令查看Git版本代咸,發(fā)現(xiàn)自帶了1.8.3.1
?版本的驹碍。
git?--version?
卸載低版本
示例服務(wù)器的系統(tǒng)為CentOS背犯,所以包管理器就是yum
柳琢,如果你是其他的LInux系統(tǒng)绍妨,那么你就用你的包管理器來卸載應(yīng)用。
:?卸載低版本的?Git
yum?remove?git?-y?
安裝新版本-使用包管理器
新增Rpm第三方源IUS柬脸,然后使用yum
即可安裝他去。
#?新增Rpm第三方源IUS
yum?install?-y?\
?https://repo.ius.io/ius-release-el7.rpm?\
?https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
#?搜尋Git2.*版本
yum?search?git2??--color=auto?
從結(jié)果可以知道,現(xiàn)在倉(cāng)庫(kù)里可以安裝的版本為2.36
肖粮,于是直接用命令安裝即可孤页。
#?安裝git2.36
yum?install?-y?git236
安裝新版本-使用安裝包
下載安裝包
在任意可以聯(lián)網(wǎng)的機(jī)器打開git的下載網(wǎng)頁尔苦,以安裝2.35.2
版本為例涩馆,下載安裝包git-2.35.2.tar.gz
。也可以直接在服務(wù)器上用wget
命令直接下載允坚。
:?下載到文件夾/usr/local/git里魂那,會(huì)自動(dòng)創(chuàng)建目錄
wget?-P?/usr/local/git??https://www.kernel.org/pub/software/scm/git/git-2.35.2.tar.gz?
:?如果上一條報(bào)錯(cuò)了,就加上不檢查的參數(shù)重新下載
wget?-P?/usr/local/git??--no-check-certificate??https://www.kernel.org/pub/software/scm/git/git-2.35.2.tar.gz?
-
-P
:指定下載目錄稠项,于是下載下來就是/usr/local/git/git-2.35.2.tar.gz
-
--no-check-certificate
:不檢查直接下載
安裝Git
在服務(wù)器上先安裝依賴涯雅,然后切換到存放目錄,解壓后配置安裝路徑展运,接著編譯并安裝活逆。
:?安裝依賴
yum?install?curl-devel?expat-devel?gettext-devel?openssl-devel?zlib-devel?gcc?perl-ExtUtils-MakeMaker?-y?
:?切換到存放目錄
cd?/usr/local/git?
:?解壓到同級(jí)目錄
tar?-zxvf?git-2.22.1.tar.gz?
:?進(jìn)入路徑,此時(shí)可刪除安裝包拗胜,也可以留作備份
cd?git-2.22.1?
:?配置git安裝路徑
./configure?prefix=/usr/local/git/?
:?編譯并且安裝
make?&&?make?install?
添加到環(huán)境變量
修改服務(wù)器上的/etc/profile
文件蔗候,添加內(nèi)容如下,目的是在任何目錄都可以使用git
命令埂软。
注意:一定要備份文件/etc/profile
锈遥,否則很可能就要重裝系統(tǒng)了!!所灸!
export?PATH=/usr/local/git/bin:$PATH
修改后重新加載該配置文件丽惶,在任意目錄調(diào)用git
命令,測(cè)試是否生效爬立。
source?etc/profile
進(jìn)行配置軟連接
如果/usr/bin/
目錄下沒有git-upload-pack
和git-receive-pack
文件钾唬,那么還要多設(shè)置軟連接,不然后面克隆時(shí)有可能會(huì)報(bào)錯(cuò)侠驯。
:?格式?ln?[-sf]?源文件?目標(biāo)文件
ln?-s?/usr/local/git/bin/git-upload-pack?/usr/bin/git-upload-pack
ln?-s?/usr/local/git/bin/git-receive-pack?/usr/bin/git-receive-pack?
-
-s
:?就表示創(chuàng)建軟鏈接了知纷,不加的話就是創(chuàng)建硬鏈接 -
-f
:?表示存在的時(shí)候刪除再創(chuàng)建
建立遠(yuǎn)程倉(cāng)庫(kù)
裸倉(cāng)庫(kù)和空倉(cāng)庫(kù)
新建立一個(gè)倉(cāng)庫(kù)時(shí),是需要區(qū)分該倉(cāng)庫(kù)是裸倉(cāng)庫(kù)還是空倉(cāng)庫(kù)陵霉。
一般來說琅轧,裸倉(cāng)庫(kù)是不儲(chǔ)存文件的,所有變動(dòng)都會(huì)以變動(dòng)記錄的方式存儲(chǔ)在倉(cāng)庫(kù)里踊挠;而空倉(cāng)庫(kù)是既有變動(dòng)記錄又有具體文件的乍桂,但是其他主機(jī)就不能夠提交信息內(nèi)容給master
分支了。
:?新建空倉(cāng)庫(kù)
git?init?demo1.git
:?新建裸倉(cāng)庫(kù)
git?init?--bare?demo1.git
那可就難過了效床,因?yàn)槲覀円诜?wù)器上面建立一個(gè)既能儲(chǔ)存文件還要能夠接受信息提交的倉(cāng)庫(kù)啊睹酌。
不過沒關(guān)系,在裸倉(cāng)庫(kù)接受信息后用一個(gè)鉤子文件
指定具體文件的位置就可以解決了剩檀。
新建用戶
由于Linux系統(tǒng)的限制憋沿,所有文件都要?dú)w屬到用戶的權(quán)限上來,以此維護(hù)系統(tǒng)關(guān)鍵文件不會(huì)輕易被改動(dòng)沪猴。這里要求新建一個(gè)用戶辐啄,目的是為了更好地管理文件權(quán)限,尤其是在下一篇运嗜,我會(huì)詳細(xì)說如何用Nginx
實(shí)現(xiàn)端口轉(zhuǎn)發(fā)壶辜。那時(shí)候這個(gè)新建的用戶就會(huì)起到大作用了。
新建一個(gè)用戶担租,用戶名以keen
為例砸民。配置密碼后,將他添加到用戶組里以獲得sudo權(quán)限奋救。
:?新增用戶
adduser?keen
:?修改密碼岭参,之后要輸入兩次同樣的密碼
passwd?keen?
:?添加到wheel用戶組里,獲取sudo的權(quán)限
usermod?-aG?wheel?keen?
建立裸倉(cāng)庫(kù)
在服務(wù)器上切換到剛剛新增的用戶尝艘,創(chuàng)建一個(gè)項(xiàng)目真實(shí)存在的目錄演侯,再創(chuàng)建一個(gè)倉(cāng)庫(kù)目錄。
:?切換用戶
su?keen
:?項(xiàng)目存在的真實(shí)目錄
mkdir?-p?/home/keen/projects/blog
:?項(xiàng)目倉(cāng)庫(kù)目錄
mkdir?-p?/home/keen/repos
:?進(jìn)入倉(cāng)庫(kù)目錄并
cd?/home/keen/repos
:?創(chuàng)建一個(gè)名為blog.git的裸露倉(cāng)庫(kù)
git?init?--bare?blog.git?
測(cè)試Git倉(cāng)庫(kù)是否可用利耍,在本地創(chuàng)建空白文件夾蚌本,執(zhí)行如下命令盔粹。
:?格式?git?clone?倉(cāng)庫(kù)目錄
git?clone?keen@39.96.12.167:/home/keen/repos/blog.git
:?Cloning?into?'myblog'...
:?warning:?You?appear?to?have?cloned?an?empty?repository.
輸入密碼之后,如果能把空倉(cāng)庫(kù)拉取下來程癌,就說明 git 倉(cāng)庫(kù)搭建成功了舷嗡。
建立鉤子文件
使用的是 post-receive
,這個(gè)會(huì)在我們每次推送消息之后嵌莉,把部署目錄更新到博客的最新生成狀態(tài)进萄,這樣便可以達(dá)到部署最新博客的目的。關(guān)于 hooks
的詳情內(nèi)容可以參考這里锐峭。
先修改下面的內(nèi)容中鼠,注意具體地址要跟實(shí)際情況一致!
#!/bin/sh
git?--work-tree=/home/keen/projects/blog?--git-dir=/home/keen/repos/blog.git?checkout?-f
-
--work-tree
:指定實(shí)際文件存儲(chǔ)目錄 -
--git-dir
:指定倉(cāng)庫(kù)目錄
接著用如下命令創(chuàng)建鉤子文件沿癞,先按i
援雇,底下出現(xiàn)一個(gè)插入的文字。將上面的內(nèi)容粘貼進(jìn)來椎扬,之后按esc鍵
再輸入:wq
保存并退出惫搏。
:?建立鉤子文件
vim?/home/keen/repos/blog.git/hooks/post-receive
不要忘記設(shè)置權(quán)限,不然是不會(huì)生效的蚕涤。
:?用keen用戶賦予post-receive權(quán)限
chmod?+x?/home/keen/repos/blog.git/hooks/post-receive
:?退出到root
exit?
:?用root用戶賦予權(quán)限
chown?-R?keen:keen?/home/keen/repos/blog.git/
chown?-R?keen:keen?/home/keen/projects/blog/
注意:如果你是在本地Windows上創(chuàng)建的文件筐赔,修改后再上傳到服務(wù)器,那么你需要使用工具dos2unix
轉(zhuǎn)換回車符揖铜。
yum?install?-y?dos2unix
dos2unix?post-receive
Hexo博客部署
經(jīng)過上面的操作茴丰,遠(yuǎn)程倉(cāng)庫(kù)已經(jīng)成功建立起來了。我們接下來就是要把本地的變動(dòng)推送到遠(yuǎn)程服務(wù)器天吓,實(shí)現(xiàn)Hexo博客部署贿肩。
致敬官網(wǎng)hexo-deployer-git。
一般來說博客初始化的時(shí)候失仁,自己就會(huì)安裝這個(gè)插件尸曼。即使沒有,用下面的命令也可以安裝插件萄焦。
npm?install?hexo-deployer-git?--save
修改博客根目錄的配置文件,可以同時(shí)部署多個(gè)倉(cāng)庫(kù)冤竹。
deploy:
??-?type:?git
?repo:?
????????ali1:?git@39.96.12.167:/home/keen/repos/blog.git
????????ali2:?git@39.96.12.168:/home/keen/repos/blog.git
從此以后拂封,在編寫博客后,就可以直接在博客根目錄運(yùn)行命令鹦蠕,同時(shí)發(fā)布多個(gè)博客了冒签。
hexo?deploy
現(xiàn)在,已經(jīng)將博客完整地推送到了遠(yuǎn)程服務(wù)器上钟病,但是還無法直接訪問萧恕,下一篇刚梭,我會(huì)演示如何安裝并使用Nginx
實(shí)現(xiàn)端口轉(zhuǎn)發(fā),讓你能夠隨時(shí)隨地訪問博客內(nèi)容票唆。
感謝
感謝過去的好奇朴读,也幸好有現(xiàn)在的重溫,為了能成為更好的自己走趋。
- 使用 Git Hook 自動(dòng)部署 Hexo 到個(gè)人 VPS
- "remote:error:refusing to update checked out branch:refs/heads/master"的解決辦法
- git init 和git –bare init 的具體區(qū)別
- git-upload-pack:command not found問題
- centos7下git的安裝和配置
- centos7.4git安裝
- linux類似于Windows的桌面快捷方式