Submodule Update

初步試用 Submodule
先記錄一下


Note: 把 submodule 想成一塊"檔案"



確認目前 submodule 在哪一個 commit 上


確認目前 父版本庫 在哪一個 commit 上



父版本庫 switch 回舊的 commit , 同時建一個新的 branch
( 隨便取一個 check )



再次確認目前 submodule 在哪一個 commit 上
嗯~ 還在原來那個上面
-> submodule 並不會隨著 父版本庫 做 Switch/Reset 等動作, 而跟著 switch 到相關聯的 commit 上

這時候, 就是 Submodule Update 派上用場的地方啦!!!


在 父版本庫, TortoiseGit -> Submodule Update...



好像可以勾掉 Initialize submodules (--init)
(--init -> 再研究)


成功訊息



查看 submodule 的 log:
粗體表示目前的 HEAD (ref) 在這個 commit 上

Note:
Submodule Update 後
HEAD 一定是 Detached 狀態
( HEAD attach 在 local branch 上時, 表示目前作用中的分支 )



=========================================================
很重要的注意事項:


如果要 submodule 之後有 wroking tree 修改, 且 HEAD 仍是 Detached
submodule 做 commit 時, 記得補給一個 branch
有 3 個方式:


(1) commit 時新建 branch

"Commit to:" 顯示 (no branch)

勾選 new branch , 填入 branch
按 OK


(2) commit 畫面直接按 OK 時

貼心的 TortoiseGit 會顯示
詢問要不要順便新建一個 branch
可按 Yes

跳出 Create Branch 視窗
( Switch to new branch 也幫你勾好了 )


(3) 如果以上都沒做, 強制 commit 了

就自己手動在 HEAD 所在的 commit 補上一個 branch
但 HEAD 還是 Detached
所以需再做 Switch/Checkout to "branch name"... 
來將 HEAD attach 到 branch 上 


=========================================================
為什麼要補一個 branch ?

因為在 父版本庫 再做一次 Submodule Update 時,

嘿嘿嘿...

submodule 的 HEAD 會 switch 到 父版本庫關聯的 submodule commit 上

如果 submodule 的 working tree 有修改而沒有 commit
那 working tree 的 修改 就被丟掉了
(目前最新版本不會丟掉 wroking tree 的修改)

如果 submodule 有新的 commit, 卻沒有 branch 在上面
那在 log 畫面就看不到它了 (不過還是可以在 reflog 中找得回來)



總之, Detached HEAD 看起來就是怪怪的
所以, 無論何時看到它, 就先將它 attach 到 branch, 總不會是什麼壞事吧!!!

=========================================================
每次 父版本庫 switch/reset hard 到別的 commit 上時, 不能自動做 Submodule Update 嗎?

目前好像還不行

不過 Switch/Reset 後的訊息畫面提供了 Update Submodules 按鈕, 可以直接按













沒有留言:

張貼留言