一个看起来不像中年人的中年人,带着两个初出茅庐的小伙子儿,用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
随机推荐
- Hadoop 中 最重要的两个模块
Hadoop 中 最重要的两个模块 HDFS 分布式的文件系统 主节点: NameNode SecondaryNamenode ResourceManager 从节点: DataNode Node ...
- 无JavaScript实现选项卡轮转切换效果
CSS: .box{width:200px; height:100px; border:1px solid #ddd; overflow:hidden;}.list{width:200px; he ...
- Problem B: 大整数的加法运算 升级版
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> ...
- Redis的使用初探
Redis Redis将其数据库完全保存在内存中,仅使用磁盘进行持久化. 与其它键值数据存储相比,Redis有一组相对丰富的数据类型. Redis可以将数据复制到任意数量的从机中 Redis的安装 官 ...
- 团队工作准则&贡献分配规则
团队工作准则&贡献分配规则 NewTeam 2017/10/24 v1.0 工作准则及内容 全体成员 所有成员在接受任务时应结合自身情况考虑,如果认为任务内容或时间有不合理之处应当立即提出修改 ...
- mysql数据库事务详细剖析
在写之前交代一下背景吧! 做开发也好久了,没怎么整理过知识,现在剖析一下自己对数据库事务的认识,以前用sqlserver,现在转java后又用mysql.oracle.我这块就主要解释一下mysql数 ...
- 【转】python XML 操作总结(创建、保存和删除,支持utf-8和gb2312)
原文地址:http://hi.baidu.com/tbjmnvbagkfgike/item/6743ab10af43bb24f6625cc5 最近写程序需要用到xml操作,看了看python.org上 ...
- IDEA热部署(二)---jetty插件启动maven项目
jetty插件的配置 我们使用jetty插件来进行启动我们的maven项目,在pom.xml中进行配置: <plugins> <plugin> <groupId>o ...
- AES加密实现
起因 这段时间因为要对接一个外部接口,其参数的加密方式为AES,就需要学下AES的加密写法,但网上的资料不是很全,自己记录下遇到的坑: 基本写法 String str = "hello&qu ...
- linux如何在日志中查找关键字、前几行、结尾几行
如何使用命令行快速查看项目日志是每个开发人员必备技能,尤其在没有专门日志搜集系统的情况下,想要知道目前项目运行状态最好的办法就是打开log日志一瞅即明白. 复杂的到用时再查不晚,但是简单的还是有必要掌 ...