成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Git子模塊功能使用實(shí)踐

wind5o / 3050人閱讀

摘要:但也免不了此時(shí)的結(jié)論就是最佳的方案,可能還有一些操作是錯(cuò)誤的,或者存在隱患的,關(guān)于子模塊的使用還在進(jìn)一步的實(shí)踐和學(xué)習(xí)中。

背景

整個(gè)事情源于某天心血來(lái)潮又寫了篇博客,當(dāng)準(zhǔn)備使用hexo發(fā)表時(shí),突然想到一個(gè)問(wèn)題之前雖然做到對(duì)于博客項(xiàng)目的git備份了,但是最近新?lián)Q的主題配置修改也備份了嗎?,有點(diǎn)像強(qiáng)迫癥出門后思考房門有沒(méi)有鎖好的感覺(jué)。

背景是這樣的:最初我剛接觸hexo的時(shí)候,覺(jué)得發(fā)現(xiàn)了寶貝,它是個(gè)不錯(cuò)的靜態(tài)博客生成器,風(fēng)格偏極客風(fēng),雖說(shuō)是博客工具,但要拿給不會(huì)技術(shù)的人可能用起來(lái)還比較蹩腳,因?yàn)槠潆m然聲稱使用簡(jiǎn)便,只需要快速地搭建環(huán)境,敲敲命令,就可以在網(wǎng)頁(yè)上展現(xiàn)出漂亮的個(gè)人博客網(wǎng)站來(lái),但其搭建環(huán)境基于Node.js,命令又依賴于git,還得把本地的博客源文件編譯成瀏覽器可解讀的靜態(tài)文件發(fā)布到遠(yuǎn)程git倉(cāng)庫(kù),還得使用支持pages服務(wù)的git倉(cāng)庫(kù),比如github的github pages或coding pages。所以我當(dāng)初剛接觸的時(shí)候,對(duì)其原理也是一知半解,僅停留在”會(huì)用“程度,但隨著時(shí)間的推移,免不了發(fā)生一些其他變動(dòng),比如換電腦,這時(shí)候我就發(fā)現(xiàn),如果沒(méi)有對(duì)本地博客項(xiàng)目進(jìn)行版本庫(kù)的管理和備份,那么只要硬盤上的博客項(xiàng)目文件夾出現(xiàn)丟失或者換電腦,就麻煩了。當(dāng)然,換電腦還算好,只要用優(yōu)盤把舊電腦里的文件夾拷貝過(guò)去,在新電腦搭建相同的環(huán)境,就能恢復(fù)使用了,但這方法不夠優(yōu)雅,不夠geek。于是就在網(wǎng)上查hexo博客備份的方法,最后結(jié)合查到的方式和自己的推敲嘗試,記錄了一篇我是如何備份博客的

回顧

但今天再看,當(dāng)時(shí)只解決了博客“根項(xiàng)目”的保存,最近換了新的主題,主題的配置文件改了一大通,當(dāng)然就是根據(jù)自己進(jìn)行的個(gè)性化修改,突然想到,主題項(xiàng)目是博客項(xiàng)目themes文件夾的一個(gè)子項(xiàng)目,是進(jìn)到themes目錄,通過(guò)git clone下載到本地的另一個(gè)git項(xiàng)目。問(wèn)題來(lái)了,git項(xiàng)目中嵌套git項(xiàng)目,事情看上去不那么簡(jiǎn)單。好在之前就了解過(guò)子項(xiàng)目git submodule的概念,知道這是那塊的東西,但當(dāng)時(shí)剛接觸子項(xiàng)目的時(shí)候覺(jué)得有點(diǎn)復(fù)雜,就沒(méi)再理會(huì),現(xiàn)在發(fā)現(xiàn)逃不過(guò)了,這是最好也是最恰當(dāng)?shù)慕鉀Q方案,所以再次開(kāi)始了搜查。

先是根據(jù)猜想結(jié)合自己使用git的經(jīng)驗(yàn)進(jìn)行嘗試

思路

首先,理了一下思路,新下載的hexo-theme-matery項(xiàng)目是不應(yīng)該直接劃為子模塊的,因?yàn)樗倪h(yuǎn)程關(guān)聯(lián)是github中原作者的項(xiàng)目,我對(duì)其的修改不可能直接提交到人家那里,也提交不上去,所以我首先應(yīng)該有一份自己的關(guān)于hexo-theme-matery項(xiàng)目的拷貝,無(wú)論是本地git還是遠(yuǎn)程倉(cāng)庫(kù),都是自己的,所以先進(jìn)入到themes/hexo-theme-matery目錄,把git初始化刪掉(后來(lái)想到這里其實(shí)不用直接把git初始化刪掉,只要把遠(yuǎn)程倉(cāng)庫(kù)關(guān)聯(lián)改成我自己的就可以了,因?yàn)樵诒镜豨it的提交都是我自己的,只要同步到自己的遠(yuǎn)程倉(cāng)庫(kù)就可以了)

