ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

AngusGit 是什么:AI 原生代码协作

AngusGit 是什么:AI 原生代码协作

AngusGit 是一个代码托管与协作平台,保护分支和合并请求,需要构建时再跑流水线。你用 SSH 或 HTTPS 推代码。分支保护写在仓库旁边。合并请求上做行级评审。需要构建时,流水线和这个仓库用同一套登录。仓库数据在你这次安装的磁盘上,可以留在内网。登录和成员目录在门户,不在仓库页里再做一套账号。

解决的主要问题

  • 改完的代码还在个人目录里,别人看不到这次差异。新建仓库后,用页面上的命令把现有目录推上去。HTTPS 的密码填访问令牌,SSH 先在「我的」加上公钥,端口默认 2222。推完打开仓库,文件树里能看到这次提交。
  • 看过的意见留在聊天里,合进去时指不出是哪一行。评审写在合并请求的差异行上。人数没到,或有人请求了修改,合并卡会写明还不能合。人数到了、评论按仓库要求解决了、必需的状态检查过了,才能点合并。
  • 构建另开一套账号,失败了还要对一次是谁推的。流水线和这个仓库用同一套登录。运行器和这次运行的日志都在 CI/CD 下面,不用再拿另一个账号去对推送的人。
  • 代码在一个系统里,流水线在另一个系统里。推送之后要到别处看构建,失败了也回不到这条合并请求。流水线写在这个仓库的.anguscicd.yaml或.anguscicd/里,推送或合并请求会触发一次运行。状态检查里的名字可以点进那次日志。要让失败挡住合并,还得把检查名写进保护规则。
  • 合并时挡得住的只有评审,安全和构建结果进不了这道门。保护规则打开「要求安全检查通过」。仓库再打开「未通过时拒绝合并」时,未通过就不能合。构建或质量检查要挡住合并,把那个检查名写进「必需的状态检查上下文」。名单空着,页面上的失败不会拦住合并。还没扫描过,不能当成没有问题。

注意: 它不是只提供git clone的裸仓,也不是扫描程序本身。检查由安全产品执行,结论回到仓库的安全页和合并请求的状态检查上。这里看不到检查引擎的规则原文。助手查询到的是仓库上的安全分汇总,未扫描时不会被说成没有问题。直接向受保护分支推送会被拒绝。网页上改受保护分支上的文件,会先新建分支,再发起合并请求。

主要功能

登录之后先落到「欢迎回到 AngusGit」。这一屏把待办协作、近期动态和自己的贡献放在一处。

仓库。侧栏「仓库」的说明是「管理和浏览你的代码仓库。」页签是全部、已星标、私有、公开、已归档。搜索占位是「查找仓库…」。有创建权限时,右上角四个入口:新建仓库、导入仓库、上传导入、批量导入。

新建仓库的标题是「创建新仓库」。所有者是你的个人账号或所在团队,创建后出现在克隆地址的第一段。仓库名称只能是字母、数字、连字符、下划线和点,不能是.或..。可见性是公开或私有。可以加 README、按语言加.gitignore、选一份许可证。点「创建仓库」后进入这个仓库的代码页。

导入仓库填仓库 URL、所有者、名称,可选私有。占位示例是一种常见 Git 地址,也接受 GitLab、Gitee、SourceForge。点「开始导入」。上传导入接受 ZIP、TAR、TAR.GZ、RAR。批量导入在「手动输入」里每行一个地址,点「添加到待导入列表」后任务自己开始。进度在「待导入」,完成后出现在「已导入」。

空仓库的副标题是「这是一个空仓库,准备开始你的项目吧!」克隆地址在 HTTPS 和 SSH 之间切换。HTTPS 推送时,用户名填登录名,密码填个人访问令牌,不是登录密码。页面上的「去配置」打开「我的 → 访问令牌」。SSH 要先在「我的」添加公钥。默认 SSH 端口是 2222,地址形如ssh://git@主机:2222/所有者/仓库.git。同一页可以复制「创建新仓库(从命令行)」和「推送现有仓库(从命令行)」。仓库里已经有文件时,绿色「代码」按钮打开 Clone 面板,也可以下载 ZIP。网页里上传大文件时,页面会让你改用 Git 推送。

