这个事情说起来又是很尴尬的一件:在平时练习的时候将部分代码有做过提交到GitHub的一段经历,恰巧在实习时公司从SVN转到了Git,本来以为轻松Easy,但是后来发现代码冲突很是可恨,因为 没有深究Git的原理,翻了次车,撸了的五十来行代码全部喂了狗,还好只是小功能,但是后续可不能这么玩,会出大事的。
由于老早之前装了Git,对于安装不想多说了,况且来了版TortoiseGit,连Eclipse的插件都省了。顺便说下我之前的工作方式:因为是独行玩家,不涉及代码冲突,一般是按照将远程仓库Clone到本地然后add . 然后就commit push 一路下来十分无脑,所以才有了这次的喂狗场景。
安装完成的我直奔公司的Gitlab而去:
- 打开本机命令行控制台 (windows系统使用git安装目录下的 git bash工具进入)
- 输入 cat ~/.ssh/id_rsa.pub 查看是否已经存在证书
- 若没有证书,输入 ssh-keygen -t rsa -C “你的邮箱地址” ,这里替换成你的公司邮箱,然后一路回车,完成证书创建
- 再次 cat ~/.ssh/id_rsa.pub ,复制输出的公钥内容
- 登录gitlab -> 右上角下拉菜单 -> Profile Settings -> SSH Keys标签, 然后粘贴自己的公钥内容并保存。
- 在本机输入 ssh -T git@gitlab.hbc.tech 测试ssh连接gitlab是否成功。
关于本地配置:设置用户和连接
git config --global user.name "xxx" git config --global user.email "xxxx@gmail.com"
当然也可以在Eclipse使用图形用户界面无脑填。
设置忽略文件
这个还是非常有必要的,本地测试的log,你自己配置的本地环境properties,全部合并入master是件很弱智的事情。
*~ .DS_Store .classpath .gitignore .project */.settings .settings .idea *.iml target 然后一句 git config --global core.excludesfile xxx
当然这里可以用Eclipse手动打开ignore手动填写
开始操作
其实在没有冲突和分枝的情况下操作无脑:写完Commit 然后 Push,换电脑fetch拉标签然后 pull。这里着重关注下出现冲突时的处理。
情况是这样的:我在没有fetch的情况下(或者对面的大哥和我同时动手),他在我之前修改了代码,而我却没有拿到最新的代码,然后我对着原来的代码撸了一顿,在commit的时候发现无法push,这样的状态其实很容易遇到(多人开发很容易这样子),这个时候其实处理的办法还是很简单:
1:http://blog.csdn.net/tototuzuoquan/article/details/47138765
2:https://www.cnblogs.com/ultrazb/p/3843456.html
其余其实完全可以用bash来搞啊- 暂时到这
对了,附一篇Git原理:http://blog.jobbole.com/26209/
这里是12/27。我他喵的因为不熟悉命令被坑了:由于我所负责的功能模块较为简单,就是十几行代码的事情,所以我决定等待团队完全提交完他们的代码后再更新(之所以团队要整个都提交是因为前天项目组某“大神”先是merge,然后开发觉得尿性不对就又revert,然后好像出了很大的问题,我们当前的开发版本更新不到稳定版本当中,真是就萌萌了)而我在下午开始干事的时候代码冲突,然后我fetch merge一条龙,然后status 发现有冲突,手动改掉,commit,push一气呵成。我觉得自己很完美,正准备美滋滋的继续画图时发现:我push了 700多个文件的请求。我可去你的。。然后就发觉很有问题,左思右想也没发现问题出在哪里,我毕竟学习过命令了,然后拉分支reset push又一气呵成,然后pull之后进入mering状态,又发现有900+的文件modified。。。我:.....
玩Git次数不多,这里附上自己的之前排查Blog:
https://www.2cto.com/kf/201606/521018.html
这里是12/29。今天彻底解决的一些难缠的问题。得出以下一些结论:如果是敏捷团队的开发,记得在开局git pull(亦或者git fetch+merge),当然在开发模块较大时很有必要拉取自己的分枝,别跟着版本的小分枝(有利于解决冲突和代码回滚//手残之后就会发现这点有多Nice了),剩下一点就是多记得和团队交流,很多问题其实人为去避免就能干掉很多问题。最后祝好(我的deploy有毒)