刪除git初始化(使一個(gè)項(xiàng)目脫離git的管理)

rm -rf ./.git

然后再重新初始化themes/hexo-theme-matery目錄成為一個(gè)git項(xiàng)目,并關(guān)聯(lián)我遠(yuǎn)程建的空項(xiàng)目

由于遠(yuǎn)端建的是空項(xiàng)目,所以可以毫無(wú)沖突的直接push并建立默認(rèn)分支設(shè)置(加參數(shù) -u)

cd hexo-theme-matery
git init .
git add .
git commit -m "initial matery theme as a divided git project"
git remote add origin [email protected]:daemonG/my-hexo-theme-matery.git
git push -u origin master

接下來(lái)要建立子項(xiàng)目關(guān)聯(lián)了,參考了網(wǎng)上的一篇文章在 hexo 中使用 git submodules 管理主題

照貓畫虎地進(jìn)行了如下的操作

按照我對(duì)網(wǎng)上文章的理解,以為是通過(guò)如下命令,把某個(gè)文件夾變成一個(gè)項(xiàng)目并命名子項(xiàng)目為theme-matery

cd hexo-theme-matery
git add submodule . theme-matery

但發(fā)現(xiàn)提示錯(cuò)誤,發(fā)現(xiàn)是命令的參數(shù)順序錯(cuò)了,于是改正為

git submodule add . theme-matery

還不對(duì),提示子模塊必須是一個(gè)絕對(duì)路徑的目錄,修改為

git submodule add ./ theme-matery

可以了,但發(fā)現(xiàn)好像不對(duì),子模塊添加成功的提示告訴我,我敲的這個(gè)命令是在當(dāng)前目錄添加了一個(gè)theme-matery目錄,內(nèi)容是當(dāng)前目錄的所有,這并不是我想要的,于是準(zhǔn)備刪掉這次操作的產(chǎn)物

git submodule remove theme-matery

提示并沒(méi)有remove這個(gè)命令,并提示了我有哪些關(guān)于子模塊的命令可用,于是

git submodule deinit

提示需要對(duì)全部文件進(jìn)行子模塊撤銷

git submodule deinit --all

提示新建立的子模塊已經(jīng)有了git修改記錄,如果此時(shí)要撤銷子模塊,需要進(jìn)行強(qiáng)制撤銷操作

git submodule deinit --all -f

這樣發(fā)現(xiàn),新建的theme-matery文件夾消失了,但還殘留一個(gè).gitmodules文件,這是git子模塊的描述文件,既然剛才是一次失敗的嘗試,這個(gè)也刪掉

rm -rf .gitmodules

終于恢復(fù)如初了,再來(lái),繼續(xù)嘗試其他方法。既然剛才的確生成了子模塊描述文件和對(duì)應(yīng)的子項(xiàng)目,那么方向不錯(cuò),只是生成的位置和預(yù)期不符,于是我退到項(xiàng)目根路徑重新操作

cd ..
cd ..
git submodule add themes/hexo-theme-matery/ theme-matery

同樣提示了剛才犯的一個(gè)錯(cuò)誤,指定的子模塊要以絕對(duì)路徑給出

git submodule add ./themes/hexo-theme-matery/ theme-matery

這回的確在項(xiàng)目根路徑生成子模塊了,但也不對(duì),原來(lái)命令中的最后一個(gè)參數(shù)是最終生成的子模塊文件夾名稱,而不是對(duì)于子模塊定義的別名,我理解錯(cuò)了,所以還得刪掉重來(lái)

git rm theme-matery
git rm theme-matery -f
git rm .gitmodules

這我就迷茫了,到底應(yīng)該怎么添加子模塊呢,再看網(wǎng)上查的文章,里面舉的例子是把一個(gè)遠(yuǎn)程git項(xiàng)目下載到根項(xiàng)目中并作為子模塊,前提是我原來(lái)只有一個(gè)git根項(xiàng)目,然后再添加一個(gè)遠(yuǎn)程git項(xiàng)目到本地的git項(xiàng)目的一個(gè)子文件夾作為一個(gè)子模塊存在,下載+子模塊初始化兩步合并操作,但我的情況是,我本地已經(jīng)是一個(gè)git根項(xiàng)目里套著一個(gè)別人的git項(xiàng)目了,想在本地操作,把這個(gè)子git項(xiàng)目變成根git項(xiàng)目的子模塊。

