章节 ▾ 第二版

A1.1 附录 A:其他环境中的 Git - 图形界面

如果你通读了整本书,你已经学会了如何在命令行中使用 Git。你可以处理本地文件,通过网络连接你的仓库到其他人的仓库,并与他人高效协作。但故事并没有就此结束;Git 通常作为更大的生态系统的一部分使用,而终端并不总是与之交互的最佳方式。现在我们将看看 Git 可以发挥作用的其他一些环境,以及其他应用程序(包括你自己的)如何与 Git 协同工作。

图形界面

Git 的原生环境是终端。新功能首先出现在终端中,而且只有在命令行下,Git 的全部威力才能完全发挥出来。但纯文本并非所有任务的最佳选择;有时你需要一个可视化表示,而且有些用户更习惯于点选式界面。

值得注意的是,不同的界面是为不同的工作流程量身定制的。一些客户端只暴露了 Git 功能中经过精心挑选的子集,以支持作者认为有效的特定工作方式。从这个角度来看,这些工具都不能称之为比其他工具“更好”,它们只是更适合其预期的用途。还要注意的是,这些图形客户端所能做的,命令行客户端都能做到;在处理你的仓库时,命令行仍然是你拥有最大能力和控制力的地方。

gitkgit-gui

安装 Git 时,你还会得到它的可视化工具,gitkgit-gui

gitk 是一个图形化的历史查看器。可以把它看作是基于 git loggit grep 的一个强大的图形用户界面外壳。当你试图查找过去发生的事情,或者可视化你的项目历史时,这是要使用的工具。

Gitk 最容易从命令行调用。只需 cd 进入 Git 仓库,然后输入

$ gitk [git log options]

Gitk 接受许多命令行选项,其中大部分会传递给底层的 git log 操作。可能最有用的是 --all 标记,它告诉 gitk 显示可从任何引用到达的提交,而不仅仅是 HEAD。Gitk 的界面看起来像这样

The `gitk` history viewer
图 177. gitk 历史查看器

顶部显示的内容有点像 git log --graph 的输出;每个点代表一个提交,线条代表父子关系,引用显示为彩色框。黄点代表 HEAD,红点代表尚未成为提交的更改。底部是选定提交的视图;左侧是注释和补丁,右侧是摘要视图。中间是一组用于搜索历史的控件。

git-gui,另一方面,主要是一个用于创建提交的工具。它同样最容易从命令行调用

$ git gui

它看起来像这样

The `git-gui` commit tool
图 178. git-gui 提交工具

左侧是索引区;未暂存的更改在上方,已暂存的更改在下方。你可以通过点击文件图标来在两种状态之间移动整个文件,或者通过点击文件名来选择文件以进行查看。

右上角是差异视图,显示当前选中文件的更改。你可以通过在此区域右键点击来暂存单个“块”(或单个行)。

右下角是消息和操作区域。在文本框中输入你的消息,然后点击“Commit”来执行类似于 git commit 的操作。你也可以通过选择“Amend”单选按钮来修改上次提交,这会用上次提交的内容更新“Staged Changes”(已暂存的更改)区域。然后你可以简单地暂存或取消暂存一些更改,修改提交消息,并再次点击“Commit”来用新的提交替换旧的提交。

gitkgit-gui 是任务导向型工具的示例。它们各自都为特定目的(分别用于查看历史和创建提交)量身定制,并省略了该任务不需要的功能。

GitHub 适用于 macOS 和 Windows

GitHub 创建了两款面向工作流程的 Git 客户端:一款适用于 Windows,一款适用于 macOS。这些客户端是工作流程导向型工具的良好范例——它们并非暴露 Git 的所有功能,而是专注于一组精心挑选的、协同工作良好的常用功能。它们看起来像这样

GitHub for macOS
图 179. GitHub 适用于 macOS
GitHub for Windows
图 180. GitHub 适用于 Windows

