为什么80%的码农都做不了架构师?>>>   


一、什么是 Git

请自行 google

二、Git 与 SVN

http://www.jianshu.com/p/bfec042349ca 这里说的都是对的

但是在实际工作中,分支即是 Git 与 SVN 没有区别又是与 SVN 区别最大的部分,说它没有区别是因为 SVN 也有分支,说它有区别是因为使用 Git 可以把分支的特性充分发挥而不需要花费太高成本(时间),而 SVN 的分支在实际工作中却不是那么多人愿意去用的。

另一个有用的区别是分布式,Git 会在本地建立完事的版本库(Local Reposity),这对混合使用 VCS 非常有帮助,你可以按照自己的想法来管理版本,建立 Git 库的成本却只有一句命令

git init

而后只需要保持其中一个分支与团队中使用的版本库同步即可。

三、接受 Git 的理念

3.1 提交=完成一小件事

首先,Git 的提交与 SVN 相比,它更鼓励一次提交所有变更,而 SVN 可以比较方便地选择性提交或更新部分代码到最新版本,见到过很多开发都喜欢这么干,以保持代码在本地能够正常运行,但这么做的缺点也显而易见,一是容易遗漏,不管是 commit 或 update,一旦遗漏就可能出现莫名其秒的问题,最后,噢,我怎么把 XXX 提交上去/更新了。

其次,默认情况下,Git 强制在提交时填写提交说明,而 Svn 可以什么都不写(出问题,你猜呀!),我也用过 SVN,在使用 SVN 的那段岁月也曾不写任何提交说明,为什么不写?不是不想写,是不知道有什么好写的,因为很多时候,提交涉及的变更可能只是某个/多个功能点改进的一部分,都不知道该怎么描述或者要描述清楚得写一大堆,谁有这功夫,干脆不写最方便。

代码的变更,都是有目的的,如果我们能够把每次代码变更的目的想清楚,那是不是就可以根据变更目的来填写提交说明?

