今天遇到了一個(gè)git submodule update獲取不到最新代碼的問(wèn)題,鬧了半天原來(lái)是自己對(duì)git submodule理解不到位引起的。解決了后,感覺(jué)雖然沒(méi)有什么高深的地方,但是不清楚的時(shí)候還是需要費(fèi)時(shí)間去查找問(wèn)題,所以還是在此記錄如下。
1.問(wèn)題描述
同事在共同使用的一個(gè)工程里修改了代碼,這個(gè)工程在我本地的工程中是作為submodule來(lái)使用的,但是我在本地執(zhí)行以下命令卻獲取不到最新提交的代碼。
git submodule update --init --recursive
2.問(wèn)題原因
git submodule在工程中維護(hù)了一個(gè)文件.gitmodules文件,里邊記錄了子工程在當(dāng)前父工程下的存放路徑path和子工程的git路徑url。同時(shí),在父工程下的.git目錄中,還有個(gè)modules子目錄如下所示。
![](/d/20211017/ec4015eeaa8fa77a576e8e8ce8b498e8.gif)
在這個(gè)modules中存放的就是父工程相關(guān)的子工程的路徑。進(jìn)入子工程后,可以看到里邊有個(gè)叫做FETCH_HEAD的文件:
![](/d/20211017/7efae912dbab20ddd0af01da86d87845.gif)
查看該文件的內(nèi)容如下:
zhuwsh@zhuwsh-TM1705:~/work_space/autonomousDriving/.git/modules/src/utils/dw_xxx_center$ cat FETCH_HEAD
31ecb3458596f22134588460eefb9efa4bd6df23 branch 'master' of https://gitlab.xxx.com/xxx/dw_xxx_center
此時(shí)可以發(fā)現(xiàn),這里的commit id和git上最新提交的commitid不一樣,這里的commit id還是之前某一次的提交id。
這個(gè)其實(shí)要說(shuō)明的是,git submodule update獲取代碼的時(shí)候是和子工程的git路徑和這里的commit id有關(guān)聯(lián)的,獲取的就是對(duì)應(yīng)的git路徑下截止這個(gè)commit id的所有代碼,之后的代碼是不會(huì)獲取到的。
明白了這個(gè)原理后,就知道怎么來(lái)修改了。
3.解決方法
既然git遠(yuǎn)端服務(wù)器代碼已經(jīng)修改過(guò)了,那么本地每次執(zhí)行了git submodule update --init --recursive命令后自然需要在自工程對(duì)應(yīng)的路徑下執(zhí)行g(shù)it pull命令,執(zhí)行完后服務(wù)器端的最新代碼就更新到本地了。這個(gè)操作做完后再執(zhí)行g(shù)it submodule update命令,此時(shí)就可以看到上邊說(shuō)的FETCH_HEAD文件中的commit id發(fā)生了變化,已經(jīng)變?yōu)楫?dāng)前最新的commit id了。
zhuwsh@zhuwsh-TM1705:~/work_space/autonomousDriving/.git/modules/src/utils/dw_xxx_center$ cat FETCH_HEAD
ab214ead574d51755f4faabad4045de6486b49c2 branch 'master' of https://gitlab.xxx.com/xxx/dw_xxx_center
總結(jié)一下就是,在使用git submodule update --init --recursive獲取了自工程代碼后,還需要執(zhí)行下面兩條命令:
git pull
git submodule update
到此這篇關(guān)于詳解git submodule update獲取不到最新提交的代碼的文章就介紹到這了,更多相關(guān)git submodule update最新提交內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Git Submodule管理項(xiàng)目子模塊的使用
- 詳解git submodule使用以及注意事項(xiàng)
- git中submodule子模塊的添加、使用和刪除的示例代碼
- Git Submodule使用完整教程(小結(jié))