最近在做博客的時(shí)候,用到了其他的themes,因?yàn)榕渲?,所以需要修改themes里面的代碼,這時(shí)候有兩種做法,一種是直接把代碼下到本地,然后將代碼直接拷貝項(xiàng)目中,另一種是用git做管理,項(xiàng)目中添加子項(xiàng)目。我先做的是先fork該theme一份,然后git我fork下來的這個(gè)項(xiàng)目。具體做法如下
添加子項(xiàng)目
git submodule add [address]
$ git submodule add https://github.com/chaconinc/DbConnector
Cloning into 'DbConnector'...
remote: Counting objects: 11, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 11 (delta 0), reused 11 (delta 0)
Unpacking objects: 100% (11/11), done.
Checking connectivity... done.
默認(rèn)情況下,子模塊會(huì)將子項(xiàng)目放到一個(gè)與倉(cāng)庫(kù)同名的目錄中,本例中是 “DbConnector”。 如果你想要放到其他地方,那么可以在命令結(jié)尾添加一個(gè)不同的路徑。
自動(dòng)初始化并更新倉(cāng)庫(kù)中的每一個(gè)子模塊
$ git clone --recursive https://github.com/chaconinc/MainProject
Cloning into 'MainProject'...
remote: Counting objects: 14, done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 14 (delta 1), reused 13 (delta 0)
Unpacking objects: 100% (14/14), done.
Checking connectivity... done.
Submodule 'DbConnector' (https://github.com/chaconinc/DbConnector) registered for path 'DbConnector'
Cloning into 'DbConnector'...
remote: Counting objects: 11, done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 11 (delta 0), reused 11 (delta 0)
Unpacking objects: 100% (11/11), done.
Checking connectivity... done.
Submodule path 'DbConnector': checked out 'c3f01dc8862123d317dd46284b05b6892c7b29bc'
在包含子模塊的項(xiàng)目上工作
如果我們?cè)谥黜?xiàng)目中提交并推送但并不推送子模塊上的改動(dòng),其他嘗試檢出我們修改的人會(huì)遇到麻煩,因?yàn)樗麄儫o法得到依賴的子模塊改動(dòng)。 那些改動(dòng)只存在于我們本地的拷貝中。
為了確保這不會(huì)發(fā)生,你可以讓 Git 在推送到主項(xiàng)目前檢查所有子模塊是否已推送。 git push 命令接受可以設(shè)置為 “check” 或 “on-demand” 的 --recurse-submodules 參數(shù)。 如果任何提交的子模塊改動(dòng)沒有推送那么 “check” 選項(xiàng)會(huì)直接使 push 操作失敗。
$ git push --recurse-submodules=check
The following submodule paths contain changes that can
not be found on any remote:
DbConnector
Please try
git push --recurse-submodules=on-demand
or cd to the path and use
git push
to push them to a remote.
如你所見,它也給我們了一些有用的建議,指導(dǎo)接下來該如何做。 最簡(jiǎn)單的選項(xiàng)是進(jìn)入每一個(gè)子模塊中然后手動(dòng)推送到遠(yuǎn)程倉(cāng)庫(kù),確保它們能被外部訪問到,之后再次嘗試這次推送。
另一個(gè)選項(xiàng)是使用 “on-demand” 值,它會(huì)嘗試為你這樣做。
$ git push --recurse-submodules=on-demand
Pushing submodule 'DbConnector'
Counting objects: 9, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (9/9), 917 bytes | 0 bytes/s, done.
Total 9 (delta 3), reused 0 (delta 0)
To https://github.com/chaconinc/DbConnector
c75e92a..82d2ad3 stable -> stable
Counting objects: 2, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 266 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
To https://github.com/chaconinc/MainProject
3d6d338..9a377d1 master -> master
如你所見,Git 進(jìn)入到 DbConnector 模塊中然后在推送主項(xiàng)目前推送了它