用玩游戏的方式学习 Git

目录

  1. 为什么要学习 Git
  2. 怎么学习 Git
  3. Learn Git Branching
  4. 其他学习资源

用游戏的方式来学习,是一种有趣而高效的方式。

从刚接触电脑时的打字练习软件 金山打字通,到程序猿写代码的利器 Vim 都有小游戏(金山打字通游戏VIM Adventures)来帮助我们入门。当你的目标从掌握技能转变为打通游戏之后,学习本身也就不再痛苦。在完成每一关的过程中,都能增加我们的技能熟练度和成就感。



Figure 1. Lena

而 [Learn Git Branching](https://learngitbranching.js.org/),就是一个用小游戏带你入门的 Git 的网站。

为什么要学习 Git

Git 是一种分布式的版本管理系统,作用和网盘有点类似,但是功能性和灵活性都更强大。如果你是一个计算机专业的学生或从业者,Git 的重要性不言而喻;但是对普通人而言,Git 也有备份数据、保存历史记录等重要作用。

不怕断电、断网

数据无价,但很多时候我们无法保证自己的电脑不出问题。有很多时候我们会怀念上一个小时、前天或不久以前自己写的那些文字、画过的那些图1 ,如何完好的保存数据是个永远的话题。将工作保存在云端也许会增加我们内心的安全感,这也是很多人会用网盘进行备份的原因。

Git 的「本地提交」较好地解决了这个问题,它的工作方式大概是这样:即使没网络,我们也可以先工作,等到连上网络后再打包上传。每个文档的名字都写有主要的工作(修改)内容,而且我们还能清楚地看到文档之间地区别和改动,Git 还会自动把历史纪录保存下来。对于越来越多开始从事移动办公、远程工作的人来说,由于网络环境不稳定,即使他不编程,也能从 Git 中受益。

严肃写作的一个个节点

iOS 上的知名笔记工具 Drafts 会在你写作时,每隔一分钟帮你保存一份当前文档的「快照」,这样就可以方便地找回之前的某个写作版本了。你觉得不满意而删除的一段文字,总可以在历史版本中找回,很贴心。保存写作的历史版本其实就是建立写作节点的过程。而这,也是 Git 所擅长的。



Figure 2. Drafts 的版本记录界面

对于论文、书籍这些严肃的写作内容来说,我们在写作的时候不会频繁的更改。深思熟虑之后,在一个节点时,我们有必要保存一下这一阶段的成果。同时,我们在对以前工作进行修改之后,也希望能便利地显示和以往的不同2 。

Git 最原本的使用方式

Git 是一个分布式版本控制软件,于2005年以 GPL 发布。它最初是为更好地管理 Linux内核 开发而设计。它不需要服务器端软件就可以运作版本控制,使得源代码的发布和交流极其方便3 。

GitHub 是通过 Git 进行版本控制的源代码托管服务4 ,我们每个人都可以把自己的代码托管在上面。同时,也可以看看别人写的代码,相互交流,极大方便了软件项目的多人协作开发,也推动了开源软件社区的壮大。GitHub 所具有的社交性让很多人戏称为最大的同性交友网站(男性用户占绝大多数)。如果你愿意,可以把别人的代码下载到本地随意修改,放心这不会影响他人。总之,在 GitHub 上,大家都用同一种语言进行代码仓库的操作,那就是本文的主角:Git。

如果你想开始学编程,一定想记录一下自己成长的路径。想必也一定会去 GitHub 看一看(来,这里是 按加星数排序的代码仓库),这时学一下 Git 不是顺理成章的吗?

怎么学习 Git

曾经我在好奇心的驱使下去学习最浅显易懂的 Git 教程 廖雪峰的 Git 教程。但经过一段时间之后,我发现自己仅仅会使用 git clonegit addgit commitgit push 等简单语句。之后多次查看 git rebase 的用法,也一直没有理解。我们来看看最基本的几条命令有什么作用:

git clone 克隆:下载远程代码仓库到本地;
git add 添加:添加文件、修改后的文件到暂存区;
git commit 提交:建立本地仓库的工作节点;
git push 推送:将本地仓库推送到远程代码托管服务、网站。

就像很多次把学过的知识还给老师的经历,这次只记住几个简单命令的过程依然没让我失望。这些命令是我平时使用最多的,所以记得最牢,而其他命令只能用到时再去查了。没有经过实践的知识好像无法停留在脑子里。

前几天在 twitter 上闲逛,发现了一个可以交互式学习 Git 的网站 Learn Git Branching。尝试了一下发现效果真的很棒,有一种在玩编程游戏的感觉。回想啃着玩 Human Resource Machine 的经历,证明不在于知识本身多艰深,只要学习曲线不陡峭,咱都能爬上去。

Human Resource Machine

Learn Git Branching

欢迎光临

网站是有中文的,而且界面很不错,给人的第一印象很友好。

关卡选择

关卡选择界面可以看到,有「主要」、「远程」两部分。每一部分的内容不多,覆盖了基本的用法。每一关都是一个模拟的小项目,通过上手操作很容易获得代入感。代码本身的用法在玩游戏的过程中领会到,这种感觉很棒,让人上瘾。

远程部分示范

教程的每一关都有引导,告诉你示范动作是怎样的、会有什么结果。稍作了解之后就可以自己上手探索。模仿之前教的动作,做错了可以 reset 命令从头开始。完成之后,可以用 show solution 命令查看答案。这种即时反馈的学习让过程变得有趣。

提交

从 Git 到 GitHub

说了这么多,简单讲一下具体的流程:

  1. git clone 下载代码到本地。
  2. 创建了自己的文件,或者进行了修改,可以用 git add . 把所有文件加入暂存区,等待建立节点。
  3. git commit -m "这一阶段工作描述" 尽量细化你的节点,别做了很多工作才提交一次呀。
  4. git push 把之前建立的一系列节点推送到 GitHub 发布、保存。
  5. git pull 将 GitHub 的改动同步到本地,比如你在办公室电脑的改动同步到家里,或者多人协作项目中他人的改动同步到本地。

总结一下就是:「记录修改、本地提交、传到云端」的过程。

其他学习资源

除了之前文章中提到的 廖雪峰的 Git 教程 外,还有很多学习资料。比如:

Git 本身不难,但学会之后就是另一方天地。尽快在项目或工作中实践吧!

  1. [借助 Git 对 Sketch 文件进行版本控制 https://sspai.com/post/40595](javascript:

    [少数派]如何学习Git的更多相关文章

    1. 学习 git基础命令

      缘起 年后到了新公司,由于个人意愿到了一个海外的项目组,除了自己从Java技术栈转了C#技术栈外,很多技术都是第一次使用,学习压力不小啊. 自己也就先从常用的技术开始学起,比如C#,AngularJS ...

    2. 学习Git的总结与体会

      学习Git的总结 blog 第一次学习Git是完全按照廖雪峰老师的教程学习的,学的过程中基本上没有遇到什么问题,但是自己实际操作就问题不断了. 首先,还是按照惯例,来膜拜一下廖雪峰老师精简的教程知识吧 ...

    3. 深入理解学习Git工作流

      http://blog.csdn.net/hongchangfirst/article/list/3 //可以看看 http://blog.csdn.net/hongchangfirst/articl ...

    4. [转]深入理解学习GIT工作流

      深入理解学习Git工作流 字数13437 阅读2761 评论3 喜欢70 个人在学习git工作流的过程中,从原有的 SVN 模式很难完全理解git的协作模式,直到有一天我看到了下面的文章,好多遗留在心 ...

    5. 记录我开始学习 Git的路程

      工作半年多了,总觉得没学到什么东西,于是乎找了个Git学习一下,感觉还蛮厉害的样子.为此记录下我的路程 2015,11,26 更新 前面的路都挺艰难的,在官网下载msysgit网速几乎为0(心情千万只 ...

    6. 推荐一个可视化的学习Git的好网站:LearnGitBranching

      博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:推荐一个可视化的学习Git的好网站:LearnGitBranching.

    7. 发现一个不错的学习git的地方

      Git入门:http://rogerdudler.github.io/git-guide/index.zh.html 简洁.实用.高效的学习git基本操作的方式

    8. 深入理解学习Git工作流(转)

      个人在学习git工作流的过程中,从原有的 SVN 模式很难完全理解git的协作模式,直到有一天我看到了下面的文章,好多遗留在心中的困惑迎刃而解,于是我将这部分资料进行整理放到了github上,欢迎st ...

    9. 深入理解学习Git工作流(git-workflow-tutorial)

      转载:https://segmentfault.com/a/1190000002918123#articleHeader11 人在学习git工作流的过程中,从原有的 SVN 模式很难完全理解git的协 ...

    随机推荐

    1. 新装 Win7 系统装完驱动精灵,一打开到检测界面就卡死——原因与解决方案

      1.现象: 重装系统后,鼠标反应慢,且不能上网.因此装了个驱动精灵,准备更新下驱动,但驱动精灵一打开到检测界面就卡死(换驱动人生.鲁大师也一样). 2.原因: Win7 系统 iso 中自带的驱动程序 ...

    2. 1.PHP与Web页面的交互

      一.概览: PHP是一种专门用于Web开发的服务器端脚本语言.从这个描述可以知道,PHP要打交道的对象主要有服务器(Server),和基于Web的HTML(超文本标识语言).使用PHP处理Web应用时 ...

    3. mongodb安装使用简单命令

      .window+x,A,管理员进入cmd.cd C:\Program Files\MongoDB\Server\3.4\bin.安装:mongod --dbpath "D:\work\DB\ ...

    4. scrapy 爬取豆瓣互联网图书

      安装scrapy conda install scrapy 生成一个scrapy项目 scrapy startproject douban settings文件 # -*- coding: utf-8 ...

    5. LinkedHashMap 根据PUT顺序排序Map

      最近工程里面报表需要合计 , 因为所有的项都是动态的,所以只能动态添加. 思路是使用Map,初始化所有Map,然后在Map中合计并且覆盖. 使用HashMap , 初始化后所有动态项的顺序都乱了. M ...

    6. Lua + Redis 解决高并发

      一.业务背景 优惠券业务主要提供用户领券和消券的功能:领取优惠券的动作由用户直接发起,由于资源有限,我们必须对用户的领取动作进行一些常规约束. 约束1(优惠券维度): 券的最大数量 max: 约束2( ...

    7. ucos中消息队列的应用(二)

      继续说任务间的通信. 本次的任务是在ISR中发送一个消息给任务,ucos的代码中的是非常之简洁和容易理解啊.创建,释放,等待,非常好理解,不再赘述. 说说我遇到的问题,数据帧接收完之后,向消息队列发送 ...

    8. Linux - 文件和目录常用命令

      文件和目录常用命令 目标 查看目录内容 ls 切换目录 cd 创建和删除操作 touch rm mkdir 拷贝和移动文件 cp mv 查看文件内容 cat more grep 其他 echo 重定向 ...

    9. mysql-----04 多表查询

      本节主要介绍mysql的多表查询(多表连接查询.复合条件查询.子查询) 一.多表连接查询 #重点:外链接语法 select 字段列表 from 表1 inner|left|right join 表2 ...

    10. I/O多路复用之 epoll 详解

      1,epoll 原理(POLLIN,POLLOUT 状态): https://blog.csdn.net/hdutigerkin/article/details/7517390 https://blo ...