一个看起来不像中年人的中年人,带着两个初出茅庐的小伙子儿,用git管理项目代码的进击之路
一个中年人的孤独前行
我们这一代人,是上个世纪的人,活在当下,已然成为社会上的中流砥柱。
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管理项目代码的进击之路的更多相关文章
- 亿财道APP赚钱攻略,亿财道,一个看广告年入36万的APP
亿财道(http://etway.net/),一款看广告(传单)赚钱的软件,这是一项革新的广告产品,代替了以往的纸质传单.在商家节约成本的同时,还给阅读者佣金,推广也有相应提成比例. ...
- Qt见解:Post 与 Get 的区别(Get将参数直接与网址整合为一个整体,而Post则将其拆为两个部分)
第一次接触Qt的Http项目,今天看了一下Post和Get的基本使用方法,就开始尝试了.原先以为Post专门用于向服务器发送请求,然后接收服务器应答的: 而Get只是单纯从服务器获取资源,比如下载这个 ...
- GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟。
GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟. 支持输出多种格式 GitBook支 ...
- 一串数字中,只有一个数字出现一次,其他数字都出现两次,查找出这个数字(python)(原创)
背景: 电话面试&手撕代码 2019.03.22 Mufasa 问题: 一串数字中,只有一个数字出现一次,其他数字都出现两次,查找出这个数字 条件: 这串数字是有序数 解决方法: 核心代码只有 ...
- 一个相对通用的JSON响应结构,其中包含两部分:元数据与返回值
定义一个相对通用的JSON响应结构,其中包含两部分:元数据与返回值,其中,元数据表示操作是否成功与返回值消息等,返回值对应服务端方法所返回的数据. public class Response { pr ...
- 创建一个版本库,把文件夹用Git管理起来
创建一个文件夹,把这个文件夹用Git管理起来,那么这个文件夹的改变都可以被Git跟踪到,当然也可以将Git中的文件还原到某一个时刻. 首先创建一个空的目录,然后将空的目录由Git来管理 1.建立一个文 ...
- 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式。 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Compl
因标题框有限,题目未显示完整,以下再放一份: 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Compl ...
- 【iview input 回车刷页面bug】input 就一个的时候 有form的时候 回车会刷页面,如果就一个input,可以不要form,或者form里面两个input 将一个input v-show false 就可以了
[iview input 回车刷页面bug]input 就一个的时候 有form的时候 回车会刷页面,如果就一个input,可以不要form,或者form里面两个input 将一个input v-sh ...
- 开源一个Mac漂亮的小工具 PPRows for Mac, 在Mac上优雅的计算你写了多少行代码
开源一个Mac漂亮的小工具 PPRows for Mac, 在Mac上优雅的计算你写了多少行代码. 开源地址: https://github.com/jkpang/PPRows
随机推荐
- C Run-Time Error R6034问题的解决
1.问题描述 这两天一直在用vs2008编写一个小项目,需要在c++代码中通过命令行的方式调用cl.exe和link.exe,也就是给编译器cl和链接器link传递参数,然后编译链接生成可执行文件ex ...
- Towers CodeForces - 229D
The city of D consists of n towers, built consecutively on a straight line. The height of the tower ...
- 使用weinre远程调试
1.调试环境: 1)使用nodejs搭建调试服务器: 先安装node,然后使用npm安装weinre,在node.js安装目录输入以下命令 npm install weinre 2)需要wifi环境和 ...
- vue实现仿淘宝结账页面
这个demo,是小颖基于之前的 vue2.0在table中实现全选和反选 文章进行更新后的demo,主要功能呢,是仿照淘宝页面的结算购物车商品时自动算出合计价格的页面,具体页面效果请看下面的动图: ...
- Lombok 使用小结
Lombok 简介 Lombok 是一种 Java 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO).它通过注释实现这一目的.通过在开发环境中实现 Lo ...
- 机器学习,安装python的支持包
windows10,64位: 以下命令行安装均在python目录下,对应的whl文件也被我拷贝到python目录下: http://www.lfd.uci.edu/~gohlke/pythonlibs ...
- Mybatis主配置文件常见使用讲解
在开发中我们通常将Mybatis中配置文件分两种,主配置文件与和dao对应的映射文件. 其实最后mybatis解析的还是一个主配置文件. 而映射文件会通过我们配置<mappers>属性,或 ...
- [转载] Java安全体系简介
转载自http://blog.csdn.net/jbossweek/article/details/1458468 一.设计原则 独立性 安全服务独立于具体的应用,应用不需要单独实现,只需通过请求就可 ...
- websocket做手机页面聊天与PC页面聊天一对一的即时通讯
当时要写这个需求的时候,很头痛,手机端页面的客服功能,相当于QQ这样一个一对一聊天室功能了,瞬间蒙蔽的我也不知道用什么去写这个东西,一开始用ajax,定时器去写,写着写着发现这尼玛不在同一个页面怎么做 ...
- 项目实战4—haproxy 负载均衡和ACL控制
haproxy实现高级负载均衡实战 环境:随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务提供,不在和pc站点一起提供服务 ...