git子模块
当项目越来越庞大之后,不可避免的要拆分成多个子模块,我们希望各个子模块有独立的版本管理,并且由专门的人去维护submodule
常用命令git clone --recursive 递归的方式克隆整个项目 git submodule add 添加子模块 git submodule init 初始化子模块 git submodule update 更新子模块 git submodule foreach git pull 拉取所有子模块 git submodule / cat .gitmodules 查看所有子模块
删除子模块逆初始化模块,其中{MOD_NAME}为模块目录,执行后可发现模块目录被清空 git submodule deinit {MOD_NAME} # 删除.gitmodules中记录的模块信息(--cached选项清除.git/modules中的缓存) git rm --cached {MOD_NAME} # 提交更改到代码库,可观察到".gitmodules"内容发生变更 git commit -am "Remove a submodule."
删除子模块较复杂,步骤如下: rm -rf 子模块目录 删除子模块目录及源码 vi .gitmodules 删除项目目录下.gitmodules文件中子模块相关条目 vi .git/config 删除配置项中子模块相关条目 rm .git/module/* 删除模块下的子模块目录,每个子模块对应一个目录,注意只删除对应的子模块目录即可 执行完成后,再执行添加子模块命令即可,如果仍然报错,执行如下: git rm --cached 子模块名称 完成删除后,提交到仓库即可。SubtreeGit Subtree 好在哪里
用一句话来描述 Git Subtree 的优势就是:
经由 Git Subtree 来维护的子项目代码,对于父项目来说是透明的,所有的开发人员看到的就是一个普通的目录,原来怎么做现在依旧那么做,只需要维护这个 Subtree 的人在合适的时候去做同步代码的操作。
它是怎么做到的呢?简单说下原理Git Subtree 的原理
首先,你有两个伟大的项目——我们叫他P1项目、P2项目,还有一个牛逼的要被多个项目共用的项目——我们叫他S项目。我们通过简要讲解使用Subtree来同步代码的过程来解释Subtree的原理1、初始化子项目Subtree
通过cd P1项目的路径 git subtree add --prefix=用来放S项目的相对路径 S项目git地址 xxx分支
这样的命令把S项目(我们姑且叫他S项目)的代码下载到--prefix所指定的目录——我们姑且叫他S目录把,并在P1项目里自动产生一个commit(就是把S目录的内容提交到P1项目里)。
对于P2项目也做同样的操作2、像往常一样更新代码
大家在P1项目里各种提交commit,其中有些commit会涉及到S目录的更改,正如前面提到的,这是没任何关系的,大家也不会感受到有任何不一样。3、提交更改到子项目的Git服务器
关键的地方来了:当维护这个S项目 Subtree 的人希望把最近这段时间对S目录的更改提交到S项目的 Git 服务器上时,他执行一段类似于这样的命令:cd P1项目的路径 git subtree push --prefix=S项目的路径 S项目git地址 xxx分支
Git 会遍历所有的commit,从中找出针对S目录的更改,然后把这些更改记录提交到S项目的Git服务器上4、更新子项目新的代码到父项目
OK,现在S项目有大量的新代码了,P2项目也想使用这些新代码,维护P2这个Subtree的人只要执行:git subtree pull --prefix=S项目的路径 S项目git地址 xxx分支
这样就可以将P2项目里S项目目录里的内容更新为S项目xxx分支的最新代码了。Git Subtree 简明使用手册
假设,你要在各个项目里的_components/zenjs_这个目录对 http://github.com/youzan/zenjs.git 这个项目做Subtree
1.首先必须确保各个项目已经添加zenjs 这个 remote(关于remote是什么可以看这里):git remote add zenjs http://github.com/youzan/zenjs.git
2.将zenjs添加到各个项目里git subtree add --prefix=components/zenjs zenjs master
3.各项目更新zenjs代码的方法:git subtree pull --prefix=components/zenjs zenjs master
4.各项目提交zenjs代码的方法:git subtree push --prefix=components/zenjs zenjs hotfix/zenjs_xxxx
这会在远程的zenjs的仓库里生成一个叫 hotfix/zenjs_xxxx 的的分支,包含了你过去对components/zenjs 所有的更改记录
5.把hotfix/zenjs_xxx分支更新并合并到master并提交
这样其他工程就可以更新到你提交的代码了。
有人可能会问,只用master分支,不管版本,太有风险了。
对的,正如我们前面说到的那样,subtree的方案适用的场景是:各个项目共用一个库,而这个库正在快速迭代更新的过程中。如果追求稳定,只需要给库拉出一个如v0.1.0这样的版本号命名的稳定分支,subtree只用这个分支即可。
我们现在使用的方式就是:A项目经常会对zenjs做更新,所以A项目用subtree来双向同步;B项目只是使用,所以用bower用来按版本来更新代码。高阶功能
重新split出一个新起点(这样,每次提交subtree的时候就不会从头遍历一遍了)git subtree split --rejoin --prefix=components/zenjs --branch new_zenjs git push zenjs new_zenjs:master
外媒加密货币公司GalaxyDigital计划全球裁员约20中新经纬11月2日电据华尔街日报中文网报道,由亿万富翁MikeNovogratz创立的加密货币金融服务公司GalaxyDigital,正计划在全球范围内裁员约20。报道称,Gala
今年第七批储备猪肉即将投放中信否认组团收购腾讯的消息财经晚6点财经新闻外交部回应美国国防战略报告据北京日报消息,外交部发言人赵立坚周二主持例行记者会。有记者提问,近日,美国国防部公布的2022年美国防战略报告认为中国对美国家安全构成最严重的系
腾讯副总裁已担任中国联通董事近日,中国联通与腾讯设立混改新公司话题引发关注。据了解,在此之前中国联通与腾讯公司已有诸多交集,企查查APP显示,腾讯控股有限公司高级执行副总裁卢山同时担任中国联合网络通信股份有限
能让你一瞬间破防的文案1。有些事情,你能想通,也能接受,但还是会难过。2。人和人的出场顺序真的很重要,陪你一起喝醉的人,是没法送你回家的。3。想了一晚上的悄悄话,开口却只成了早安攒了一天的新鲜事,开口却
警惕股市虚假小作文随着A股市场的活跃,小作文也正成为近日股市的搅局者,形式五花八门,且多以图片截屏方式在网上流传,有些则直接以文字方式在网上散播,往往故作神秘在网上发布,以达到吸引跟进传播的效果。提
驻亚美尼亚大使范勇会见亚国民会议人权保护和公共事务委员会主席托夫马相2022年11月3日,驻亚美尼亚大使范勇会见亚国民会议人权保护和公共事务委员会主席托夫马相。托热烈祝贺中国共产党第二十次全国代表大会胜利召开并表示,亚方赞赏中国共产党领导国家取得的
日常碎片文案与图片合集(1)1。岁寒,时深,加衣,勿病2。。上辈子作恶多端这辈子节假日上班3。开始降温了你要适应这世界上所有的温度不管季节还是人心4。成长就是渐渐温柔,克制,朴素5。日复一日的生活,也会有新的
不同风格的文案温柔型1。今天你也辛苦啦。2。生活美好又值得期待。3。越来越好是我们的约定。4。眼里藏星河笑里藏月亮。5。前路漫漫愿你南风拂满袖。6。接下来的日子都要有好心情。7。天越来越黑星星就
美国发现直径1km小行星,或将撞击地球,能否在空中将其击碎?在人类繁衍发展的地球中,除了自然灾难是人类最畏惧的,剩下的恐怕就是来自地球外天体的袭击,比如我们经常说到的小行星撞击地球事件。众所周知,在地球上恐龙灭绝就是小行星撞击地球导致的,由
科学家们刚刚发现了一条隐藏在南极洲下面的大河随着全球变暖,科学家们在预测南极洲冰川融化时,必须要考虑各种变数。现在,研究人员需要考虑一条流经南极洲冰下长约460公里(286英里)的巨大河流这一距离比流经英国伦敦的泰晤士河还长
博格巴坎特无缘世界杯,德尚在中场位置上可以依靠拉比奥特直播吧11月2日讯法国媒体RMC指出,随着坎特和保罗博格巴先后因伤无缘卡塔尔世界杯,德尚在中场位置上可以依靠的球员落在了拉比奥特身上。在2018年世界杯上问鼎冠军的法国队成员中,所