点进仓库后,代码页自己的页签包括代码、分支、标签、发布、问题、Wiki、安全、洞察、设置。侧栏的「代码」是进入仓库。还没选中仓库时,它提示「没有找到仓库,请先创建仓库」。

分支和标签。分支选择器的标题是「分支与标签」。提交哈希可以粘贴后跳转。保护规则在仓库「设置 → 分支保护」,标题是「分支保护规则」,说明是「保护分支免受意外更改」。添加规则时选择分支名称,然后按需打开:

  • 需要代码评审,并填写必需的评审人数
  • 需要状态检查通过。必需的状态检查上下文用逗号分隔,名称要和合并请求里的检查名一致。名单留空时,这项不会拦住合并。打开之后才会出现「需要最新分支」
  • 要求安全检查通过
  • 对管理员同样生效
  • 限制推送权限,再选允许推送的用户和团队

「允许强制推送」和「允许删除」在危险分组里,页面写明这两项会降低保护强度。默认关闭,分支就不能被强推或删除。保存后规则带「受保护」徽章。

合并请求和评审。对话页的合并卡只有两种标题:「此拉取请求已准备好合并」,或「此拉取请求尚未准备好合并」。还不能合并时,页面写出原因,例如仍是草稿、评审者请求了修改、评审还没完成、状态检查还没通过,或必须先解决冲突。准备好之后点「合并拉取请求」。

仓库「设置 → 拉取请求」决定允许哪种合并,对话框里才会出现那种方式。允许合并提交会保留来源上的每次提交,并在目标上增加一个合并提交。允许压缩合并把来源合成一个新提交。允许变基合并把来源上的提交逐个接到目标顶端。还可以打开「自动删除分支」。单条请求上的「启用自动合并」只影响这一条,仓库里对应的方式要先允许。

同一页还可以要求代码评审、解决所有评论、所有评审人通过。启用 CODEOWNERS 时,按仓库里的.github/CODEOWNERS给路径加评审人。仓库根的CODEOWNERS和docs/CODEOWNERS也会被读,用第一个找得到的文件,只认@用户名。评审人数没填、或没选评审人就保存,页面会要求补全。

评审在差异里对某一行点「对该行添加评论」。有人请求更改时,作者改完并得到新的批准之前,合并卡保持不能合并。状态检查每一项是成功、失败或进行中。只有保护规则里填写了检查名称,失败的必需检查才会挡住合并。

问题和 Wiki。问题用来留下缺陷和需求,用标签和里程碑归类。描述或提交里的#编号会出现在合并请求的「关联的 Issue」里。标了「合并后将关闭」的,会在合并预览里再出现一次。

Wiki 页的说明是「项目文档和知识库」。要先在「设置 → 功能」打开「知识库」,这一页才能编辑。新建页面填标题和内容。标签回车添加,最多 5 个。每次保存产生一个新版本。历史里选起始版本和目标版本,可以对比,也可以恢复。打开「仅维护者可编辑」之后,只有所有者、维护者或达到该权限的协作者能改。

流水线。需要构建时再接。文件放在仓库根的.anguscicd.yaml,或.anguscicd/目录下的*.yaml、*.yml。控制台里可以在可视化和 YAML 之间切换,两边同步。触发可以是推送、拉取请求、标签、定时或手动。

还没有流水线时,CI/CD 总览会出现「开始 First Green」。向导先接入运行器,没有在线机器就按接入指引做完再重新检查。然后选模板,填流水线名称和仓库,点创建,再触发运行。运行详情里看任务日志。失败时可以诊断或重跑。名称是给人看的短名,不要写成文件路径。写回仓库之后,详情标题下会显示configPath。

流水线检查的名字可以在合并请求里点开,进入那一次运行。它会不会挡住合并,取决于保护规则里的上下文名单,不取决于页面上有没有出现这次运行。

