跳转到内容

向工作区添加仓库

本指南介绍如何把一个 Git 检出注册到工作区、为其重新建立索引,以及再次将它移除。

仓库是以工作区为作用域的。既没有全局注册表,也没有关联步骤:添加仓库和把仓库放进工作区是同一件事。同一个检出注册到两个工作区后,会成为两条带不同 ID 的独立记录——跨工作区时,仓库的身份是它的文件系统路径,而绝不是它的 ID。

只有当以下三个条件同时成立时,文件夹才能被注册:

  1. 它位于一个 git 工作树内。
  2. 该工作树配置了一个 origin 远程仓库。
  3. origin 远程仓库指向一个受支持的代码托管平台:github.com、gitlab.com 或 bitbucket.org。

其他任何情况都会在注册时被拒绝,并给出明确的提示:“文件夹不在 git 工作树内。”“此仓库未配置 origin 远程仓库。”或“origin 远程仓库未托管在受支持的代码托管平台(github.com、gitlab.com、bitbucket.org)上。”不存在仅限本地的模式。

代码托管平台从远程仓库读取并存储在仓库上——你从来不需要挑选它。一个工作区可以同时容纳来自这三个平台的仓库,而每个平台都通过各自的 API 和自己的凭据通信。GitLab 的嵌套命名空间会被保留,因此 gitlab.com/group/subgroup/project 注册后的所有者为 group/subgroup,名称为 project。

该文件夹还必须位于承载 cc_server 的那台机器上,且在服务器某个 --repo-roots 目录之内。这份允许列表默认是服务器用户的主目录,越过某个根目录向上浏览会被拒绝。

  1. 打开 设置 → 工作区 → 仓库(/workspaces/<id>/settings/workspace/repositories)。
  2. 点击 添加仓库。

该对话框是一个可导航的浏览器,浏览的是服务器的文件系统,而不是你自己的。桌面端、网页端和手机端的流程完全一致,因为原生文件夹选择器会在错误的机器上选取文件夹。

  1. 在服务器已配置的根目录范围内导航。属于 git 检出的文件夹会被标记出来。
  2. 勾选任意数量的文件夹。导航过程中选择会一直保留,因此你可以从多个文件夹里收集检出。
  3. 一次性将它们批量注册。

某一项勾选失败绝不会连累批次中的其余项——你会拿到已创建的 ID,以及每个被拒绝项对应的按路径错误。重新注册本工作区中已存在的路径会返回现有仓库,而不会重复创建一个。

每个注册后的仓库都会出现在列表里,带着它的 owner/name、一个标明其代码托管平台的徽标,以及它在服务器上的路径。GitHub 仓库还会显示所有者的头像;其他代码托管平台没有可推测的所有者头像 URL,因此回退为显示首字母。

在混合了多个平台的工作区里,代码托管平台徽标很重要:两个仓库可以在不同平台上都叫 acme/web,而它们的行为并不相同——一次审查能做什么,以及链接会指向哪里。

注册会触发一个作用域限定在本工作区的 RepoAdded 事件,它会为该检出启动 index_code 流水线。正是它填充了代码图,让搜索和影响分析有内容可答。

只有语言已有随附语法的文件才会被索引(Dart、JavaScript、TypeScript、TSX、PHP、Python、Rust、Zig、C、C++、Go、Java、Ruby、C#、Swift、Kotlin、R、Assembly、MATLAB 和 Ada)。参见用代码图搜索代码。

每一行都带有一个 索引代码 按钮。点击它即可为该检出重新运行索引器;运行期间,按钮会变成显示已完成文件数与总数的进度读数,并提供一个取消控件。运行结束后,它会定格为一个带符号数量的对勾,如果运行失败则显示警告。

拖动某一行上的手柄。你设定的顺序,就是应用内每个仓库列表读回时采用的顺序。

某一行上的链接图标会打开一个编辑器,用于编辑该仓库的 GitHub 所有者和仓库名称——当远程仓库被重命名或转移时很有用。

  1. 打开 设置 → 工作区 → 仓库。
  2. 点击该行上的垃圾桶图标。
  3. 确认“从此工作区移除仓库?”

对话框会说明它会做什么:“名称 将从此工作区移除。磁盘上的本地文件不受影响。”

移除会从本工作区删除该仓库记录,并级联清除它的代码图记录——符号、边、文件和索引检查点——以及针对它的每一项成员级仓库授权、它的空间与仓库关联,还有它的隔离检出记录。同一个检出如果注册在另一个工作区,则是一条独立记录,不受影响。这些记录所指向的磁盘工作树不会因删除而被拆除。