第02课: Git 在 GitHub

什么是 Git

最任性的文件系统

简单的说, 就是 Linux 的创建人 ,Linus 受够了又贵又不好用的商用版本管理系统, 然后用两个星期自己完成了一个, 又用很短的时间,将上百万行代码量的 linux 工程, 整个儿迁移到 Git 中, 然后突然间, Git 就变成了 IT 界最火最COOL 的版本管理系统了。

为什么 GitHub 选择了 Git?

因为其它 VCS 都已被很好的支持了

故事是这样的, 早期的 Rails 多人协作开发团队,在代码提交和协作时遇到了很多的麻烦. 为了解决团队之间开发协作困难的这一个问题,创始人 Scott 和其他3个程序员朋友,决定完善一个基于 Git 的代码分支管理工具,用来帮助 Rails 项目本身的开发。

然后发现, 这个临时的, 包含了开源社区三件套:

  • VCS
  • buglist
  • wiki

将原先分散的, 各自独立的平台中, 一个新特性从代码到任务/测试/bug 对应的太多分散资源, 集中在了一起;爽利太多, 干脆就将此工具, 独立发布成为了一个全新的 Git 托管平台:

GitHub

意思就是聚焦 Git 的 Hub 。

Git 的核心能力

信任

其实, Git 之前, 类似的 DVCS ~ 分布式版本管理系统已经发布了好几个了。 之前提及的 hg( Mercurial )就是。

相对传统的中央式版本仓库, DVCS 最大的不同就是, 一个项目所有代码/文档的所有版本, 并不存在一个中心仓库来集中式管理, 而是所有成员的本地仓库中都包含所有历史版本。

那问题来了, 大家怎么协同呢?

这就是 Github 要解决的问题:

  • 新人有地方发现好项目
  • 所有成员,有一个相对稳定的仓库来进行协同
  • 当然,后来 GitHub 发现并解决了更多的真实协同问题

也就是说,基于 DVCS 仓库进行版本协同时,所有参与者的信任度是相同的, 所有人可以对所有代码以及代码的所有历史版本任意访问, 并发布自己的修订。

而传统中央式 VCS 必须由管理员分配权限,才能对指定的目录以及版本进行访问。

而这种对成员的无限信任, 虽然也引发了更多问题, 但是,从根儿上解决了大家参与的动力问题, 所有人的所有行为,通过 Git 所有人都可以持续关注, 任何人的任何努力,所有人都得以客观的注意到。

同时,任何 Git 操作或是代码问题,也意味着所有参与者都能立即知道, 这同时也反向给了 Git 用户一个强烈的暗示:

可以作任何事儿
但是,请保证确实知道这么作的后果
并有能力承担引发的问题

这样, 解放原先管理员的维护压力的同时, 也无形中逼所有人自觉的先认真完成了 Git 的学习,才开始使用 GitHub, 这样带来的好处有很多, 最大的一个, 可能是:

GitHub 变成用心学习才能上手的项目空间
从一开始就竖立了坚固的可信任印象

从而, 进一步的, 也等于对所有 GitHub 用户完成了事先的的能力检验, 大家的 GitHub 帐号简直变成了当初 gmail 帐号一般的圈内人认证特征。

GitHub 对 Git 的支持能力

full

甚至于,GitHub 后来有钱了,看不过市面儿上的 Git 桌面工具,自己开发了一个 GitHub Desktop

来可视化 Git 的各种高级操作。

不过,讲真,不是 Linux 那种深厚的巨型项目, 普通的 Git 仓库,根本用不了太多复杂的 Git 操作,常用的就几个:

  • clone (一次性的)
  • st
  • ci
  • co (常常也是一次性的)
  • pu
  • add
  • …… 嗯哼, 没了

应该在仓库中嗯哼什么?

版本仓库中应该放什么?

这个问题, 太基础, 基础到几乎没人说的明白……

因为得从 VCS 中的 V 说起:

  • 什么是“版”?
    • 中国图书版本学中描述
    • “说文解字”: 判也,从片,反声
    • “说文通训定声”: 判木为片,名之为版
    • 最早是动词,后来变迁为文字载体的通称,在纸发明前,文字是记载在各种各样材质的“版”上的
  • 什么是“本”?
    • “太平御览”: 定以杀青,可缮写,上素为定本
    • 即,书之原本,
    • 一部书在内容形式上的表现形式
  • 什么是“版本”?
    • “版”,“本”合称在宋朝
    • 当初,专指雕版印本,即:刻本
    • 用雕刻好的文字的木版印刷而成的图书/本子
    • 目的在与当时社会上流行的写本,拓本等等区分
    • 1979年版“辞海”:
      • “版本”——书经过传写或是印刷而形成的各种不同本子
    • 在出版业,“版本”就是指一部图书的具体表现形式
  • 软件工程中的“版”与“本”
    • 印刷术是中国发明的,出版机制中的原理也自然的引用在软件工程中

enter image description here

VCS( Version Control System ) 是软件工程中极其重要且基础的工具, 通过 VCS 工具, 分布在全球的开发者才能和谐地共同开发。

所以,Git 仓库中必须合理的追踪应该管理的工件

否则, 只会对协同开发者告成困扰:

  • Git/GitHub 解决了协同的渠道
  • 但是,具体的协同行为是人来完成的
  • 我为人人, 人人才可能为我

例外

问题是 GitHub 并不是单纯的 geek 产品,人家是成功的商业平台!

  • 在仓库中能很好的对图片进行 img-reivew
  • 简直太魔幻了!

images-onion-view

所以, GitHub 已经对 Git 的功能拓展了很多, 但是, 一点也没有引发学习, 自然的就用起来了……

这才是没有 PM 才能开发出好产品的明证!

和合技

提问

~ 是的,GitQ 不是单向灌输, 双向交流才真诚

  • version 和 reverion 有什么区别?
  • cvs 和 csv 有什么差异?
  • GitHub 中如何配置 ssh 来安全访问仓库?

欢迎大家来我的读者圈评论作答或提问交流 ~

评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符 “速评一下”
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页