NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

《Git in Practice》作者访谈:关于 Git 的八个问题

  • 2015-04-14
  • 本文字数:2752 字

    阅读完需:约 9 分钟

Mike McQuaid 的著作《Git in Pratice》是一份具有动手实践性的指导,它从实践性的角度介绍了Git,提供了超过60 种在操作Git 库时会使用到的技巧和命令,并且为有经验的用户提供了一些高级技巧和工作流。

本书共分为四个部分,让高级用户可以随意跳到感兴趣的章节,而新手可以按顺序完整阅读,并且最终理解如何在Git 库上进行工作。

本书的第一部分对Git 进行了基本的介绍,从命令行的角度(以及通过GUI 的方式)介绍了各种命令是如何工作的,同时介绍了如何搭建Git 库,并且如何在远程Git 库、例如在GitHub 上进行工作。没有体验过Git 的读者在读过第一部分后,能够获得基本的知识,这将成为阅读之后的章节的坚实基础。

第二部分详细介绍了Git 库内部的工作原理,以及历史和恢复等操作的意义。这些的内容涵盖了merge、stash、rebase 和reflog 等等,同时也介绍了Git 如何管理库历史的方式。

第三部分为更高级的Git 命令提供了一份概述,包括如何对Git 进行配置以提供一个更有用的shell、各种有用的配置选项,以及别名(alias)的创建和对子模块的支持。同时还讲到了如何将一个SVN 库升级为Git 库,以及如何通过UI 和命令行的方式处理GitHub 中的pull request。

最后一个部分讨论了Git 的工作流,这里的讨论引用了Mike 在Homebrew 和CMake 这两个项目中的经验,以及每种工作流的优点和缺点。采用持续部署/ 单一扁平化的历史,还是采用合并网络,这是由每个项目各自的工作实践所决定的。Mike 将这些工作流与Git Flow、GitHub Flow 以及他称之为“Mike Flow”的流程进行了对比。这一部分的最后是对不同类型的团队和项目所采用的各种工作流类型及作者的推荐。

本书包含了许多动手实验性的技巧和示例,并且以一种便于随时查找历史的方式提供给读者。

InfoQ 有幸与 McQuaid 进行了一次访谈,谈论了有关本书的多个话题。访谈的第一个问题是:为什么 Git 这种版本控制系统只能在命令行中使用?

McQuaid:Git 的主要使用方式是作用命令行工具使用,我在本书中主要专注于这一界面。而且我认为,如果你希望使用 Git 实现一些高级操作,或者本身是一位高级软件工程师,那么它是值得你学习的。如果你不是一位软件工程师,那么我大概会为用户推荐 GUI 应用,例如 GitHub for Mac GitHub for Windows GitX-dev GitHub 网站(在该网站上能够创建分支或是提交代码),或者是你所使用的 IDE(例如 Visual Studio Eclipse )上的各种插件。

InfoQ**:Git是一种分散式的版本控制系统;这是否意味着在 Git中不存在中央式的库呢?**

McQuaid:Git 本身可以作为一种仅用于本地的版本控制系统,它能够和其它库不产生任何交互。此外,某个 Git 库也能够对远程库进行 fetch/pull/clone 操作,或将代码 push 至其它远程库。这些库之间不存在耦合性,这也是 Git 成为分散式版本控制系统的原因。但 Git 也是能够以一种中央式的方式进行使用的。

如果你在一个团队中与其它工程师一起合作,并且每个人都有对 GitHub 上某个私有库的写入权限,那么通常来说你只拥有一个远程库(在默认情况下命名为“origin”),并且以一种中央式库的方式对该库进行 push 和 pull 的操作。

InfoQ:为了使用 Git,是否有必要理解 Git在底层是如何保存库的内容的呢?

McQuaid:当然不是必须的。虽然我本人写了这本《Git In Practice》,但我都还没有真正理解 Git 是如何保存库内容的!在《Git In Practice》这本书中,我是有意避免告诉读者这些内容的。关于 Git 保存数据的某些方面知识(例如:理解分支和标签只是指针)将有助于理解 Git 中的某些更奇特的信息,例如像“分离 HEAD 指针”这样的信息。但即使如此,这些内容也不是必须掌握的。

InfoQ**:对于那些打算将 Subversion迁移至 Git库的用户,你有些什么建议?**

McQuaid:不要尝试将两者的概念进行过于密切的映射。它们本身就是不同的工具,各自具有不同的长处、短处和界面。可以考虑使用 git-svn GitHub 库的 Subversion 后台工具,以保证你能够逐步地测试迁移的效果,并且让不同的组在不同的时间进行迁移工作。确保你的知识不仅仅停留在 Git 的基础知识的层面上,也不要害怕进行重写(本地)历史这样的操作,这样你才能够最大程度地利用好这一项工具。

InfoQ:对于不熟悉 Git的用户来说,他们会担心是否会造成重写或丢失历史信息,这种担心是有道理的吗?

McQuaid:在 Git 中重写历史是有可能的(我甚至认为是有道理的),不过丢失历史信息基本上是不可能的。每次你在 Git 中提交代码的时候,会根据代码内容和元数据生成一个唯一的引用。这些引用是不会重复的,并且是永远有效的,即使在重写历史后也是一样,直到被销毁后才会丢失。提交只有在从所有的分支中移除超过 90 天之后才会被销毁,在那之前,你可以使用“git reflog”命令查看历史重写的过程与时间,并且恢复历史中的任意一个旧版本。

InfoQ:对于那些需要管理多个发布版本,而不是对单一版本进行持续部署的项目来说,Git是否适用呢?

McQuaid:是的!Git 对于分支与标签的支持良好,并且比起其它多数版本控制系统来说,在 Git 中创建分支和切换分支的速度要快得多。