Bingo,改进工作方式第一点:Coding 前想清楚目的(为了改#88号 Bug,为了增加 xxxAPI等)。让每一次 commit 有意义,而不是把 commit 变成下班打卡。

3.2 合并=一系列事情的集合=一次有用的变更

VCS 的目的是记录变更,便于后期追溯问题,但如果某次变更涉及的文件或变更内容过多,这将增加问题追溯的困难,那么如何才能更好地追溯问题呢?

控制粒度。为达到变更目的,并不一定都是非常简单的变更,变更可能会涉及多个方面,比如增加一个新功能时,可能涉及到服务端 service、dao 开发、页面功能开发,可以把其中一小件事作为一次提交,而多个提交处于同一个分支,在所有变更完成后再把分支全部合并到与团队同步的分支上,表示完成某一件事情(业务)。

3.3 分支=隔离变更

隔离:不同分支可以按照自己的目标发展,而不需要关心其他分支的变更所产生的影响。举个例子:当你正在为增加某一个功能点而噼里啪啦敲击着代码时,突然测试妹子跑来跟你说某 bug 调皮捣蛋了,你得马上管管。没有分支怎么办?写了一半的代码是提交还是不提交?有 SVN 玩得溜的同学:嘿,你让一让,写了一半的代码当然不能提交,先看一下线上变更情况,再选择性地更新部分代码,然后改完 bug,再选择性地提交只与 bug 相关的代码,搞定!OMG,这也行?还真行,就是比较费脑子,本来 VCS 该干的活全让这位同学给干了。换成分支会是什么情况?

git add .
git ci -am 'Template commit' #use git ci --amend fix template commit
git co master #any problem branch
#fix problem
git add .
git ci -am 'Fixes #88'
git co feature-yourbranch
#continue coding...

别看这么一堆代码,想要表达的意思很简单:切换到问题分支,改完提交,再换回当前分支继续之前的代码。

切换:隔离会带来什么样的情景?某分支用来开发新功能,某分支用来修复某个 Bug,某分支用来与别人同步协作,隔离带来的好处不言而寓,切换就是实现这些隔离的切换,为什么要提切换呢?因为真的很重要,也真的很方便

git co 目标分支

所以,代码变更,切个分支,养成好习惯

四、分支管理策略

http://blog.jobbole.com/23398/

http://kb.cnblogs.com/page/132209/

核心是理解下面这个图:

每个分支都是有意义的(某个里程碑版本、某个 BUG 修复的版本),没有分支,我们会忽略某些重要的提交

五、一些可以让你事半功倍的配置(如果你只对 GUI 感兴趣,请略过)

1. 简化 git 命令

git config --global alias.lol "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" #git lol --all 看效果
git config --global  alias.st status         #git st -s
git config --global  alias.ci commit         #git ci -am 'commit.'
git config --global  alias.df diff           #git df
git config --global  alias.co checkout       #git co master
git config --global  alias.br branch         #git br -av

2. 简化 shell 命令

http://man.linuxde.net/alias

alias gst="git st -s "
alias gad="git add . "
alias gbr="git br -av"
alias glog="git lol --all"
alias gup="git remote update"
#你懂的

六、总结

Git 不仅仅是个版本管理工具,理解 Git,掌握 Git,让 Git 帮助减少问题的产生,提高生产效率。

相关连接:

话说Svn与Git的区别(以后别再问我了):http://www.jianshu.com/p/bfec042349ca

阮一峰:Git分支管理策略:http://blog.jobbole.com/23398/

GIT分支管理是一门艺术:http://kb.cnblogs.com/page/132209/

Alias 命令:http://man.linuxde.net/alias

转载于:https://my.oschina.net/mays/blog/665416

使用 Git 改进工作方式相关推荐

  1. Git中的merge命令实现和工作方式

    想象一下有如下情形:代码库中存在两个分支,并且每个分支都进行了修改,最后你想要将其中的一个分支合并到其他的分支中.个人博客网址 http://swinghu.github.com/ 那么要问合并的处理 ...

  2. GIT--改变使用 Git 工作方式的七个技巧

    这些有用的技巧将改变你使用这个流行的版本控制系统的工作方式. Git 是目前最常见的版本控制系统之一,无论是私有系统还是公开托管的网站,都在使用它进行各种开发工作.但无论我对 Git 的使用有多熟练, ...

  3. 超越Android:Kotlin在后端的工作方式

    by Adam Arold 亚当·阿罗德(Adam Arold) 超越Android:Kotlin在后端的工作方式 (Going Beyond Android: how Kotlin works on ...

  4. Git的工作流程简介

    目录 Git的工作区域 Git的基本流程 1.将工作区的代码添加到暂存区 2.将暂存区的文件提交到本地仓库 3.将暂存区的文件提交到远程仓库 Git的工作区域 Git的基本流程 图形化方式操作 命令行 ...

  5. 关于对于工作方式的一些总结。

    对于最近做的北京NTT项目的总结 最近做了一个北京的项目,虽说寄存不是很好(其实是非常不好),而且没有原来的式样.这次开发时的式样写的 也不是很细.但是我觉得,通过这个项目让我学习到了很多东西! 首先 ...

  6. CLIP改进工作串讲(上)

    CLIP改进工作串讲(上) 本文为 CLIP 改进工作串讲(上)[论文精读] 的学习笔记. CLIP 改进方向 语义分割 Lseg.GroupViT 目标检测 ViLD.GLIP v1/v2 视频理解 ...

  7. 李沐论文精读系列四:CLIP和改进工作串讲(LSeg、GroupViT、VLiD、 GLIPv1、 GLIPv2、CLIPasso)

    文章目录 一.CLIP 1.1 简介 1.1.1 前言 1.1.2 模型结构 1.1.3 模型效果 1.1.3.1 对自然分布偏移的鲁棒性 1.1.3.2 StyleCLIP 1.1.3.3 CLIP ...

  8. macOS 更新后 Git 无法工作(xcrun: 错误:无效的活动开发者路径 (/Library/Developer/CommandLineTools)

    问: 我更新到 macOS Mojave(这也发生在 Catalina 更新中,并且似乎可能发生在此后的每次重大更新中) 今天早上,我在 MacBook Pro 的命令行中导航到我工作的代码库,在存储 ...

  9. CLIP 改进工作串讲(下)

    CLIP 改进工作串讲(下) 本文为 CLIP 改进工作串讲(下)[论文精读] 的学习笔记. 图像生成 最近一年图像生成领域扩散模型大火,尤其是文本生成图像,DALL-E.imagen 等工作层出不穷 ...

最新文章

  1. Pliops XDP(Extreme Data Processor)数据库存储设计的新型加速硬件
  2. Oracle 11g 数据类型
  3. Windows(64位IIS)未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
  4. linux 下查看log实时输出
  5. 如何将dtb反编译成dts
  6. vs如何写多线程_java中的多线程的示例
  7. eclipse连接MySQL
  8. ICCV2021-PiT-池化操作不是CNN的专属,ViT说:“我也可以”;南大提出池化视觉Transformer(PiT)...
  9. event对象在IE和firefox下兼容写法
  10. FISCO BCOS 区块链交易流程 区块
  11. python和vb编程哪个好_自学编程是从python还是从vb好
  12. Json转对象 调用toBean
  13. linux安装vim不成功,centos安装vim失败解决
  14. 理论知识:电感感应电压公式,纯电感正弦电路感应电压公式,纯电容正弦电路电流公式的推导
  15. 计算机桌面图标右上角出现双箭头符号,电脑桌面图标有箭头怎么办 电脑桌面图片箭头去掉方法【图文】...
  16. PS打造唯美冷色调照片
  17. SSM框架搭建,及遇到的问题
  18. 《计算机视觉与图像处理》最全总结之就业必备-小白易懂易上手
  19. Doom Emacs入门:通过Doom Emacs框架搭建一个基本的Python开发环境及其基本操作
  20. ROS-3DSLAM(十六)lvi-sam项目总结

热门文章

  1. 日志采集框架Flume以及Flume的安装部署(一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统)...
  2. systemd的程序自启动脚本编写
  3. curl命令的超时时间
  4. RocketMQ架构模块解析
  5. NBU备份之一 Windows操作系统BMR的配置
  6. 【有奖征文】如何提高IDC机房服务器的安全性
  7. HADOOP2单机版
  8. 等待时间clientNYOJ 179 LK's problem
  9. CISCO与华为3COM路由器配置差别
  10. Matlab画地球剖面图,分享用matlab显示地震记录的波形变面积图