安全结论和溯源。侧栏「安全」按仓库看风险、漏洞、密钥、许可证、代码质量和扫描历史。扫描在安全产品里执行,结果回到这一页。还没开通时,页面引导去「管理」里完成集成。本仓可以打开推送后自动扫描,以及「未通过时拒绝合并」。单条发现可以标成已知悉、已修复、已抑制或误报。合并请求的状态检查旁边可以「打开仓安全详情」。

「溯源」打开「代码溯源」,说明是「比对代码相似度,并追踪重复片段的来源。」你指定仓库、文件、代码块或函数,再指定拿来对比的一批仓库。详情里可以并排看相似位置,并导出报告。这和问题编号的互相引用不是同一件事。

动态和成员。「消息」是站内通知,「趋势」看热门内容,「活动」是操作记录。成员要先在门户接受邀请,才会出现在这里的「成员」里。仓库授权给团队之后,这个团队里的人按该授权使用仓库。

应用场景

  • 一次已经改完的修复还在笔记本上,评审只能收补丁。在仓库列表新建私有仓库,空仓库页复制「推送现有仓库(从命令行)」。HTTPS 的密码填访问令牌,不填登录密码。SSH 先在「我的」加上公钥,端口按页面上的地址,默认 2222。推完打开这个仓库,文件树里能看到刚才那次提交。登录密码推不上去,就停在这一步,先换令牌。

  • 评论留在聊天里,合进默认分支时指不出是哪一行。给默认分支加保护规则,打开需要代码评审并填写人数。之后在网页上改这个分支里的文件,编辑器会要求新建分支并发起合并请求。评审人在差异的某一行写评论。人数没到,或有人请求了修改,合并卡标题是「此拉取请求尚未准备好合并」,原因写在同一张卡上。人数到了、评论按仓库要求解决了、必需的状态检查过了,标题变成「此拉取请求已准备好合并」,这时才能点合并。

  • 流水线已经失败,合并按钮仍能点。仓库根放.anguscicd.yaml,或放在.anguscicd/里。运行器在线后,推送或合并请求会触发一次运行,状态检查里的名字可以点进那次日志。要让这次失败挡住合并,把这个检查名写进保护规则的「必需的状态检查上下文」。名单是空的,页面上的失败就不会拦住合并。

  • 外部仓库收进来之后,默认分支仍能被直接推送。仓库列表点导入仓库,填 URL 和所有者,点开始导入。多行地址用批量导入,每一行会显示等待中、处理中或失败。失败行里有源地址和错误信息。出现在「已导入」之后,马上按上面的保护规则套上默认分支。导入完成不等于已经保护。

  • 检查结论在另一个网站上,这条合并请求对不上。打开该仓库的「安全」,看这次扫描。未通过并且打开了「未通过时拒绝合并」时,这条合并请求不能合。状态检查旁边可以「打开仓安全详情」。发现可以标已知悉、已修复、已抑制或误报。还没扫描过,不能当成没有问题。引擎规则原文不在这一页。

  • 议题里写了要改什么,合进去的提交对不上那一条。描述或提交里写上#编号,合并请求的「关联的 Issue」里会出现它。标了「合并后将关闭」的,合并预览里会再出现一次。编号没写上,合完也不会帮你把那条议题关掉。