InfoQ:在开发团队中常用的 Git工作流模式有哪些?

McQuaid:我所知的两种最常见的工作流是 GitHub Flow Git Flow (或者是他们的修改版本)。GitHub Flow 专注于以最快的速度从 master 进行分支,提交 pull request,以及合并回 master 分支的操作。而 Git Flow 的流程更为复杂,我在这里不打算深入讨论它的细节,只是简单地说几条:它在任意分支提交至生产环境或某个稳定的分布版本时提供了多种检查。我个人觉得,Git Flow 有些过于复杂了,这也是我推出了一个我(愚蠢地)称之为 Mike Flow 的个人版本的工作流。

InfoQ:你能描述一下 Mike Flow工作方式,以及为什么你觉得它对于读者来说能够起到作用的原因吗?

McQuaid:我认为 Mike Flow 是以上两种工作流的一个最佳的结合方式。它本质上是一种 GitHub Flow 的修改版本,但推荐你进行更多的 rebase 操作(一种重写历史的方式),并且只有在稳定的发布成为必须条件的情况下才会创建长期的分支。在《Git in Practice》一书中,我介绍了有关 Mike Flow 的更多细节信息,并将它与 GitHub Flow 和 Git Flow 进行了对比。

《Git in Practice》是由 Manning 出版的图书。在 manning.com 使用折扣码 infoqgip,可以以六折的价格购买《Git in Practice》。

关于本书作者

Mike McQuaid是 GitHub 是一位软件工程师。除了本职工作之外,他还会在技术会议上进行 Git 方面的演讲,也会为人们提供 Git 方面的培训。他在基于 Git 的开源软件方面做出了广泛的贡献,包括 Qt 和 Linux kernel,同时也是基于 Git 的 Homebrew 项目的维护者之一,该项目是一个很流行的 OSX 包管理器。

查看英文原文: Interview with Mike McQuaid about Git in Practice

2015-04-14 04:542920
用户头像

发布了 428 篇内容, 共 172.1 次阅读, 收获喜欢 38 次。

关注

评论

发布
暂无评论
发现更多内容

java开发培训机构怎样选择?

小谷哥

选择前端培训怎么学?

小谷哥

如何使用 Terraform 在亚马逊云科技上创建 ShardingSphere Proxy 高可用集群?

亚马逊云科技 (Amazon Web Services)

数据库 负载均衡 存储

邀请 | Flink Batch 社区开发者会议

Apache Flink

大数据 flink 实时计算

前端培训学习前景怎么样?

小谷哥

零基础自学网络安全/网络渗透攻防路线学习方法【建议收藏】

网络安全学海

黑客 网络安全 安全 信息安全 渗透测试

带你读论文丨S&P21 Survivalism: Living-Off-The-Land 经典离地攻击

华为云开发者联盟

人工智能 华为云 论文 企业号 2 月 PK 榜 华为云开发者联盟

java线下培训适合小白学习吗

小谷哥

防sql注入原理浅析

追赶者

SQL注入

TAE-MatrixOne云原生事务与分析引擎

MatrixOrigin

数据库事务 云原生数据库 国产数据库 MatrixOrigin MatrixOne

TiCDC 源码阅读(四)TiCDC Scheduler 工作原理解析

PingCAP

数据库 开源 TiDB 源码解读

re:Invent 开发者最喜爱产品票选榜单出炉!快来探索高光产品~

亚马逊云科技 (Amazon Web Services)

杭州银行牵手火山引擎数智平台,要既“好”又“快”地完成数字化升级

字节跳动数据平台

大数据 金融 银行

一文搞清商旅酒店数据治理——酒店数据问题分析及治理方案

元年技术洞察

数据中台 数据 数据治理 企业数字化转型 商旅系统

开心档-软件开发入门之MongoDB 创建集合

雪奈椰子

mongodb 开心档

CompletableFuture实现异步转同步

FunTester

新鲜出炉!东莞华为云团泊洼数据中心T1项目成功入选2022年ICT优秀案例

Geek_2d6073

一个成熟的WMS(仓库管理系统)应该具备的那些功能

SAP虾客

功能 WMS系统 成熟的WMS系统

杭州云堡垒机采购选择哪家好?为什么?

行云管家

云计算 网络安全 数据安全 云堡垒机

R2M分布式锁原理及实践

京东科技开发者

redis 框架解析 企业号 2 月 PK 榜 r2m 分布式锁原理

学习web前端培训怎么样?

小谷哥

使用插件扩展服务网格

Flomesh

插件 服务治理 服务网格 Pipy

开心档-软件开发入门之MongoDB 覆盖索引查询

雪奈椰子

mongodb Ppython 操作mongodb库 开心档

如何让OpenHarmony编译速度“狂飙”

离北况归

OpenHarmony

火山引擎ByteHouse助力中国地震台网中心,快速构建一站式实时数仓

字节跳动数据平台

大数据 Clickhouse 数据平台

Java Agent 踩坑之 appendToSystemClassLoaderSearch 问题

阿里巴巴中间件

Java 阿里云

Studio One2023永久和谐版水果编曲工具使用教程

茶色酒

Studio One 5 Studio One2023

必备技巧,PCB设计布局的4项注意(基础篇)

华秋PCB

PCB 布局 PCB设计 布线

个人总结18条心法奉上,手把手带你阅读开源项目的源码!

程序员小毕

源码 程序员 面试 程序人生 架构师

冗余是什么意思?与双机热备有什么区别?

行云管家

高可用 冗余 双机热备

sun4.0泰山众筹模式项目系统开发技术讲解放哪(Demo)

I8O28578624

《Git in Practice》作者访谈:关于Git的八个问题_GitHub_Alex Blewitt_InfoQ精选文章