Skip to content

Git

Git 插件把一个 Git 仓库的状态直接呈现在文件面板里——不用另开应用,也不用终端。它添加两列、一个 Git 子菜单、 一个用于暂存和提交的停靠面板,以及历史、追溯、分支、冲突和变基的窗口。它驱动的是你 Mac 上已经装好的 git。 它是插件,所以可以在 配置 ▸ 插件… 中关掉或移除。

它添加了什么

  • 文件列表的两列 —— Git 状态 和 分支。每个文件显示一个图标和一个简短的状态词(已修改、已添加、已删除、 未跟踪、已重命名、已复制、冲突、已忽略、类型已变),若改动已在索引中则带 (已暂存);分支 列显示该文件 所属仓库当前所在的分支。在 配置 ▸ 列… 中打开这两列(参见 视图模式与排序)。
  • 一个 Git 菜单 —— 位于 命令 ▸ Git,以及文件的右键菜单中。

Git 状态窗口,显示当前分支和仓库中已更改的文件 (图:Git 状态给出分支,以及工作树中的每一处改动。)

面板:暂存、提交、同步

命令 ▸ Git ▸ 面板 停靠一个视图,把工作树分成 已暂存、已更改 和 未跟踪 三组。选中文件后使用 暂存、取消暂存 或 丢弃…,输入一条消息并按 提交 —— 用 修补 则把改动折进上一次提交。 拉取 和 推送 就在旁边,即提交本来就发生的地方;两者都显示进度,也都可以中止。

提交的是索引,不是 git commit -a:你暂存了什么,提交的就是什么。

历史、追溯与网页

  • 历史… 以泳道图列出各次提交、指向每次提交的引用(● main、↗ origin/main、⚑ v1.0),以及每次提交 触及的文件。回车或双击会在比较窗口中打开该文件的这一版本,与其父版本对照。回退提交 和 拣选 也在 其中,若工作树不干净,两者都会事先拒绝。
  • 文件历史… 是同一个窗口,只针对一个文件。
  • 追溯(列表)… 显示每一行及其提交、作者和日期。在编辑器中追溯 把同样的信息放进编辑器的边栏,就在 行号旁边:把指针停在某一行可看到提交消息,点击则打开该提交与其父提交的对照。
  • 在网页中打开 会在 GitHub、GitLab、Bitbucket 或 Azure DevOps 上打开文件、提交或分支,地址由远端的 URL 拼出——不需要账号,也不需要令牌。遇到它不认识链接形式的主机,它会给出仓库页面,而不是瞎猜。

分支、贮藏与标签

分支、贮藏与标签… 把三者都列出来。切换、新建、合并或删除分支;推送、弹出或丢弃贮藏;创建、删除或推送标签, 也可以切换到某个标签——标签不是分支,所以它会事先说明 HEAD 之后将处于分离状态。抓取、拉取和推送都在同一个窗口 里,并且可以在运行途中中止。

推送标签被特意做成单独的动作:git push 并不会把标签一起带上。

冲突

解决冲突… 列出光标所在文件的各个冲突区段,并为每一段作出决定:我方、对方、两者,或者先搁置。然后 写入文件 或 写入并暂存。只要还有区段没有决定,它就拒绝暂存——Git 可是会照样把 <<<<<<< 标记提交 进去——而对于标记读不懂的文件,它宁可不碰,也不去猜。若某个区段需要手工把两边穿插起来,在编辑器中打开 只有一个按钮之遥。

变基

变基… 列出领先于上游的那些提交——别人都还没有的那些——让你在改写分支之前把它们压缩、作为修补合入、丢弃、 重排或改写说明。若变基停在冲突上,同一个窗口会变成 继续 / 跳过提交 / 中止变基,这样一次做了一半 的变基不必再回终端里收尾。

忽略文件,以及凭据

  • 忽略此文件…、忽略此文件类型… 和 忽略此文件夹… 会把合适的模式写进 .gitignore —— 锚定在该在的 位置上,这样忽略这个 build 文件夹,并不会把每个叫 build 的文件夹都忽略掉。
  • 凭据… 报告这个仓库是怎样认证的:SSH 还是 HTTPS,是否配置了凭据助手,是否有 SSH 代理在运行并持有密钥。 在有帮助的地方,它只给出一个动作——让 Git 把凭据交给 macOS 钥匙串保管。插件从不索要、显示或保存口令短语。

说明

  • 插件使用 /usr/bin/git 处的系统 Git。若未安装 Git,这些命令会报告 Git 不可用。(安装 Xcode 命令行工具即可 获得。)
  • 仓库状态按文件夹读取一次并缓存,因此在大仓库中滚动依然很快;任何改动树的命令之后缓存都会刷新,也会跟上在 应用之外所做的提交。
  • 支持链接工作树和子模块:位于子模块内的文件,显示的是子模块的状态和分支, 而不是父仓库的状态和分支。
  • 每个列表都有右键菜单,回车 执行其主要动作,Cmd+R 重新载入窗口。