设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 服务器 > 安全 > 正文

Git Submodule使用完整教程(小结)(5)

发布时间:2020-08-21 01:42 所属栏目:53 来源:网络整理
导读:henryyan@hy-hp ~/submd/ws/project1-b git:(master) cd libs/lib1 henryyan@hy-hp ~/submd/ws/project1-b/libs/lib1 git status# Not currently on any branch.nothing to commit (working directory clean) 为什

➜ henryyan@hy-hp ~/submd/ws/project1-b git:(master) cd libs/lib1 ➜ henryyan@hy-hp ~/submd/ws/project1-b/libs/lib1 git status # Not currently on any branch. nothing to commit (working directory clean)

为什么是Not currently on any branch呢?不是应该默认在master分支吗?别急,一一解答!

Git对于Submodule有特殊的处理方式,在一个主项目中引入了Submodule其实Git做了3件事情:

记录引用的仓库

记录主项目中Submodules的目录位置

记录引用Submodule的commit id

在project1中push之后其实就是更新了引用的commit id,然后project1-b在clone的时候获取到了submodule的commit id,然后当执行git submodule update的时候git就根据gitlink获取submodule的commit id,最后获取submodule的文件,所以clone之后不在任何分支上;但是master分支的commit id和HEAD保持一致。

查看~/submd/ws/project1-b/libs/lib1的引用信息:

➜ henryyan@hy-hp ~/submd/ws/project1-b/libs/lib1 cat .git/HEAD c22aff85be91eca442734dcb07115ffe526b13a1 ➜ henryyan@hy-hp ~/submd/ws/project1-b/libs/lib1 cat .git/refs/heads/master c22aff85be91eca442734dcb07115ffe526b13a1

现在我们要修改lib1的文件需要先切换到master分支:

➜ henryyan@hy-hp ~/submd/ws/project1-b/libs/lib1 git checkout master Switched to branch 'master' ➜ henryyan@hy-hp ~/submd/ws/project1-b/libs/lib1 git:(master) echo "add by developer B" >> lib1-features ➜ henryyan@hy-hp ~/submd/ws/project1-b/libs/lib1 git:(master) ✗ git commit -a -m "update lib1-features by developer B" [master 36ad12d] update lib1-features by developer B 1 files changed, 1 insertions(+), 0 deletions(-)

在主项目中修改Submodule提交到仓库稍微繁琐一点,在git push之前我们先看看project1-b状态:

➜ henryyan@hy-hp ~/submd/ws/project1-b git:(master) ✗ git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: libs/lib1 (new commits) # no changes added to commit (use "git add" and/or "git commit -a") </file></file>

libs/lib1 (new commits)状态表示libs/lib1有新的提交,这个比较特殊,看看project1-b的状态:

➜ henryyan@hy-hp ~/submd/ws/project1-b git:(master) ✗ git diff diff --git a/libs/lib1 b/libs/lib1 index c22aff8..36ad12d 160000 --- a/libs/lib1 +++ b/libs/lib1 @@ -1 +1 @@ -Subproject commit c22aff85be91eca442734dcb07115ffe526b13a1 +Subproject commit 36ad12d40d8a41a4a88a64add27bd57cf56c9de2

从状态中可以看出libs/lib1的commit id由原来的c22aff85be91eca442734dcb07115ffe526b13a1更改为36ad12d40d8a41a4a88a64add27bd57cf56c9de2

注意:如果现在执行了git submodule update操作那么libs/lib1的commit id又会还原到c22aff85be91eca442734dcb07115ffe526b13a1,

这样的话刚刚的修改是不是就丢死了呢?不会,因为修改已经提交到了master分支,只要再git checkout master就可以了。
现在可以把libs/lib1的修改提交到仓库了:

➜ henryyan@hy-hp ~/submd/ws/project1-b git:(master) ✗ cd libs/lib1 ➜ henryyan@hy-hp ~/submd/ws/project1-b/libs/lib1 git:(master) git push Counting objects: 5, done. Writing objects: 100% (3/3), 300 bytes, done. Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/henryyan/submd/repos/lib1.git c22aff8..36ad12d master -> master

现在仅仅只完成了一步,下一步要提交project1-b引用submodule的commit id:

➜ henryyan@hy-hp ~/submd/ws/project1-b/libs/lib1 git:(master) cd ~/submd/ws/project1-b ➜ henryyan@hy-hp ~/submd/ws/project1-b git:(master) ✗ git add -u ➜ henryyan@hy-hp ~/submd/ws/project1-b git:(master) ✗ git commit -m "update libs/lib1 to lastest commit id" [master c96838a] update libs/lib1 to lastest commit id 1 files changed, 1 insertions(+), 1 deletions(-) ➜ henryyan@hy-hp ~/submd/ws/project1-b git:(master) git push Counting objects: 5, done. Delta compression using up to 2 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 395 bytes, done. Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /home/henryyan/submd/ws/../repos/project1.git 7157977..c96838a master -> master

OK,大功高成,我们完成了Submodule的修改并把libs/lib1的最新commit id提交到了仓库。

接下来要看看project1怎么获取submodule了。

2.4 更新主项目的Submodules

好的,让我们先进入project1目录同步仓库:

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读