1、剛剛git clone下來的項目,需要git submodule update --init --recursive
將依賴的子項目done下來,結果拋了個
(fatal: No url found for submodule path 'node-server' in .gitmodules)
''' 分析:爲啥會拋錯, 如提示, 檢查下.gitmodules文件裏是不是有node-server子
項目的配置內容,如果沒有請加上對應的配置即可;如果不需要這個子項目,那麼直接刪除
node-server這個子項目文件即可. 與此同時還要刪除關於node-server的緩存
(git rm --cached node-server), 然後再嘗試git submodule update --init --recursive
即可; 如果子項目還是done不下來, 麻煩檢查.gitmodules文件裏指定的子項目地址是不是正確可用. '''
2、每次更新.gitmodules文件, 必須同步下(git submodule sync), 否則識別不到.
3、如何爲一個項目添加一個子項目呢? git submodule add 項目地址, 然後push到
你的遠程倉庫(如gitlab/github啥的),你可以在項目裏看到“子項目名+@+序列號”的鏈接.
4、如何刪除submodule呢? git rm <submodule-name> || git submodule deinit <submodule-name>
5、一旦依賴的子項目過多(比如100個), 如何批量操作呢? git submodule foreach <command>
eg: git submodule foreach git checkout master
# 該命令會按照.gitmodules裏的path尋找所有的三方模塊,並在每一個模塊中都執行foreach後的命令
eg: git submodule foreach git submodule update
6、更新了子項目, 那麼父項目也需要更新. 即子項目屬於父項目的一部分, 在子項目commit後, 父也需要.
7、如何將一個包含子項目的項目所有內容都clone下來呢? 當然第1條筆記也是可以的.
git clone https://xxx.xx.xxx/xxxx/xxx.git
git submodule init && git submodule update
# 下面這一句的效果和上面三條命令的效果是一樣的,多加了個參數 `--recursive`
git clone https://xxx.xx.xxx/xxxx/xxx.git --recursive
8、git push的時候,遇到error: update_ref failed for ref
'refs/remotes/origin/feature/financeTesting': cannot lock ref
'refs/remotes/origin/feature/financeTesting': 'refs/remotes/origin/feature'
exists; cannot create 'refs/remotes/origin/feature/financeTesting'
# 上述報錯提示了,遠程feature分支已存在,不能創建feature/financeTesting分支,於是乎我們只要刪掉遠程分支即可.
git branch -r -d origin/feature
# 再次重新push, 報錯消失; 上述操作針對遠程feature分支已不存在或者代碼沒用的case
最後附上權威的文檔鏈接:https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%AD%90%E6%A8%A1%E5%9D%97