美文网首页
Git submodul

Git submodul

作者: hehehehe | 来源:发表于2021-06-30 14:49 被阅读0次

    http://blog.jqian.net/post/git-submodule.html

    git submodule add git@github.com:lib.git <local path>'
    
    如果要clone一个附带submodule的项目,submodule的文件不会自动随父项目clone出来(其实只会clone出 .gitsubmodle 这个描述文件),还需要执行如下命令取出submodule里的文件:
    git submodule init
    git submodule update
    git submodule update --init --recursive
    
    

    修改/更新
    可能稍微违反直觉的是,如果submodule有更新,默认在本地父项目里执行git pull是不会更新submodule的。因为执行git submodule add xxx的时候,只是把submodule的当前commit id加入到本地父项目的索引里,如果你期望submodule的commit id同步到最新HEAD,则你还需要重新执行git add然后重新提交。

    此后,其他开发成员需要执行git submodule update更新你刚才的这个submodule commit。这里一个需要注意的地方是,每次在父项目执行git pull后,应该执行git status查看一下submodule是否有更新;如果submodule有更新,则应该立刻执行git submodule update,否则你有可能把submodule的旧依赖提交到仓库里去。一个建议是,尽量不要执行git commit -a,它会让你忽略对staged文件的确认过程。

    (用户A) 创建新的代码仓库:
    
    mkdir proj
    cd proj
    git init
    git add --all
    (用户A) 添加pdlib作为submodule:
    
    git submodule add git@github.com:lib.git
    git commit -m "first commit with submodule"
    git remote add origin git@github.com:proj.git
    git push origin master
    (用户B) 签出刚刚新建的代码仓库并使用:
    
    git clone git@github.com:proj.git
    cd foo
    git submodule update --init --recursive
    (用户B) 发现lib.git有修改,他把proj.git仓库的lib.git也同步到该版本:
    
    cd lib
    git pull
    git status        # 此时如果lib.git有修改,就可以看到not staged commit
    cd ..
    git add lib
    git commit -m "update lib.git"
    git push origin master
    (用户C) 更新proj.git仓库,同时也需要更新submodule:
    
    git pull origin master
    git status        # 记得执行git status,可以看到lib.git的改动
    git submodule update
    

    相关文章

      网友评论

          本文标题:Git submodul

          本文链接:https://www.haomeiwen.com/subject/pajrultx.html