它们在外观和操作上设计得非常相似,因此在本章中我们将它们视为单一产品。我们不会对这些工具进行详细介绍(它们有自己的文档),但对“更改”视图(你将大部分时间花费在此处)进行快速浏览是有必要的。

  • 左侧是客户端正在跟踪的仓库列表;你可以通过点击此区域顶部的“+”图标来添加仓库(通过克隆或本地附加)。

  • 中间是提交输入区域,允许你输入提交消息,并选择要包含哪些文件。在 Windows 上,提交历史直接显示在此下方;在 macOS 上,它在单独的选项卡中。

  • 右侧是差异视图,显示工作目录中发生了什么变化,或者所选提交中包含了哪些更改。

  • 最后要注意的是右上角的“Sync”(同步)按钮,这是你通过网络交互的主要方式。

注意

你不需要 GitHub 账户就能使用这些工具。虽然它们旨在突出 GitHub 的服务和推荐的工作流程,但它们可以愉快地与任何仓库一起工作,并与任何 Git 主机进行网络操作。

安装

GitHub 适用于 Windows 和 macOS 可从 https://desktop.github.com/ 下载。当应用程序首次运行时,它们会引导你完成所有 Git 首次设置,例如配置你的姓名和电子邮件地址,并且两者都为许多常见的配置选项(例如凭据缓存和 CRLF 行为)设置了合理的默认值。

两者都是“常青”的——应用程序打开时,更新会在后台下载和安装。这很有帮助地包含了一个捆绑的 Git 版本,这意味着你可能不必再担心手动更新它了。在 Windows 上,客户端包含一个快捷方式,用于启动带有 Posh-git 的 PowerShell,我们将在本章后面详细讨论。

下一步是为该工具提供一些要操作的仓库。客户端会显示你在 GitHub 上有权访问的仓库列表,并且可以一步克隆它们。如果你已经有一个本地仓库,只需将其目录从 Finder 或 Windows 资源管理器拖到 GitHub 客户端窗口中,它就会被包含在左侧的仓库列表中。

一旦安装和配置完成,你可以使用 GitHub 客户端执行许多常见的 Git 任务。此工具的预期工作流程有时被称为“GitHub Flow”(GitHub 工作流)。我们将在 GitHub 工作流中更详细地介绍这一点,但大体要点是 (a) 你将提交到分支,以及 (b) 你将相当定期地与远程仓库同步。

分支管理是这两个工具不同之处之一。在 macOS 上,窗口顶部有一个用于创建新分支的按钮

“Create Branch” button on macOS
图 181. macOS 上的“创建分支”按钮

在 Windows 上,这可以通过在分支切换小部件中键入新分支的名称来完成

Creating a branch on Windows
图 182. 在 Windows 上创建分支

创建分支后,进行新提交相当简单。在你的工作目录中进行一些更改,当你切换到 GitHub 客户端窗口时,它会显示哪些文件已更改。输入提交消息,选择你想要包含的文件,然后点击“Commit”(提交)按钮(Ctrl-Enter 或 ⌘-Enter)。

你通过网络与其他仓库交互的主要方式是“Sync”(同步)功能。Git 内部有独立的推送(pushing)、获取(fetching)、合并(merging)和变基(rebasing)操作,但 GitHub 客户端将所有这些操作合并成一个多步骤功能。当你点击同步按钮时,会发生以下情况

  1. git pull --rebase。如果因合并冲突而失败,则回退到 git pull --no-rebase

  2. git push.

这是以这种方式工作时最常见的网络命令序列,因此将它们压缩为一个命令可以节省大量时间。

总结

这些工具非常适合它们所设计的工作流程。开发者和非开发者都能在几分钟内协同处理项目,并且许多此类工作流程的最佳实践都已内置到工具中。但是,如果你的工作流程不同,或者你想要更精细地控制网络操作的执行方式和时间,我们建议你使用其他客户端或命令行。

其他图形用户界面

还有许多其他图形化的 Git 客户端,它们涵盖了从专用、单一用途工具到试图暴露 Git 所有功能的应用程序。Git 官方网站在 https://git-scm.cn/downloads/guis 提供了一份精选的最受欢迎的客户端列表。更全面的列表可在 Git Wiki 网站的 https://archive.kernel.org/oldwiki/git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools.html#Graphical_Interfaces 找到。

scroll-to-top