首页 新闻 会员 周边 捐助

一个看起来不像中年人的中年人,带着两个初出茅庐的小伙子儿,用git管理项目代码的进击之路

0
悬赏园豆:200 [已解决问题] 解决于 2017-12-22 17:51

一个中年人的孤独前行

我们这一代人,是上个世纪的人,活在当下,已然成为社会上的中流砥柱。

80年代生人,遥望我们的父辈,均是5、60年代的人,迟迟暮年,夕夕老矣。而我们,正当年,却又时光飞逝,很快便要围炉话当年。别说是80后,即便是90后,在00后,10后的眼里,我们这些人都是上个世纪的人,是古人。

作为不知不觉步入中年的我,我们,不愿记起自己的年龄,女士们也不愿细赏自己岁月的容颜。但是,时间就是这样,不会因为我们的不愿,作任何的停留,依然滚滚向前。

在外工作过,打拼过,拼得一二手艺傍身,也落下一身的病疼,却坚持着前行,除此,还能做什么。

青春不在,年轻的我早已远去,没去过大城市打拼过,没进过顶级的大公司工作过,所学所得也只能是三流水平,在自己的家乡城市,继续奋斗。

作为一个后端开发人员,在北大青鸟学习过,从Java起家,做过J2ME,Android,后来自学PHP,一用至今。去年回北大青鸟做教员,前不久又离职,到企业里工作了。工作都不是很稳定,没有在一家公司待过很长的一段时间,在小城市的小公司,这种情况有主观也有客观原因。

和小伙子们一起走天涯

前不久,刚进入现在这家公司。能顶大梁的,也就只有我一人,其他两个,都是从达内刚毕业的小伙子,一个能干活,另一个基本干不了,但是工作态度还算好。跟我们一起来的,还有一个40多岁的远哥,一周后就走了。

刚开始,是远哥带队,资历比较深,行业经验也很丰富。代码协作工具,用FTP。我说,这样容易引起代码覆盖问题,远哥答道,临时用用。嗯,临时就临时。远哥走后,我用我熟悉的Subversion,来让团队做代码管理工具,用的很顺手。在这之前,我学习了git,没有特别系统的学,跟着廖雪峰的博客入门的,然后又把在青鸟开发的小工具在github上托管了,算是学成之后的实践,基本操作算是没有问题了。

后来那两个小伙子说,在学校的时候也用git,于是我们就把代码管理迁移至git了,希望解决用svn时的烦恼。

svn用的很顺手,版本revert也很好用,但是分支管理不是太好,所以,寄希望于切换到git之后,能体会到它强大的分支管理功能。

参不透的禅

代码从svn切换到git后,两个小伙子有些蒙圈,代码提交都不是很熟。我自己又学习了些git的版本 reset 和 checkout 操作,给他们做了一个简短的培训。

其实如果单纯的用git的命令行工具,可能在某些地方不如 TortoiseSVN 好用,比如文件比较,git命令行就不是特别直观,尤其差异比较大的时候,Side by Side的形式,能很容易看出差异点。

使用git以来,一直让我困惑的地方在于,如何用它强大的分支管理,来管理对应的代码产品线。

目前,我们只建了2个分支,master 和 dev,master对应正式线上的代码,dev上提交正在开发的功能代码。目前我们三个开发人员,每个人负责开发一个功能,分别对应 feature1、feature2 和 feature3,我们把这3个功能都提交并推送到了dev分支,这样大家都可以共享代码了,现在,我负责代码上线,需要将 feature1 和 feature3 上到正式线,而 feature2 暂时不上,此时,如果我切到 master 分支,进行 git merge dev,是不可以的,因为这样会把dev分支上新提交的3个功能,都 merge 过来,这样在将代码上到正式线的时候,可能暂时不需要的 feature2 的功能代码,会影响到线上代码。

我也搜索了相关的解决方案,可以用 cherry-pick,但是 cherry-pick 后,会生成新的 commit id,而并不是真正的 merge 过来,虽然也能达到想要的效果,但心里总是膈应的,隐隐觉得不妥。

我现在已经比较理解工作区、暂存区、代码仓库之间的关系了,理解之后,用 reset 和 checkout 坐时光机来回穿梭,确实非常爽,但是分支合并这块,还没有参透,忘各位指点一二。

每个人仅有的十年

我不止一次的对别人说过,我要用我一生的时间,学会这几样东西:git、linux、vim。把这些放到一生的时间里去学习,有两层意思:一是因为它们确实不太容易学,学习曲线比较陡,二是因为我是一个超级、非常、特别严重的拖延症患者,用一生的时间,意思就是,心情好的时候再说吧 :)