emmmmm...

解決

靈光一閃,有了辦法

反正剛才已經(jīng)把本地的主題項(xiàng)目同步到遠(yuǎn)端新建的空項(xiàng)目了,所以也就是我修改過(guò)配置文件的主題項(xiàng)目已經(jīng)在遠(yuǎn)端有了備份,所以我可以把本地的刪掉,然后按照參考文章里的做法,通過(guò)下載遠(yuǎn)端項(xiàng)目到本地并初始化為子模塊的方式進(jìn)行操作了

git submodule add [email protected]:daemonG/my-hexo-theme-matery.git themes/my-hexo-theme-matery

完美,效果是我想要的

接下來(lái)還有提交的問(wèn)題,我已經(jīng)預(yù)料到這個(gè)問(wèn)題,雖然是子模塊,但肯定也存在提交的問(wèn)題,畢竟是兩個(gè)獨(dú)立的git項(xiàng)目,只是存在父子關(guān)聯(lián)關(guān)系,應(yīng)該存在多帶帶提交父項(xiàng)目、多帶帶提交子項(xiàng)目同時(shí)提交父項(xiàng)目和子項(xiàng)目三種情況

先試一下

git add .
git commit -m "add theme/matery as submodule"

在根目錄發(fā)現(xiàn)這樣提交并不會(huì)提交子模塊的修改

難道是子模塊的修改沒(méi)被git管理到?

git submodule add .
git add . --recursive

呃,這都是無(wú)用操作

再試了一下參考文章里的git commit -am "update config of submodule",也不行

感到無(wú)助的時(shí)候回歸官方文檔Git 工具 - 子模塊和另一篇文章的參考Git Submodule的使用,有一句說(shuō)法醍醐灌頂

主git倉(cāng)庫(kù)中存在.gitmodules文件,它記錄了submodule的基本信息。例如remote地址。 同時(shí)在某處記錄了主git倉(cāng)庫(kù)所用的submodule的commit號(hào)。 主git倉(cāng)庫(kù)并不同步submodule中的所有代碼,而是同步其remote地址和commit號(hào),每個(gè)clone都是根據(jù)這兩個(gè)信息自行到remote地址獲取到該commit版本的內(nèi)容。所以,如果你要更新submodule必須做上面的操作步驟。而你操作完成后,你的git倉(cāng)庫(kù)中submodule的commit號(hào)得到更新。

所以,根項(xiàng)目想要把子模塊的修改一并作為主項(xiàng)目的一部分進(jìn)行提交,需要察覺(jué)到子模塊中的commit號(hào)改變

cd ..
cd ..
git add .
git commit -m "update config of submodule"

這樣再回到主項(xiàng)目,子模塊的提交就一并提交到主項(xiàng)目的遠(yuǎn)程了,當(dāng)然子項(xiàng)目還是“自治”的,子模塊的提交還是子模塊的提交,它也是一個(gè)獨(dú)立的git項(xiàng)目

總結(jié)

雖然啰嗦了這么一大篇,主要是為了再現(xiàn)當(dāng)時(shí)的各種失敗嘗試,這樣在日后遇到問(wèn)題時(shí)能夠想起當(dāng)時(shí)的思路。但也免不了此時(shí)的結(jié)論就是最佳的方案,可能還有一些操作是錯(cuò)誤的,或者存在隱患的,關(guān)于git子模塊的使用還在進(jìn)一步的實(shí)踐和學(xué)習(xí)中。

補(bǔ)充

剛做了這樣的嘗試,博客就崩了,發(fā)布上去直接白屏,經(jīng)過(guò)多方排查,想到是我重新命名了主題項(xiàng)目的名稱,而整個(gè)hexo的設(shè)計(jì)都是約定優(yōu)于配置的,所以改動(dòng)主題項(xiàng)目名,必定導(dǎo)致配置上對(duì)不上,出現(xiàn)報(bào)錯(cuò),并且還不好定位到錯(cuò)誤,還好想到了是這里的問(wèn)題,所以把根項(xiàng)目配置文件中theme的配置項(xiàng)改為修改后的名稱,博客恢復(fù)正常了。

子模塊常用命令

改動(dòng)子模塊

cd 子模塊目錄
git add .
git commit -m "像正常修改提交git項(xiàng)目一樣操作"
git push
cd 父模塊目錄
git add .
git commit -m "提交父模塊中子模塊的改動(dòng)"
git push

核心步驟:進(jìn)到子模塊目錄進(jìn)行提交,再回到父模塊項(xiàng)目再次提交