核心亮点

  • 合不进去时,合并卡上有原因。少做的那一步,是到聊天记录里翻谁还没点头。卡的标题只有准备好和尚未准备好两种。尚未准备好时,原因写在同一张卡上:草稿、请求了修改、评审没完成、状态检查没过,或还有冲突。规则本身在这个仓库的「设置 → 分支保护」和「设置 → 拉取请求」,不在另一套账号里。

  • 第一屏是待办,不是菜单树。左侧菜单收起后,只剩一列图标。标题是「欢迎回到 AngusGit」。能读到的是今日工作台、快捷操作和最近活动。快捷操作有四项:新建仓库、打开 PR、CI/CD 总览、根据仓库生成流水线。待办有「待我处理」和「进行中」。顶栏语言是「中文」,旁边有主题开关。统计卡上的仓库数和提交数会变,不在这里当功能说明。

  • 推和拉仍用原来的 Git 命令。空仓库页和已有文件时的 Clone 面板给出 HTTPS 或 SSH 地址,命令可以整段复制。改的是地址和认证:HTTPS 的密码是访问令牌,SSH 的公钥在「我的」,端口默认 2222。网页编辑只适合小改。文件过大时,页面会让你改用 Git 推送。

  • 保护规则就在这个仓库旁边。分支名称、评审人数、状态检查上下文、安全检查、是否连管理员也生效、谁可以推,都在「设置 → 分支保护」。强制推送和删除默认关着。受保护之后,直接推送被拒绝,在网页上改文件,会落到新分支。

  • 构建和仓库是同一次登录。流水线写在仓库的.anguscicd.yaml或.anguscicd/里,也可以在流水线页用可视化编辑器创建。运行器、审批和这次运行的日志都在 CI/CD 下面。它会不会挡住合并,由保护规则里的检查名决定。没有流水线时,总览上的 First Green 把第一台运行器和第一条流水线按顺序走完。

  • 检查结论回到仓库,不另开一份名单。安全页按仓库列出风险和扫描历史。未通过并且打开了「未通过时拒绝合并」时,这条合并请求不能合。发现可以在这一页标已知悉、已修复、已抑制或误报。引擎怎么跑,不在这篇文章里展开。

  • Wiki 每次保存都是一个版本。先打开功能里的知识库。历史里可以对比两版并恢复。仅维护者可编辑打开后,其他人不能改这一套页面。

部署方式

本包安装 AngusGit,并带上门户。浏览器先打开门户,再打开本产品。有 Docker 时走安装向导,默认是 Docker Compose。没有 Docker,走主机 ZIP。安装机不能访问公网,走离线安装。Kubernetes 的 Helm 目前是预览,不要当成生产安装。

生产用 Linux x86_64。试用可以用 macOS。docker compose version要能打出版本号。macOS 用当前登录用户跑向导,不要加sudo。Linux 要装到/opt/angus,先把目录所有者改成当前用户。

80 端口空闲。要 HTTPS 时 443 也空闲。SSH 克隆用 2222。8803和8801是应用自己的端口,反向代理会转发,不必对公网开放。gm.<你的域名>和git.<你的域名>解析到这台机器。机器要能访问https://repo.anguskit.com。安装包从该站的 raw-public 下载,解压目录是AngusGit-1.0.0。

unzip<安装包>.zipcdAngusGit-1.0.0 ./install.sh

Windows 在 Docker Desktop 里执行.\install.bat。向导提示是英文。

向导提示你输入什么它决定什么
Install mode回车Docker Compose。没有 Docker 时改用主机 ZIP
Access输入2自带反向代理和子域名。回车留在按端口访问
反向代理回车Caddy。Let’s Encrypt 只能配 Caddy
证书必须输入数字,没有默认1已有 PEM,2自签,3Let’s Encrypt,4只用 HTTP
数据库回车Compose 在本机起 MySQL 8
安装目录回车当前解压目录,即$ANGUS_HOME
根域名example.com这种根域填git.example.com会多拼一层。IP 或localhost会停下

管理员密码至少 8 位。不要沿用向导给出的公开默认数据库口令。数据目录只在第一次创建时采用这个口令。装完只改配置文件、不改库里已经存下的口令,应用会连不上。默认字符串不写在这里。

证书选1、2或3,打开https://gm.<你的域名>/,再打开https://git.<你的域名>/。选4则两边都是http://。自签时浏览器会警告。当前安装包在选 Let’s Encrypt 时,仍会为七个产品子域申请证书,即使这台机器只装了本产品和门户。那七个名字都要解析到本机,或者改用通配符证书。只走 HTTP 时选4,不受这条限制。

成功是日志末尾两行:doctor: OK和Install finished.日志在$ANGUS_HOME/logs/install.log。之后执行./bin/angusctl.sh doctor。

