仓库
任务中心 回答的是「我打开的仓库里,哪一个需要我」。它只知道 当前工作空间的标签页。仓库回答的是另一个问题:那个仓库在哪儿,它到底有没有在 什么地方打开? 它覆盖 Gitcito 见过的一切。每个工作空间、每个标签页,再加上它 扫描你指向的文件夹时找到的东西。

分区
一个仓库可以出现在 不止一个分区 里。这是故意的:每个分区完整回答自己的问题, 而不是同一份列表的一块切片。
| 分区 | 里面有什么 |
|---|---|
| 已打开的仓库 | 当前工作空间里现在的每一个标签页 |
| 收藏 | 打了星的仓库,跨越所有工作空间 |
| 最近 | 你打开过的一切,最新的在前。没有上限,不像启动器里那份 8 条的最近列表 |
| 每个已保存工作空间一份 | 那个工作空间的标签页,这样你可以跳进去,而不必先切过去 |
| 全部仓库 | 注册表知道的每一个仓库,打开与否 |
列表上方的工具条是一条: 全部折叠 和 全部展开,然后是占满剩余宽度的 搜索框,然后是 WIP 摘要开关。
搜索会同时过滤所有分区的行,并 藏起没有任何匹配的分区,免得结果埋在一列 空标题下面。匹配仓库名、别名、所有者,或路径的任何一段。哪里都对不上时,页面 会说出来,而不是变成空白。
框是空的时候,每个分区都会显示,哪怕里面什么都没有:「收藏 0」是在告诉你这个 分区存在而且是空的,这值得知道。只有你已经在搜索时,这才变成噪音。
分区颜色
分区到来时 已经上了色。每个标题从标准色板拿到自己的色调,新建的工作空间 一出现也一样。目的是定向,不是装饰:每个项目一份工作空间分区,上面还有五个 内置分区,滚下去的列表就不再告诉你身在何处,而色调让标题在读之前就能认出来。
要改一个,用标题上的 ⋮:更改颜色… 打开和分组标签、文件夹同一个 颜色选择器,十个预设色块,外加一个自由的十六进制值。 重置颜色 在你覆盖过一个分区之后出现,并把它送回指定的默认。
三件值得知道的事:
- 分配是 稳定的,不是随机的。同样的分区每次启动拿到同样的颜色,加上一个 工作空间也绝不会重涂上面的分区。只有你改过的颜色会被存下来。
- 颜色是 仅限本页 的。在这里给某个工作空间的分区上色,对 Gitcito 别处的 那个工作空间什么也不说。它的标签颜色是另一项设置。
- 颜色会被 混淡 到表面的很低比例,而不是满强度铺上去,所以饱和的选择在 浅色和深色主题里都仍是可读的背景。很淡的颜色因此看起来几乎中性。
超过十个分区时色板会重复,两个标题可以共用一个色调。
什么让一个仓库被认识
这里出现一行,是因为 Gitcito 曾经 打开过 它,或在某个 扫描文件夹 下面 找到了它。只因为磁盘某处存在着,而你从未告诉过 Gitcito,不会被索引。
打开这一页也会索引你当前 在标签页里打开 的东西,启动时恢复的仓库因此不必 再开一次就能有一行。它只覆盖打开的标签页,而且发生在每个会话的第一次访问, 不是一辈子一次。你 Forget 过的仓库会一直被忘掉,除非你再打开它。
扫描文件夹在设置里配置:
- 深度 是扫描从根往下走几层目录(默认 3,上限 10)。
- 扫描 在仓库处停下。仓库里的内嵌检出或子模块不会被当成自己的一行来索引。
- 它从不进入以点开头的目录,并跳过
node_modules和类似的依赖文件夹。 - 它 只读文件夹名:找到一个
.git目录,才让某样东西在这里成为仓库。 名称、所有者和分支来自.git里的文件(HEAD、配置),从不靠运行git。
行
行按列排:星标、名称(如果你改过名,会认别名)、所有者(从 origin 远程的 URL 解析)、分支芯片、WIP 摘要、操作。这些列由 整页共用,不按分区各自 定宽,所以最后一个分区的名称对齐在第一个下面,列表读起来是一张表,不是一叠。
末尾的操作在静止时就看得见,不是悬停才露出:在标签页中打开,以及一个 ⋮,打开和右键一样的 仓库上下文菜单。那是 Gitcito 别处 都用的菜单,这里多了两条只属于本页的项:
| 操作 | 做什么 |
|---|---|
| 星标 / 取消星标 | 把仓库加入收藏或从收藏拿掉 |
| Locate… | 重新指向被移动或改名的文件夹。别名、配置绑定和星标都会带过去。如果目标已经有自己的设置,目标说了算 |
| Forget | 从这份列表里去掉条目。从不碰磁盘上的文件夹 |
文件夹已经不在的仓库显示为 缺失,行内是 Locate… 和 Forget,而不是 平常的行操作。
星标是收藏开关,不是批量选择框。这里的批量活按分区做,不按勾选。见下文。
把文件夹树变成工作空间
你的代码文件夹已经编码了你想要的分组。如果 ~/Code 里有 client-a、
client-b 和 personal,那些就是你切换的上下文,而一个
工作空间 正好是那个,带着自己的标签条。
添加扫描文件夹… 会提议把它们建出来。扫描索引完找到的内容后,对话框列出 你选中的那个 正下方 的文件夹,以及各自有多少仓库。勾上你要的。每一个会 变成一个工作空间,每个仓库一个标签页。
| 行 | 含义 |
|---|---|
| 一个文件夹名和一个计数 | 默认勾上。会变成一个工作空间 |
| "{n} 个新的,合并进 …" | 这个文件夹的工作空间已经存在。只加入新的仓库 |
| "已在工作区中" | 没什么可做,灰色显示而不是藏起来 |
| 根自己的名字 | 松散躺在你选中的文件夹里、不在子文件夹中的仓库。默认不勾 |
仓库归入 根下面的第一个文件夹,不管它坐得多深:~/Code/client-a/nested/app
进 client-a。不含仓库的文件夹不会被列出。
在你确认之前什么都不会创建,取消仍会留下这次扫描的索引。仓库反正都会被 认识,这本来就是这个按钮以前做的事。
以后再扫一遍
可以安全地重复。第二次扫描 只加不减:
- 新仓库会接到对应的工作空间上。
- 你亲手移动、改名或拿掉的仓库保持你留下的样子。
- 你 改过名 的工作空间仍会被认出。Gitcito 记得它来自哪个文件夹,所以会 合并,而不是再造一份。
- 从磁盘删掉的仓库会留下标签页,并显示为缺失。
生成出来的工作空间就是普通工作空间。改名、重排、重涂或删除,都和其他的一样。 它们身上没有什么会一直特别。
关掉所有打开的
已打开的仓库 标题带着一个关闭按钮。打开一个时是 关闭仓库,打开多个时 是 关闭全部标签页。什么都没打开时它是禁用的。
它关掉装着仓库的标签页,并 放过页面标签,这样你正站着的仓库页不会把自己 关掉。磁盘上什么都不碰,也不会提交、贮藏或丢弃。标签页只是一个视图。
关多个会先问,并说出个数。关一个不问:那是便宜的失误,用平常的重新打开已关 标签快捷键就能撤销。关掉的标签进和单次关闭同一个十层栈,并按它们在条上的 顺序重新打开。一次超过十个就不能全部找回。
对整个分区做 fetch 和 pull
每个分区标题带着一个 fetch 按钮和一个切开的 pull 按钮。它们作用在该 分区的每一个仓库上,跳过文件夹 缺失 的那些。仓库不必是打开的。这一会话 里从未打开过的仓库分区也一样。
两者都是 串行 跑,不是并行,这样四十个仓库的分区不会一次拉起四十个 git 进程。状态栏显示正在处理哪个仓库、跑到第几,整批以 一条 提示结束,而不是 每个仓库一条。如果有的失败,提示会说成功多少、失败多少。跑程不会在第一次 失败时停下。
pull 旁边的小三角选择 pull 是什么意思:
| 模式 | 做什么 |
|---|---|
| Pull(可以则 fast-forward) | Git 的默认。能 fast-forward 就 fast-forward,不能就合并 |
| Pull(仅 fast-forward) | 拒绝,而不是造一个合并提交 |
| Pull(rebase) | 把你的本地提交重放到上游之上 |
这个选择是 一份全局偏好,不是按分区来的:它描述你怎么 pull,从一个分区的 小三角改掉,就会改到所有地方。每一次 多仓库 pull 都遵守它。这里的分区 按钮、分组标签 上的 fetch/pull,以及 任务中心 的批量 pull。从工具栏对 单个 仓库做 pull 不受影响,因为那个菜单已经在问你要哪种 pull。
操作条
打开文件夹…、克隆… 和 添加扫描文件夹…。三种把仓库带进 Gitcito 注册表的办法,就在你用来找已经在那儿的仓库的同一页上。
WIP 摘要
一个可选复选框。开着时,每个 展开 的行会跑一次真正的 git status,并显示
未提交的工作和同步状态。关着时,行的代价只是读 .git 里的文件。
故意做成可选:一份摘要大约要每个仓库五个 git 进程,一次八个一批,这样大注册表 不会把界面卡住。打开它是一次故意的「检查我现在能看见的一切」,不是常驻成本。
限制
- 这一页上没有东西按计时器刷新。 要看当前状态,重新打开页面,或把 WIP 摘要关了再开。
- WIP 摘要只覆盖展开的分区。 折叠的分区完全不显示状态,勾没勾都一样。
- 仓库只有在你打开过,或扫描过包含它的文件夹之后才被认识。 这里没法搜索 文件系统。
- 搭建工作空间不能一步撤销。 取消对话框什么都不创建,但你确认过又后悔的 计划,只能靠亲手删掉那些工作空间来拆。
- 只往下一级。 第一层下面的文件夹会被压扁进工作空间的标签条。
client-a/nested/app变成client-a里的一个标签,而不是里面的一个文件夹。 - 设置里的「立即扫描」不提供这个。 它一次重扫所有已配置的根,按文件夹弹 对话框在那里没有意义,而且只做索引。
- 关闭全部一次重开一个标签,最多十个。 一次关掉超过十个仓库,意味着最老 的那些不能从栈里重开,不过它们都还在 最近 里。
- pull 不会按谁落后来过滤。 它会对分区里的每个仓库做 pull,因为要知道谁 落后,得先 fetch。对已经是最新的仓库做 pull 是空操作,这耗的是时间,不是 安全。
- 分区的 fetch 或 pull 不能从撤销栈撤回。 fetch 不改你已经有的东西。一次 合并或 rebase 的 pull,要按仓库从那个仓库自己的历史里反,而不是从这里。
- 分区颜色是装饰。 它们不在任何地方筛选、排序、分组或同步,工作空间分区 上的颜色也不是那个工作空间的颜色。
- Forget 从列表里去掉条目,从不从磁盘去掉。 如果文件夹还在,扫描同一个根 (或再打开一次)会马上把它带回来。
另请参阅: 任务中心 · 工作空间、标签页与分组