最近我想了想,其实我们每个人都只有十年时间。人生的前20年,都在上学,30岁之前在练剑,而真正黄金的十年,就是我的现在,一个中年人能抗大梁的鼎盛时期,过后,再无十年。

小阴谋

关于 git 如何合理的用分支管理代码的问题,困扰我多日了,想着写一个贴,求教求教,但想着如果仅仅是提问帖,感兴趣的人恐怕不多,所以,写成自己的历程,可能更有看头一些。(原文发表于本人博客,但被移除首页,遂放到博问)

急功近利,是为了解燃眉之急;潜心练剑,是为了功成之日,独步武林。等心情好的时候,一定要通读一边 Pro Git,探究其中的精髓所在,那时,便能游刃有余了吧。

git
问题补充:

我所期待的方案是,大家都在dev分支上操作,然后将需要的上线的功能,如何选择性的 merge 到master分支?

bananaplan的主页 bananaplan | 初学一级 | 园豆:26
提问于:2017-12-20 09:06
< >
分享
最佳答案
0

一个功能一个分支,master 分支是用于正式发布的,最后一次最稳定的版本,(一般也会用到 tag)。

dev 分支是测试分支,每次跑测试都是把 dev 最新代码拿去测试。

 每开发一个功能,就基于 dev 建新一个分支,比如 featureN,然后在featureN上开发。

如果同时还有另一个 featureM,那就再建一个 featureM ,各开发各的。

后期按需要进行合并不就行了?

收获园豆:150
之奇一昂 | 小虾三级 |园豆:1421 | 2017-12-20 10:24

这确实是一种解决方案,但操作上稍微有些麻烦。比如现在有2个功能要开发,于是两个小弟各自在本地创建了自己的分支 featureA 和 featureB,小A同学写完后,把自己的 featureA 分支提交本地,并推送线上,小B同学写完后,也把自己的 featureB 分支提交本地,并推送线上,此时我去 pull 下两个小弟新推送的两个分支,review 代码,合格,将其 merge 到dev分支,并将其中需要上线的 featureA 合并到master分支,在删除没用了的 featureA 分支,收工。
但繁琐的地方在于,我需要 pull 两个分支,完工后,还要删除 featureA 分支。
我所期待的方案是,大家都在dev分支上操作,然后将需要的上线的功能,选择性的 merge 到master分支?

bananaplan | 园豆:26 (初学一级) | 2017-12-20 12:47
其他回答(6)
0

抱歉啊,80后是中年人我认同,90后可不是。

 

再见

 

拆炸弹的文青 | 园豆:212 (菜鸟二级) | 2017-12-20 09:07

好吧,我接受批评,但我并没有说90后也是中年人的意思。不过,90后,已然可以作为中年人的预备队了:)

支持(0) 反对(0) bananaplan | 园豆:26 (初学一级) | 2017-12-20 09:12
0

对于80后的我来说 —— 不做开源项目比较少用这玩意儿,为一个版本管理这么费时费神不值当,所有的工具需要符合场景应用并且简单高效。

不过你有目标是以linux、vim及git为高级玩具那得别谈。这就像有的人开挖掘机既做工具又当高级玩具一样,玩得可以不让别人想像。也祝你玩出程序员的想像吧。

花飘水流兮 | 园豆:13595 (专家六级) | 2017-12-20 09:28
0

svn完全够用,别折腾

81 | 园豆:112 (初学一级) | 2017-12-20 09:53
0

今天我们不聊技术 

当佛系90后缓缓走来 问我

什么是生活

手拿保温杯一点都不油腻的我

只想说 

平平淡淡才是真

ycyzharry | 园豆:25683 (高人七级) | 2017-12-20 12:30
0

说说我现在项目的git管理,master分支是最全的分支,一般在任何分支的改动都会cherry-pick到master上,master一般是后台人员自己测试或者本地跑使用。提测时,会基于master拉出release分支,上测试环境,用于测试人员使用。如果要上线了,那就基于当前release分支再拉出hotfix分支,任何删除这个当前的release分支,hotfix分支一般只有线上bug、紧急修改问题会直接在hotfix上做修改。

对于你提出的这个问题,如果需要紧急上线的话,我们是一般会直接在hotfix分支(上线分支)直接修改的,测试没问题,直接上线,然后再把改动cherry-pick到master分支,至于cherry-pick会生成新的 commit id,而并不是真正的 merge 过来,我也就不清楚这样可能会有什么问题?

我也是90后,我也现在觉得自己就是中年人了 = =! 哈哈……

收获园豆:50
让我发会呆 | 园豆:2929 (老鸟四级) | 2017-12-20 14:59
0

90后加入养生大军,枸杞泡起来。

浪橙悠悠 | 园豆:212 (菜鸟二级) | 2017-12-20 17:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册