MCP 接入

POST /mcp。经网关时地址是https://<gateway-host>/git/mcp。私有化没有产品前缀时,改为https://<git-host>/mcp。

令牌是门户用户访问令牌,前缀xcan_tp。在门户用要给助手的那个账号打开「我的」,签发之后放进环境变量ANGUS_GIT_TOKEN。不要写进仓库,不要贴进聊天。别的产品的令牌不能连这个地址。控制台「设置 → 管理 → MCP 接入」可以复制配置,页面不显示令牌明文。

请求头是Authorization: Bearer,值用上面的环境变量。只支持 stdio 的宿主可以用npx包@anguskit/mcp,参数--product git。ANGUS_BASE_URL填网关根,不要带/git/mcp。

未设置ANGUS_MCP_ENABLED时端点是打开的。把它关掉之后,/mcp不存在,推送、合并请求页面和 REST 不受影响。未设置ANGUS_MCP_WRITE_ENABLED时写工具是打开的。关掉之后,写工具从列表里消失。写操作仍然走这个账号的权限和分支保护。助手不能绕过保护规则去强制合并。向受保护分支提交会被拒绝。同一账号每分钟 30 次tools/call。一次调用里的多次内部读取只计一次。

连上之后可以让助手列出工具。常见的只读名字有git_whoami、git_list_repos、git_pr_context。git_whoami返回用户 id 和用户名,没有邮箱,也没有令牌。git_list_repos不返回克隆地址。git_pr_context带回可审阅的变更,不会因此合并。仓库安全分用git_repo_security_summary。未扫描时scanned为 false。发现详情、密钥原文和扫描任务不在这里,它们属于安全产品自己的 MCP。

SDK 接入

官方 REST SDK 版本 1.0.0。Java 构件angus-git-sdk,包名cloud.xcan.angus.sdk.git。npm 是@anguskit/angus-git-sdk。PyPI 是angus-git-sdk。Go 模块是github.com/anguskit/angus-sdk-git。没有官方 NuGet 包。

认证头是Authorization: Bearer <access_token>。网关 Base URL 是https://bj-c1-prod-apis.anguskit.com/git。路径前缀/api/v1/**。冒烟请求是GET /api/v1/analytics/resources/count。列团队是GET /api/v1/team。字段以 API 参考里的 OpenAPI 为准。/innerapi不在官方 SDK 里。

日常推送和拉取仍用 Git 客户端。SDK 不代替git push,也不代替合并卡上的那一次确认。

FAQ

它是不是只给一个克隆地址?
不是。克隆地址在空仓库页或「代码」按钮里。评审、问题、Wiki、保护分支和流水线都在同一个控制台。登录在门户。

为什么合并按钮点不了?
看合并卡标题。尚未准备好时,原因就在这张卡上。草稿要先标记为可评审。评审人数、请求更改、必需的状态检查、冲突,各算一条。保护规则里的检查名单如果是空的,页面上的失败检查不会单独拦住合并。

SSH 连不上?
先看地址里的端口。默认是 2222,不是 22。公钥要加在「我的」的 SSH 密钥里。HTTPS 则用访问令牌当密码。

助手能不能直接合进受保护分支?
不能。写工具仍受这个账号的权限和分支保护约束。受保护分支上的提交会被拒绝。强制合并没有对应的参数。

SDK 能不能代替 Git?
不能。SDK 调的是 REST。推送、拉取和克隆用原来的 Git 命令,地址用仓库页上的 HTTPS 或 SSH。

检查没跑完,能不能当成没问题?
不能。安全分汇总在未扫描时scanned为 false。发现的正文不在 Git 的 MCP 里。

参考文章

  • AngusGit 介绍
  • AngusGit 仓库管理
  • AngusGit 分支与合并
  • AngusGit 拉取请求
  • AngusGit 安装与部署
  • AngusGit MCP 接入
  • AngusGit SDK 接入
  • AngusGit 支持哪些主要功能
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进