Hexo歷險(xiǎn)記之九Git遠(yuǎn)程倉(cāng)庫(kù)

前言

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ì)劃秕噪!

Hexo歷險(xiǎn)記之九Git遠(yuǎn)程倉(cāng)庫(kù)

其實(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)換。

image-20210530142928758
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?
image-20220729115401064

卸載低版本

示例服務(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?
image-20220729121158337

從結(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:不檢查直接下載
image-20220729125101943

安裝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-packgit-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
image-20220729143509855

現(xiàn)在,已經(jīng)將博客完整地推送到了遠(yuǎn)程服務(wù)器上钟病,但是還無法直接訪問萧恕,下一篇刚梭,我會(huì)演示如何安裝并使用Nginx實(shí)現(xiàn)端口轉(zhuǎn)發(fā),讓你能夠隨時(shí)隨地訪問博客內(nèi)容票唆。

感謝

感謝過去的好奇朴读,也幸好有現(xiàn)在的重溫,為了能成為更好的自己走趋。

  1. 使用 Git Hook 自動(dòng)部署 Hexo 到個(gè)人 VPS
  2. "remote:error:refusing to update checked out branch:refs/heads/master"的解決辦法
  3. git init 和git –bare init 的具體區(qū)別
  4. git-upload-pack:command not found問題
  5. centos7下git的安裝和配置
  6. centos7.4git安裝
  7. linux類似于Windows的桌面快捷方式
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末衅金,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子簿煌,更是在濱河造成了極大的恐慌氮唯,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姨伟,死亡現(xiàn)場(chǎng)離奇詭異惩琉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)夺荒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門琳水,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人般堆,你說我怎么就攤上這事在孝。” “怎么了淮摔?”我有些...
    開封第一講書人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵私沮,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我和橙,道長(zhǎng)仔燕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任魔招,我火速辦了婚禮晰搀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘办斑。我一直安慰自己外恕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開白布乡翅。 她就那樣靜靜地躺著鳞疲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蠕蚜。 梳的紋絲不亂的頭發(fā)上尚洽,一...
    開封第一講書人閱讀 52,785評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音靶累,去河邊找鬼腺毫。 笑死癣疟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的潮酒。 我是一名探鬼主播睛挚,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼澈灼!你這毒婦竟也來了竞川?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤叁熔,失蹤者是張志新(化名)和其女友劉穎委乌,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荣回,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遭贸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了心软。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片壕吹。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖删铃,靈堂內(nèi)的尸體忽然破棺而出耳贬,到底是詐尸還是另有隱情,我是刑警寧澤猎唁,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布咒劲,位于F島的核電站,受9級(jí)特大地震影響诫隅,放射性物質(zhì)發(fā)生泄漏腐魂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一逐纬、第九天 我趴在偏房一處隱蔽的房頂上張望蛔屹。 院中可真熱鬧,春花似錦豁生、人聲如沸兔毒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽眼刃。三九已至,卻和暖如春摇肌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背仪际。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工围小, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昵骤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓肯适,卻偏偏與公主長(zhǎng)得像变秦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子框舔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容