美文网首页程序猿阵线联盟-汇总各类技术干货
Git 中一个类似 Composer 的工具 – 子模块

Git 中一个类似 Composer 的工具 – 子模块

作者: 撩课学院 | 来源:发表于2019-02-03 00:09 被阅读15次

    Composer 对于做 PHP 开发的人来说一定不陌生,也极大的方便了日常开发工作,找到合适的包直接加载一下就可以使用

    对于 Git 中的一个工具你了解过吗,在工作中的项目可能需要包含另外一个项目,也许是一个第三方库,也许是你自己开发的一个私有库

    说到第三方库一定会想到使用 Composer 去加载,使用 Composer 加载你在部署的时候要确保每一个客户端都包含这个库

    如果将代码复制到自己的项目中,那么你做的任何自定义修改都会在合并的时候变得困难

    Git 通过子模块来解决了这个问题。子模块允许你将一个 Git 仓库作为另一个 Git 仓库的子目录,它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立

    开始使用子模块

    在已存在的仓库中添加子模块,可以使用git submodule add命令,比如这样

    $ git submodule add git@github.com:sy-records/GetIP.git
    

    默认情况下,子模块会将子项目放到一个与仓库同名的目录中,本例中是 “GetIP”。 如果你想要放到其他地方,那么可以在命令结尾添加一个不同的路径

    查看一下状态会发现:

    $ git status
    On branch master
    Your branch is up to date with 'origin/master'.
    
    Changes to be committed:
      (use "git reset HEAD ..." to unstage)
    
            new file:   .gitmodules
            new file:   GetIP
    

    多出了一个.gitmodules文件

    这个配置文件是保存了项目的URL和本地目录之间的映射关系

    $ cat .gitmodules
    [submodule "GetIP"]
            path = GetIP
            url = git@github.com:sy-records/GetIP.git
    

    如果有多个子模块,这个文件中就会有多条记录,它会和该项目的其他部分一同被拉取推送,这就是克隆该项目的人知道去哪获得子模块的原因

    克隆含有子模块的项目

    还跟平常克隆项目一样git clone的命令

    $ git clone git@github.com:sy-records/git-submodule.git
    

    然后你就会发现,克隆下来的子模块文件夹是空的,没有代码

    是因为包含子模块的项目不仅仅克隆下来就可以了,需要运行两个命令:

    git submodule init用来初始化本地配置文件

    git submodule update从该项目中抓取所有数据并检出父项目中列出的合适的提交

    $ git submodule init
    Submodule 'GetFavicon' (git@github.com:sy-records/GetFavicon.git) registered for path 'GetFavicon'
    Submodule 'GetIP' (git@github.com:sy-records/GetIP.git) registered for path 'GetIP'
    
    $ git submodule update
    Cloning into 'F:/Test/git-submodule/GetFavicon'...
    Cloning into 'F:/Test/git-submodule/GetIP'...
    Submodule path 'GetFavicon': checked out '2808acdbbfa08579460e5edc9f26bce49c8a66a9'
    Submodule path 'GetIP': checked out '48be97908b62fb9a8c3623feb67f45e3c7a484f0'
    

    或者在克隆的时候加上--recursive选项,就会在拉取的时候自动初始化并更新仓库中的每一个子模块

    ((本文章转载自腾讯云社区, 如有侵权, 请联系作者删除))

    相关文章

      网友评论

        本文标题:Git 中一个类似 Composer 的工具 – 子模块

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