亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Git子模塊功能使用實踐

wind5o / 3109人閱讀

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

背景

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

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

回顧

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

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

思路

首先,理了一下思路,新下載的hexo-theme-matery項目是不應該直接劃為子模塊的,因為它的遠程關聯(lián)是github中原作者的項目,我對其的修改不可能直接提交到人家那里,也提交不上去,所以我首先應該有一份自己的關于hexo-theme-matery項目的拷貝,無論是本地git還是遠程倉庫,都是自己的,所以先進入到themes/hexo-theme-matery目錄,把git初始化刪掉(后來想到這里其實不用直接把git初始化刪掉,只要把遠程倉庫關聯(lián)改成我自己的就可以了,因為在本地git的提交都是我自己的,只要同步到自己的遠程倉庫就可以了)

刪除git初始化(使一個項目脫離git的管理)

rm -rf ./.git

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

由于遠端建的是空項目,所以可以毫無沖突的直接push并建立默認分支設置(加參數(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 git@git.coding.net:daemonG/my-hexo-theme-matery.git
git push -u origin master

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

照貓畫虎地進行了如下的操作

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

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

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

git submodule add . theme-matery

還不對,提示子模塊必須是一個絕對路徑的目錄,修改為

git submodule add ./ theme-matery

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

git submodule remove theme-matery

提示并沒有remove這個命令,并提示了我有哪些關于子模塊的命令可用,于是

git submodule deinit

提示需要對全部文件進行子模塊撤銷

git submodule deinit --all

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

git submodule deinit --all -f

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

rm -rf .gitmodules

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

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

同樣提示了剛才犯的一個錯誤,指定的子模塊要以絕對路徑給出

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

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

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

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

emmmmm...

解決

靈光一閃,有了辦法

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

git submodule add git@git.coding.net:daemonG/my-hexo-theme-matery.git themes/my-hexo-theme-matery

完美,效果是我想要的

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

先試一下

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

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

難道是子模塊的修改沒被git管理到?

git submodule add .
git add . --recursive

呃,這都是無用操作

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

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

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

所以,根項目想要把子模塊的修改一并作為主項目的一部分進行提交,需要察覺到子模塊中的commit號改變

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

這樣再回到主項目,子模塊的提交就一并提交到主項目的遠程了,當然子項目還是“自治”的,子模塊的提交還是子模塊的提交,它也是一個獨立的git項目

總結(jié)

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

補充

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

子模塊常用命令

改動子模塊

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

核心步驟:進到子模塊目錄進行提交,再回到父模塊項目再次提交

更新子模塊

方式一

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

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

進入到子模塊目錄中正常更新

cd 子模塊
git pull

下載包含子模塊的git項目

遞歸下載,同時下載父模塊git項目并遞歸檢查其包含的子模塊git項目一并下載

git clone 項目地址 --recursive

先下載父模塊項目,下載后如果父項目包含子模塊則會有對應子項目名稱的空目錄,進入子模塊目錄初始化子模塊

git clone 項目地址
cd 子模塊目錄
git submodule init
git submodule update

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

移除子模塊

git不支持直接刪除子模塊

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

待補充

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

hexo優(yōu)缺點 優(yōu)點

高度可定制化

支持二次開發(fā)

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

滿足用戶極客心理的訴求

主題拓展性強,有活躍的群體在豐富著可用的主題

缺點

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

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

依賴于git、git遠程倉庫和pages服務,如果想通過自己的域名訪問博客還依賴域名服務(以及域名租用的費用)

使用建議

對博客源項目進行git獨立項目備份

因為使用hexo-deployer發(fā)布到遠端git倉庫的是對源項目進行編譯后的文件,與原項目有著完全不同的目錄格式,一旦源項目丟失,無法通過已經(jīng)發(fā)布的遠程git項目逆向生成

對使用到的主題項目進行獨立項目備份

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

對每一次的博客變動在本地發(fā)布測試通過后再向遠端部署

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

hexo s

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

hexo s -p 4001

經(jīng)本地驗證無誤,符合改動預期后再發(fā)布遠程

hexo g -d

其他情況

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

原文地址

參考鏈接

使用Git Submodule管理子模塊

Git 工具 - 子模塊

Git Submodule的使用

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/6892.html

相關文章

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

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

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

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

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

    摘要:一前言上節(jié)我們主要應用了部分模塊功能,本節(jié)我們再演示下常用的功能,使用,并發(fā)布到阿里云,就完成了系統(tǒng)的教程。本身支持很好的的開發(fā)體驗,其也集成了測試功能,但這個不是我推薦的,自行百度調(diào)試。 一、前言 上節(jié)我們主要應用了部分nodejs模塊功能,本節(jié)我們再演示下nodejs常用的debug功能,git使用,并發(fā)布到阿里云,就完成了 0.*系統(tǒng)的教程。 GIT:https://gith...

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

    摘要:一前言上節(jié)我們主要應用了部分模塊功能,本節(jié)我們再演示下常用的功能,使用,并發(fā)布到阿里云,就完成了系統(tǒng)的教程。本身支持很好的的開發(fā)體驗,其也集成了測試功能,但這個不是我推薦的,自行百度調(diào)試。 一、前言 上節(jié)我們主要應用了部分nodejs模塊功能,本節(jié)我們再演示下nodejs常用的debug功能,git使用,并發(fā)布到阿里云,就完成了 0.*系統(tǒng)的教程。 GIT:https://gith...

    Nino 評論0 收藏0
  • 從零開始打造個人專屬命令行工具集——yargs完全指南

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

    wanghui 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<