资讯专栏INFORMATION COLUMN

如何科学的管理多个子项目

SolomonXie / 2303人阅读

摘要:使用打包压缩静态文件的时候,两个项目必须在同一个分支,很容易搞乱。第三阶段使用如果是引用多个子项目,会造成当前项目过于臃肿。参考文章官网文档使用集成项目到子目录用在多个项目间双向同步子项目,附简明使用手册

背景

最近工作中遇到了一个问题:随着项目越来越多,很多项目依赖同一个模板或是配置文件想同一管理,又不想分开维护,所以只能互相引用,或是各自维护,导致了后续的很多麻烦。

场景一: 很多公司手机端和pc同时开发,引用同一套模板,或者通用的组件库。

场景二: 用gulp、webpack来打包,或是用node来开发会有一些通用的配置文件需要统一管理。

第一阶段:gulp等自动化工具手动同步

这个是我们最初使用的方法,比如有两个项目projectA和projectB,B项目依赖A项目中的一套模板,会遇到几个问题:

开发中我们引用模块的时候,B项目要经过很长的路径引用才能引到A项目中的模板,这要求所有开发者本地文件路径保持高度一致。

使用webpack打包压缩静态文件的时候,A、B两个项目必须在同一个git分支,很容易搞乱。

修改完文件不能及时看到效果,还要手动同步一次。这点是开发中最致命的问题,做前端的都会有体会如果改了一个样式或是一个模板要通过一个很长的操作路径才能看到效果,是非常影响开发效率的。

在用了几个月之后,各种问题暴露出来,我们必须找新的办法。

第二阶段:使用Git subtree

网上调研了很多方法,例如git submodule,第二阶段最终选择了subtree,一是官网已经不再推荐使用submodule了,二是subtree实在是太方便易用了。(后来和同事商量了下发现submodule还是有使用价值的,在第三阶段中我们再分析。)

说到subtree易用,只需要2步就可以初始化好一个子项目:

第一步:添加远程仓库

语法:git remote add -f <子仓库名> <子仓库地址>

实例:git remote add -f component git@xxx.git

验证:git remote -v 可以看到已经你添加成功了一个新的远程仓库叫 component

第二步:创建本地目录

语法:git subtree add --prefix=<子目录名> <子仓库名> <分支> --squash

实例:git subtree add --prefix=component component master --squash

这时候会在本地新建一个叫component的文件夹,--squash 会把subtree上的改动合并成一次commit

第三步:使用 ( pull & push )

pull:git subtree pull --prefix=component component master --squash

push:git subtree push --prefix=component component master --squash

注意:必须在component的父级目录执行,使用起来还不是很方便。

第四步:更方便的使用

可以在package.json里面加script语句来执行,这样在每个文件夹下都可以pull & push,强制统一,避免出错。

第三阶段:使用Git submodule

如果是引用多个子项目,会造成当前项目过于臃肿。其实有的时候类似组件库是不需要上线的,只在开发环境引用就好了。

添加:git submodule add

添加后会在当前目录下生成一个.gitmodules的新文件,里面会记录submodule的引用信息,在当前项目的位置以及仓库的url。

git submodule foreach git pull 这样可以更新所有子模块。

这里只介绍了最基本的submodule用法,实际在多个项目中更新和修改submodule还是很多坑的,可以参考这篇文章 Git Submodule的坑。 所以我们规定在项目中只能pull子模块,修改的话只能到子模块中去push。 这样避免了多人修改造成的冲突。

结论

在新员工加入团队时:一次性clone项目,submodule可以一起clone出来,只需添加--recursive递归参数就可以了,而subtree并不行,只能手动添加,不过可以借助神器Yeoman(一个自动生成项目脚手架的工具)来实现。

subtree适合像配置文件这种需要跟着项目走的情况。

submodule适合在开发阶段时引用,到了生产环境会被打包到指定文件内,而本身并不用跟着版本走的情况。

参考文章

官网文档:Git Tools - Subtree Merging

使用GIT SUBTREE集成项目到子目录

用 Git Subtree 在多个 Git 项目间双向同步子项目,附简明使用手册

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/86442.html

相关文章

  • 如何成为数据科学家?数据科学业界大牛们倾囊相授

    摘要:也授予其荣誉数据科学家称号。教学案例以上的实战派数据科学大佬们,也正式成为了数据分析研究院荣誉科学家成员,共同参与制定数据科学家人才标准大纲及数据科学家精英培训,将自身在大数据发展这几年的实战成果,以教学案例的形式倾囊相授。 showImg(https://segmentfault.com/img/bVbofUw?w=865&h=592); 在大家的眼中,科学家的形象可能是一位表情严肃...

    CollinPeng 评论0 收藏0
  • 如何创建一个数据科学项目

    摘要:虽然我们可以在网上参照各种模板项目文章博客等创建一个数据科学项目,但是目前也没有教科书对这些知识做一个统一的回答。举个例子来说,数据科学分析项目通常就不需要部署和监控这两个过程。创建文件描述源数据及位置。进一步探索和报告在整个数据科学项目中 摘要: 在一个新的数据科学项目,你应该如何组织你的项目流程?数据和代码要放在那里?应该使用什么工具?在对数据处理之前,需要考虑哪些方面?读完本文...

    Aceyclee 评论0 收藏0
  • 解密亚马逊Ironman计划:背靠AWS云服务发力AI,对抗谷歌微软

    摘要:在此次会议上,还计划发布云计算深度学习服务。两名消息人士表示,新的深度学习服务也帮助用户更方便地运行常见深度学习开发工具包,例如和谷歌。谷歌和微软已提供类似的服务。 据外媒报道,亚马逊AWS正在大力推动人工智能产品的升级,包括自主开发技术以及与多家AI创业公司合作。AWS希望补足自身短板,赢得更多人工智能业务...

    alin 评论0 收藏0
  • 解密亚马逊Ironman计划:背靠AWS云服务发力AI,对抗谷歌微软

    摘要:在此次会议上,还计划发布云计算深度学习服务。两名消息人士表示,新的深度学习服务也帮助用户更方便地运行常见深度学习开发工具包,例如和谷歌。谷歌和微软已提供类似的服务。 据外媒报道,亚马逊AWS正在大力推动人工智能产品的升级,包括自主开发技术以及与多家AI创业公司合作。AWS希望补足自身短板,赢得更多人工智能业务。总体来说,AWS在人工智能领域的工作以Ironman项目为中心。Ironman项目...

    qianfeng 评论0 收藏0
  • [原]数据科学教程: 如何使用 mlflow 管理数据科学工作流

    摘要:背景近年来,人工智能与数据科学领域发展迅速,传统项目在演化中也越来越复杂了,如何管理大量的机器学习项目成为一个难题。在真正的机器学习项目中,我们需要在模型之外花费大量的时间。 showImg(https://segmentfault.com/img/remote/1460000016855989?w=800&h=450); 背景 近年来,人工智能与数据科学领域发展迅速,传统项目在演化中...

    MadPecker 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<