更新子模塊

方式一

在父模塊目錄遍歷更新其下的子模塊

cd 父模塊目錄
git submodule foreach git pull
方式二

進(jìn)入到子模塊目錄中正常更新

cd 子模塊
git pull

下載包含子模塊的git項(xiàng)目

遞歸下載,同時(shí)下載父模塊git項(xiàng)目并遞歸檢查其包含的子模塊git項(xiàng)目一并下載

git clone 項(xiàng)目地址 --recursive

先下載父模塊項(xiàng)目,下載后如果父項(xiàng)目包含子模塊則會(huì)有對(duì)應(yīng)子項(xiàng)目名稱的空目錄,進(jìn)入子模塊目錄初始化子模塊

git clone 項(xiàng)目地址
cd 子模塊目錄
git submodule init
git submodule update

git submodule update用以確保子模塊更新到最新和下載完整,比如使用遞歸下載git clone 項(xiàng)目地址 --recursive時(shí)下載不全的情況

移除子模塊

git不支持直接刪除子模塊

cd 子模塊
git rm --cached 子模塊
cd 父模塊
rm -rf 子模塊
rm .gitmodules

待補(bǔ)充

總結(jié)hexo的優(yōu)點(diǎn)和缺點(diǎn)

hexo優(yōu)缺點(diǎn) 優(yōu)點(diǎn)

高度可定制化

支持二次開(kāi)發(fā)

開(kāi)源,具備維護(hù)性并可參與到功能開(kāi)發(fā)中

滿足用戶極客心理的訴求

主題拓展性強(qiáng),有活躍的群體在豐富著可用的主題

缺點(diǎn)

不穩(wěn)定,區(qū)別于知乎、簡(jiǎn)書這樣的商業(yè)產(chǎn)品,具備專業(yè)團(tuán)隊(duì)保證使用的穩(wěn)定性

使用基于配置,需要對(duì)配置規(guī)則較熟悉,否則會(huì)產(chǎn)生預(yù)料之外的錯(cuò)誤,并且不易定位到

依賴于git、git遠(yuǎn)程倉(cāng)庫(kù)和pages服務(wù),如果想通過(guò)自己的域名訪問(wèn)博客還依賴域名服務(wù)(以及域名租用的費(fèi)用)

使用建議

對(duì)博客源項(xiàng)目進(jìn)行g(shù)it獨(dú)立項(xiàng)目備份

因?yàn)槭褂胔exo-deployer發(fā)布到遠(yuǎn)端git倉(cāng)庫(kù)的是對(duì)源項(xiàng)目進(jìn)行編譯后的文件,與原項(xiàng)目有著完全不同的目錄格式,一旦源項(xiàng)目丟失,無(wú)法通過(guò)已經(jīng)發(fā)布的遠(yuǎn)程git項(xiàng)目逆向生成

對(duì)使用到的主題項(xiàng)目進(jìn)行獨(dú)立項(xiàng)目備份

因?yàn)橹黝}項(xiàng)目一般都是獨(dú)立的git項(xiàng)目,也會(huì)獨(dú)立的更新功能,如果不能很好的將其作為子模塊和博客項(xiàng)目關(guān)聯(lián)并對(duì)其進(jìn)行獨(dú)立git項(xiàng)目備份的話,在換電腦或主題項(xiàng)目變更后,很難保留用戶自己的修改

對(duì)每一次的博客變動(dòng)在本地發(fā)布測(cè)試通過(guò)后再向遠(yuǎn)端部署

因?yàn)閔exo是基于配置約定的,所以有時(shí)用戶會(huì)錯(cuò)誤的使用一些命令或配置修改,會(huì)導(dǎo)致hexo在部署到遠(yuǎn)端的時(shí)候發(fā)生錯(cuò)誤,而產(chǎn)生覆蓋遠(yuǎn)端發(fā)布文件,導(dǎo)致博客不可訪問(wèn)的問(wèn)題。所以對(duì)待hexo博客要像對(duì)待一個(gè)web項(xiàng)目一樣經(jīng)過(guò)本地測(cè)試,命令如下(s為server的首字母標(biāo)識(shí))

hexo s

如果默認(rèn)的4000端口被占用,可通過(guò)添加-p參數(shù)指定其他端口

hexo s -p 4001

經(jīng)本地驗(yàn)證無(wú)誤,符合改動(dòng)預(yù)期后再發(fā)布遠(yuǎn)程

hexo g -d

其他情況

還有可能導(dǎo)致博客無(wú)法正常訪問(wèn)的原因可能是pages服務(wù)配置不正確,或者域名不可用,域名過(guò)期等原因,需要查閱網(wǎng)上其他人的解決方案

