一个看起来不像中年人的中年人,带着两个初出茅庐的小伙子儿,用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--我发现,原来你是这样的JS:面向对象编程OOP[2]--(创建你的那个对象吧)
一.介绍 我们继续面向对象吧,这次是面向对象编程的第二篇,主要是讲创建对象的模式,希望大家能从博客中学到东西. 时间过得很快,还是不断的学习吧,为了自己的目标. 二.创建对象 1.前面的创建对象方式 ...
- c++学习笔记---05--- C++输出输入小结
C++输出输入小结 题目: 这个程序将向用户提出一个"Y/N"问题,然后把用户输入的值赋值给answer变量. 要求: 针对用户输入'Y'或'y'和'N'或'n'进行过滤: 发掘程 ...
- SQL Server远程连接(2)
- 五:Token问题和使用详解
什么是Token? Token可以理解为令牌,服务端通过验证Token,来判断你是否有这个操作的权限.Token的重要特性是有效性,一般Token只在一定时间范围内有效.下图是登录模块的一个流程图,展 ...
- HtmlImageGenerator乱码问题解决、html2image放linux上乱码问题解决
使用html2image-0.9.jar生成图片. 在本地window系统正常,放到服务器linux系统时候中文乱码问题.英文可以,中文乱码应该就是字体问题了. 一.首先需要在linux安装字体,si ...
- ROS wiki 学习(1)创建程序包时遇到的rosdep update出错
1. 使用turtlebot官网的ubuntu14.04走ROS维基时,在创建程序包后出现错误. 按照提示执行之后,出现以下错误. 搜寻度娘,几经波折后,终于解决.解决过程如下: 首先删除默认文件20 ...
- mysql全日志添加时间戳以及SQL多行问题处理(更新)
需求引入 在日常运维中,DBA可能经常会查看某个Query_Id对应哪些SQL,例如追查大事务问题:也可能业务端需要查看某时间端内所有SQL. 然而mysql在输入全日志的时候没有在每行SQL前打印时 ...
- 《Linux命令行与shell脚本编程大全》第十三章 更多的结构化命令
本章讨论bash shell的循环命令for.while和until 13.1 for命令 重复执行一系列命令在编程中很常见. bash shell提供了for命令,允许你创建一个遍历一系列值的循环. ...
- 斯坦福大学自然语言处理第一课——引言(Introduction)
一.课程介绍 斯坦福大学于2012年3月在Coursera启动了在线自然语言处理课程,由NLP领域大牛Dan Jurafsky 和 Chirs Manning教授授课:https://class.co ...