Why Git? Learn It!

一次 git 入门使用分享的大纲整理,适合新手入门。

总览

  • 为什么要用 Git?
  • Git + SourceTree + Gitlab 的使用演示
  • 提醒和推荐

为什么要用 Git?

  • 一个工具、一套方案,解决源码管理的问题

对于版本控制,我们需要什么?

  • 代码历史追溯
    • 某一次提交的改动(SVN,Git)
    • 某一个功能的改动过程(好的提交习惯更重要,在多人协作情况下提交历史更清晰)
  • 协同开发
    • 用分支来隔离上线与开发中的代码
    • 多人多线并行开发:1 人对 N 线,N 人对 1 线都有可能

秒极定律
一件事情如果能控制在 10s 内完成,人们就会极频繁的使用它。
举栗子:

  • docker 被推崇,从虚拟机到 Vagrant 到 docker,碰到了秒级定律
  • 持续集成,快速迭代

秒级的代码管理?

  • 本地代码飞快变化至任意历史提交记录:SVN 30s-2min;Git 秒级
    • 工作状态快速切换
  • 代码提交速度飞快:SVN 受限于网络速度;Git commit 秒级,push 受限于网络速度
  • 代码创建、切换、合并分支飞快:SVN 速度慢,很麻烦;Git 赞!
    • 勇于原型探索,历史清晰,易调整方向,易新建,易弃用
    • 与 code review 结合

SVN 比 Git 好在哪里

  • 更简单,符合原有自主文件夹管理版本的心理预期
    • Git 暴露概念过多,学习曲线陡峭,这点不如 hg
  • SVN 有目录级的权限控制
    • 适合大中型中间件软件公司:目录划分权限,职能长期固定
  • 也许还有其它,我不清楚

Git 真实的影响力

I'm an egotistical bastard, and I name all my projects after myself. First Linux, now Git.
—— Linus

  • 在 2016 问这个问题对互联网来说已是大势所趋
    • npm + pip 均托管在 Github
    • OpenJDK 使用 Hg(Mercurial)
    • Github 早已一统开源天下,Java 概莫能外
  • SVN 与 Git 二分天下,但 Git 占据的是互联网明星创业公司和 BAT 的优秀团队,为何?
  • 会 Git 找工作是加分项
  • 学习版本控制的另一种思维方式(学习一门语言就是学习一类思维方式)

一些问题

  • Git 不能直接解决目前后端的开发环境
    • code 规范的 branch 流程
    • 依赖,理清 maven 依赖和配合方式
    • 秒级上线(测试、预发布、正式)
    • 相应(尽可能少人力介入的)自动化测试、监控

Git + SourceTree + Gitlab 的使用演示

Git 使用流程示意图

local repo

  • 用 SourceTree 初始化一个本地项目
  • 小步提交,介绍 staged 的用法
    • stage or unstage or discard
    • stage 某一行代码
  • 一次提交
  • 介绍 master 分支及 branchs 界面
    • 留意 commit 编号
  • 创建一个分支 feature/login
  • 新建 login.java 文件,index.html 加一行代码
  • commit,观察分支树变化
  • 切换分支,观察代码变化
  • 创建一个分支 feature/share
  • 新建 share.py 文件,index.html 改一行代码
  • commit,观察分支树变化
  • 切回 feature/login,临时处理事情,再切回 feature/share
  • feature/share 分支删几行代码,再提交一次
  • feature/share merge to master 分支,观察分支树变化
  • feature/login merge to master 分支,处理冲突
  • 初始化 Git-flow
  • 新建 feature/school 分支,commit once
  • 用 Git-flow-gui 完成 feature/school 分支
  • 留意刚才的所有提交都在本地,思考与 SVN 区别(很像,只是分支极灵活)
  • Q&A

Gitlab

  • 注册帐号,ssh-key 授权(略)
  • 介绍 Gitlab 结构:team-project
  • 新建项目 test-repo
  • 留意空项目向导,复制代码库 url
  • 本地配置 remote-url,观察 remotes 变化
  • push,注意是 push 多条分支,留意 local-remote 分支对应关系
  • 再看 remotes 变化,分支树变化
    • remotes branchs 与 local branchs 一致
    • 分支树中多了 origin/*
  • 观察 Gitlab 界面变化
  • 介绍 Gitlab 单个项目界面
  • Q&A

来一次典型的开发过程(包含 code review)

  • 保证在 develop 分支,pull 最新代码
  • 网页端提交 readme 文件,造成 origin 变化,介绍 fetch,注意 branchs 变化
  • 重新 pull
  • 用 Git-flow-gui 建立 feature/news 分支
  • 产生两次 commit(包含 rename 文件)
  • 留意分支树变化,注意 Gitlab-web 端不存在刚才的提交,push,再对比
  • Gitlab-web 端新建 merge-request, 留意 source-branch, target-branch, title, ass
  • 被指派者 review 代码,web 端回复建议
  • 根据建议产生新的 commit,同时 push
  • 刷新 web 端观察变化:查看一次 commit,查看全部 changes
  • 被指派者回复 LGTM(look good to me),点击 merge
  • 回到 SourceTree,观察分支树变化,fetch 再看
  • 切回 develop 分支
  • Q&A
    • 有冲突 merge 按钮会不可点击,merge develop to work_branch ,在 develop 分支外解决冲突,commit&push,merge 按钮就可点击了
    • 可方便的与自动化测试等结合起来

提醒和推荐

一些提醒(坑)

  • 初次使用 Git,注意设置 git config --global email&name
  • Windows 下的 Git 使用的确有些不便(不过我不熟悉,也不清楚具体问题)
  • 授权方式推荐 ssh-key
  • 忽略文件的配置
  • 着手代码前思考终极问题:『我在哪里,要去何处?』(先认清所在分支,pull)
  • commit 已经 push 到远端了,这个时候不要想着再去修改了
  • 学习新东西,坑总是有的,多填了也就会了

一些推荐

  • 强调思路,记住秒级定律,效率为王
  • 小步提交,每小时至少提交一次
    • 一次任务的实现过程:整体设计,框架(类),接口,单元测试,实现
  • 完整提交,完整提交,必须完整提交!不该有任一个提交项目不可运行。
  • 保证非工作期间,工作区间干净
  • 不想提交但要切换分支处理事物用 stash 处理
  • Github 经常被 X
    • coding.net 代码私有库托管可以用。找开源代码,永远是 Github
    • Google 也是被 X。珍爱生命,自配 VPN
  • 国内 Git 私有库托管推荐 coding.net,国外推荐 bitbucket(支持hg) 和 Gitlab

其它

  • 依赖(迷信)工具不可取,但工具会影响思维方式,而思维方式非常重要

举例:
SVN 的思维方式决定了 diff patch 的开源合作方式。交流不顺畅,实现思路难以程现,这种合作方式很长时间里都是高端人士的特权。
Git + Github 催生了 fork,成就了最大的程序员社交网站,也极力促进了开源社区的发展。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容