美文网首页GitHubGit
Why Git? Learn It!

Why Git? Learn It!

作者: zvving | 来源:发表于2016-01-09 15:58 被阅读98次

    一次 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,成就了最大的程序员社交网站,也极力促进了开源社区的发展。

    相关文章

      网友评论

        本文标题:Why Git? Learn It!

        本文链接:https://www.haomeiwen.com/subject/gjhqkttx.html