原文地址

參考鏈接

使用Git Submodule管理子模塊

Git 工具 - 子模塊

Git Submodule的使用

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/6892.html

相關(guān)文章

  • 《Node.js在CLI下的工程化體系實(shí)踐》成都OSC源創(chuàng)會(huì)分享總結(jié)

    摘要:之后,在本地目錄生成代碼并且安裝項(xiàng)目依賴的包,最后將本次初始化生成的所有代碼自動(dòng)提交到遠(yuǎn)程倉(cāng)庫(kù)。按照城市評(píng)選,分別評(píng)選明日之子僅限男性參加和閃亮女神僅限女性參加。 背景: 隨著開(kāi)發(fā)團(tuán)隊(duì)規(guī)模不斷發(fā)展壯大,在人員增加的同時(shí)也帶來(lái)了協(xié)作成本的增加,業(yè)務(wù)項(xiàng)目越來(lái)越多,類型也各不相同。常見(jiàn)的類型有組件類、活動(dòng)類、基于React+redux的業(yè)務(wù)項(xiàng)目、RN項(xiàng)目、Node.js項(xiàng)目等等。如果想要對(duì)每...

    imingyu 評(píng)論0 收藏0
  • React工程實(shí)踐:基于React、Redux、React-Router的前端腳手架

    摘要:項(xiàng)目地址基于和的前端腳手架。目錄前言特性環(huán)境開(kāi)始工程結(jié)構(gòu)開(kāi)發(fā)調(diào)試單元測(cè)試靜態(tài)部署相關(guān)文檔致謝前言如果你是一個(gè)初學(xué)者,這個(gè)項(xiàng)目可以是很好的教程。單元測(cè)試新增一個(gè)單元測(cè)試,你只需在中創(chuàng)建文件。在腳手架中用于擴(kuò)展服務(wù)和代理。 項(xiàng)目地址: https://github.com/YutHelloWo... 基于React、Redux、[email protected]、webpack和reacts...

    wangbjun 評(píng)論0 收藏0
  • NODEJS項(xiàng)目實(shí)踐0.5 - 完結(jié)[inspector,git]

    摘要:一前言上節(jié)我們主要應(yīng)用了部分模塊功能,本節(jié)我們?cè)傺菔鞠鲁S玫墓δ?,使用,并發(fā)布到阿里云,就完成了系統(tǒng)的教程。本身支持很好的的開(kāi)發(fā)體驗(yàn),其也集成了測(cè)試功能,但這個(gè)不是我推薦的,自行百度調(diào)試。 一、前言 上節(jié)我們主要應(yīng)用了部分nodejs模塊功能,本節(jié)我們?cè)傺菔鞠耼odejs常用的debug功能,git使用,并發(fā)布到阿里云,就完成了 0.*系統(tǒng)的教程。 GIT:https://gith...

    edgardeng 評(píng)論0 收藏0
  • NODEJS項(xiàng)目實(shí)踐0.5 - 完結(jié)[inspector,git]

    摘要:一前言上節(jié)我們主要應(yīng)用了部分模塊功能,本節(jié)我們?cè)傺菔鞠鲁S玫墓δ?,使用,并發(fā)布到阿里云,就完成了系統(tǒng)的教程。本身支持很好的的開(kāi)發(fā)體驗(yàn),其也集成了測(cè)試功能,但這個(gè)不是我推薦的,自行百度調(diào)試。 一、前言 上節(jié)我們主要應(yīng)用了部分nodejs模塊功能,本節(jié)我們?cè)傺菔鞠耼odejs常用的debug功能,git使用,并發(fā)布到阿里云,就完成了 0.*系統(tǒng)的教程。 GIT:https://gith...

    Nino 評(píng)論0 收藏0
  • 從零開(kāi)始打造個(gè)人專屬命令行工具集——yargs完全指南

    摘要:自阮大神的文章發(fā)布以來(lái),有了一些改動(dòng),添加有很多有用的功能,特別是這個(gè)功能,對(duì)打造命令行工具集合非常有用,所以寫一個(gè)新版本的教程還是有必要的。 前言 使用命令行程序?qū)Τ绦騿T來(lái)說(shuō)很常見(jiàn),就算是前端工程師或者開(kāi)發(fā)gui的,也需要使用命令行來(lái)編譯程序或者打包程序 熟練使用命令行工具能極大的提高開(kāi)發(fā)效率,linux自帶的命令行工具都非常的有用,但是這些工具都是按照通用需求開(kāi)發(fā)出來(lái)的,如果有一些...

    wanghui 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<