美文网首页
合并,or 分开

合并,or 分开

作者: NoteCode | 来源:发表于2016-07-24 21:32 被阅读24次

故事:周五最后,M希望将wbs和satellite合并,zy则认为保持分离相宜。我提出,将immy框架提出为一个单独git库(确切的叫法应为:repo,下面将用此叫法),供两个“应用”级repo共用。这个想法,从复用的“理念”上是没有问题的,但具体到这里,是跨repo的复用,就不如代码层面上的复用来的那么方便、直接。周六花了大半天时间研究git对此方式的支持,感觉此方式实施起来也没有想象的那么理想,现将考察的情况及所考虑的问题呈现出来,供大家思考。

跨git repo复用代码

基本思路:将一个repo A,引入到另外的repo B、C中,如果A有更改,B、C中更新就可以了。

1. submodule

这是git原本的支持方案。只可惜,它仅适用于引入“不需要修改”的repo(如第三方的)。而我们要共用的immy现在还属于(并且将来仍是)需要经常改变的阶段,并不适宜。

2. subtree

此方式比较适用于我们的场景:A和B、C都经常改变。做了一个demo,试用了一番,觉得用起来比较繁琐:(A被引入到B、C中,作为一个单独的目录)如我在B中修改了A,需要:

  1. push到repo B
  2. push到repo A(subtree)
  3. 在C中pull下A的更新,再push到repo C

总之,实际上是有3份A的实例(A自身,B、C中各有一份),虽然三份都是一样的。这对于维护A的同学来说,无疑是有些繁琐(每次push都得执行3次),其他同学倒是可以完全“感知”不到A是一个单独的repo,只需按惯常的操作进行即可。

那,可不可以将这3次用一个脚本封装一下?或许是可以,但感觉就有些笨重了,不直观。如果我们哪天又要做一个xx站,那按现在的思路,就得再建一个repo D,同样引入A,那么将变成4次。

demo

// 共用的repo
git clone https://github.com/notecode/xlib.git

// 下面2个repo已经引入xlib
git clone https://github.com/notecode/www.git
git clone https://github.com/notecode/m.git

https://hpc.uni.lu/blog/2014/understanding-git-subtree/
http://yutin.logdown.com/posts/188306-git-subtree-total-addendum-library
https://codingkilledthecat.wordpress.com/2012/04/28/why-your-company-shouldnt-use-git-submodules/

再思考

引入subtree,对查看log、切换分支等工作(在一个repo时比较容易的工作)来说,现在将变得复杂许多。毕竟,subtree并不是业界的主流(google有个git-repo工具,用于管理多个repo的依赖,尚未研究),不能像在一个repo那样灵活。

再加上每次push都要3次,这些不便合起来,让我对此方案的“性价比”产生了质疑:值当吗?

然后我又折回去想M提出“将两个repo合并”的想法,是否更划算一些?那样,我们可以用一个repo,使用最纯的git(不至于害怕碰到什么坑),要面对的问题:多个站的目录组织、发布等。至于说代码放在一起,多了之后会不会clone一次很慢。我觉得这个顾虑倒是不太紧要,就我们这几个人,一年才能写多少代码呢。

另外,从概念上说,如果我们因使用同一个“库”而选择在同一个repo中,似乎有些牵强;但我们因使用同一个“框架”而选择在同一个repo中,则合理。“框架”是无所不在的,“库”则只完成特定功能。

结语:

综上,两种方案(合并 vs. 分开),各有利弊,请大家思量。

相关文章

  • 合并,or 分开

    故事:周五最后,M希望将wbs和satellite合并,zy则认为保持分离相宜。我提出,将immy框架提出为一个单...

  • 设备(采购和安装)2021-11-12

    对于既有设备采购又有安装服务的项目 ■可以采用设备和安装分开招标,也可以合并招标。 ■采用合并招标的,可以按照各部...

  • 2020-04-15复盘记录

    1、中信证券和中信建投合并,这两个公司当年在一起,分开之后,现如今有谣言说是要合并,先不说二者能否合并,暂时我们来...

  • Oracle常用语句

    剔重语句 将多行数据进行合并 将合并行字段分开(正则表达式) 数学函数: 绝对值:abs() 取整函数(大):ce...

  • 数组逆序序列

    归并排序 归并排序是采用分治的一种排序方法:先将元素分开,也就长度为1的有序序列。合并有序序列,直至合并成一个数组...

  • 科室培训

    俗话说的好,分久必合,我们的科室经历了分开又合并,我们的科室由原来的三个小科室合并成一个大科室,各种职责当然要整合...

  • Swift 4.0 编程语言(三)

    86.复合 Cases 共享相同代码块的多个switch 分支 分支可以合并, 写在分支后用逗号分开。如果任何模式...

  • 发明原理5合并

    合并原理是将一些分开的系统整合到一起,使整个系统的功能更加强大,或者兼顾其他的功能。合并在互联网时代变得越来越普及...

  • mysql 连接管理sql

    1、显示当前正在执行的MySQL连接。 2、查看每个ip的当前连接数 合并ip 根据ip分开查询 连接具体状态 数...

  • 分开,合并,我就不认识了……

    当老师,批改真如探索一场未知。看到孩子们写的五花八门的卷子,实在哭笑不得,也不枉孩子们的一些想法:是一样的,却又不...

网友评论

      本文标题:合并,or 分开

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