问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Git 进阶 - 子仓库 subtree

发布网友 发布时间:2023-04-28 01:07

我来回答

1个回答

热心网友 时间:2023-10-25 13:24

问题实例(真实诉求)

一个工具类库,有以下两个目标:

如果直接使用 Git 管理这个lib 添加到这个项目来呢,单独维护。可能就会出现每一次更新 repo 就要更新多个 repo 的情况。对于有很多开发协同者来说,简直是灾难。

git subtree 是什么?

git subtree 可以实现一个仓库作为其他仓库的子仓库,能够相对较好的解决上面两难问题。

有个和 git subtree 概念类似的功能 git submole ,虽然都没有用过,但目前来看 git subtree 比 git submole 更加强大,是可以替代 submole 的方案。

subtree 的作用就是可以实现一个仓库作为其他仓库的子仓库,对于主项目来说,另一个项目只作为主项目的一个子目录而存在。

图片来自 : https://segmentfault.com/a/1190000012002151

创建一个git repo GitStudy

创建一个 lib repo commonToolsCopy

使用 subtree 命令,将 tools 放到 gitStudy 目录下(作为lib)

下面 commonTools

上面命令执行后,就可以将 commonTools 仓库中 master 上的更新更新到本地

之后会生成两条日志信息

添加之后 commonTools 就是主项目的一个普通文件夹,如果这时候 commonTools 内容更新之后,正常 git push 即可,子项目对于主项目来说完全是透明的。

在主项目 git push 之后,对子项目修改的内容是不会直接更新到子项目自身的

需要执行 git subtree pull

如果单独对子项目做了更新,主项目就需要手动更新下了

执行之后,仍然会在主项目中生成相关的 commit 记录

在 subtree 相关命令经常会用到 <repository> 每次都写地址还是比较麻烦,这里可以用 git remote 命令简化写法,为这个远程地址定义一个 “别名”

比如使用 subtree push 的时候就可以使用如下命令

在添加 subtree 的时候是指定了分支的,如果要切换分支直接移除 subtree,重新加入子项目的分支

验证1:其他人 clone 该项目对 sub repo是无感知的

验证2:在主项目中修改 sub repo 的内容 push,在 app 中会形成 commit 在 sub repo 中不会有 commit

验证3:使用一下命令,可以push 到 sub repo 中 推送修改到源仓库

验证4:直接在 sub repo 项目中更新内容

那么 main repo 需要还是需要 pull 一下 从源仓库拉取更新

非原理性提示 不加 --squash 不可以,

在 pull 的过程中可能需要处理冲突

验证5:修改的内容同时包含主项目和子项目, 使用 git push 再使用 git subtree push 会做挑拣,但如果混杂的内容很多的话,这个过程也会变得复杂,so 建议尽可能分开提交,减少这种冲突。

https://segmentfault.com/a/1190000012002151
http://einverne.github.io/post/2020/04/git-subtree-usage.html

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
网络宣传文案心碎,句句获赞! 关于朋友圈上万人点赞转发的说说 人生看的很透彻的经典句子 超现实超扎心的说说大全2019最新 心脏血管堵塞吃什么食物 投资理财有什么前景 pp理财什么情况 P2P理财行业的前景如何? 中国目前的财富管理现状是什么情况? 呼吸皮沙发寿命多久 “皮沙发的呼吸寿命” 呼吸皮沙发寿命多久 枪神的荣耀 歌词 《都市最强主宰》by过年吃苹果txt下载在线阅读全文,求百度网盘云资源 长江万里白如练加上引号表示什么 二手房贷款如何办理二手房贷款多长时间放款? 为什么壁虎尾巴断了可以再生 明月不语相思浊酒难解离愁清风不许归期情深不言爱意是什么意思 求一首歌第一句歌词是他将是你的新郎从今以后他就是你身边的伴 他将是你的新郎是什么歌 他将是你的新郎是啥歌 日长一线打一字 博物志的拼音狐博物志的拼音是什么 含茶字的四字成语 五官的拼音狐五官的拼音是什么 公司债权人如何追究股东责任 破产清算时,债权人优先与股东分配剩余财产 业精于勤,荒于女喜。行成于思,毁于随。勤能补拙,是良训。是什么意思? 什么是pu相框 祀祷的网络解释祀祷的网络解释是什么 有关抒情作文初中范文 经典老歌《纤夫的爱》原唱是谁? 猜谜兔子打老虎猜一谜语 Git 找回本地删除的 branch 求披头士的一首歌。。歌名歌词都不记得了。。之前在广播里听过~~是超级欢乐的一首歌~ 2021-11-18 -&#xF3A8;&#xF3A8; git push 为什么必须要先 git pull git fresh 的so fly 中文歌词 跪求 急用!!! 假发护耳弹力带优势 弹力带怎么选 弹力带和壶铃哪个更好用 成语什么走什么不 火影忍者:究极风暴-革命-详细白金详细攻略 火影忍者疾风传究极忍者风暴4面具怎么玩 古代青楼的花魁主要是干什么 ,是卖艺还是卖身的? 古代的时候,青楼花魁是不是如果有人看上了花魁就会买下很多钱是吗。 青楼花魁弹古筝描写 给父母买保险,在人寿和安全险里面,具体买什么险好呢? 中国人寿孝敬父母金卡怎么领 公园散步唯美句子 扭转乾坤大挪移是什么意思 易经里391是什么意思 金庸古龙小说中的乾坤大挪移斗转星移移花接木有什么区别 姓顾起什么名字好?