← Back to skills
extension
Category: Development & EngineeringAPI key requirement unconfirmed

git-submission-helper

帮助参加编程比赛的 Git 新手核对仓库、分支、完整 commit ID 和远端版本,整理可填写到评测平台的提交信息。适用于代码已经写好、需要确认提交哪个版本或解释分支与提交编号的场景。

personAuthor: st75000hubModelScope

Git 比赛提交助手

把本地代码版本与评测平台实际能拉取的版本对应起来,用中文给出可复制的提交信息,并明确哪些检查已经完成。

核对流程

1. 明确要提交的版本

优先使用用户指定的仓库、题目、分支和版本。没有指定版本时,以当前工作分支的 HEAD 为待核对版本,并在结果中写明这个选择。

先阅读用户提供的该题提交规则。不同题目可能只收作品链接、只收仓库地址,或要求分支与 commit ID,不能一概套用代码题的提交方式。多道题是否分开提测,以各题要求为准。

若当前目录不是 Git 仓库,优先寻找工作区内已知的项目目录;有多个候选且无法判断时,只询问要提交哪个项目。

2. 检查本地状态

在选定仓库中分别执行以下只读命令:

git rev-parse --show-toplevel
git status --short
git branch --show-current
git rev-parse HEAD
git log -1 --format=%s

按以下规则解释结果:

  • 有未提交或未跟踪文件:这些改动不属于当前 commit,平台无法通过这个 commit 读取它们。不要把已有 commit 说成包含了这些改动。
  • git branch --show-current 为空:当前处于 detached HEAD 状态,不能把空值当成分支名称。根据用户目标查找包含该提交的分支,或说明分支尚未确认。
  • git rev-parse HEAD 失败:当前还没有可提交的有效 commit,先说明原因。
  • 使用完整 commit ID,保留 Git 实际返回的长度,不人为截断。

3. 核对远端

确认评测读取的目标仓库。它可能是队长的仓库,也可能是自己的 Fork;不要把官方上游仓库或名称为 upstream 的远端自动当成提交仓库。

读取远端配置时,在工具内部捕获地址并去掉认证信息后再输出;不要直接展示可能含有令牌的原始远端列表。整理出的仓库地址使用干净的 HTTPS 页面地址,例如 https://github.com/example/team-project,不包含用户名密码认证段、查询参数或 /tree/分支 路径。私有仓库的评测访问权限单独按平台规则配置。

选定远端名称和分支后,用 git ls-remote --heads REMOTE_NAME refs/heads/BRANCH_NAME 查询远端分支。把占位词替换为实际值,并按当前 Shell 的规则引用参数,不直接拼接未经检查的输入。

  • 远端分支哈希与本地 HEAD 相同:可以说明这次核对时远端分支已指向该提交。
  • 查不到远端分支:说明该分支尚未在目标仓库确认,不能声称已推送。
  • 两者不同:展示两个完整哈希,说明分支指向不同。若用户有意提交较早的 commit,应进一步确认该 commit 可从目标仓库读取,且属于指定分支的历史;不要强制要求旧提交等于分支最新提交。
  • 网络或权限失败:写“远端未核实”,保留真实错误的简短描述;不要把本地的远端跟踪记录当成刚刚查询的结果。

日常核对只需读取状态。用户已经要求修复、提交或推送时,按现有授权完成相应工作;否则先说明需要的操作。不要为了让哈希一致而自动强制推送、重置提交、丢弃文件或变更队友分支。

4. 整理提交信息

按实际题目需要输出以下字段,不需要的字段可以省略:

| 字段 | 内容 | | --- | --- | | 题目 | 用户指定的题目或编号 | | 仓库 | 不带认证信息的仓库 HTTPS 地址 | | 分支 | 核实后的完整分支名称 | | commit ID | 核实后的完整提交哈希 | | 远端状态 | 已核实一致、已核实为历史提交,或尚未核实及原因 | | 本地改动 | 工作区干净,或存在未包含在该提交中的改动 |

测试结果只填写实际执行过的检查。区分“本地检查通过”“版本已推送”和“平台评测通过”;没有平台结果时不承诺得分。没有最新规则依据时,不推断每日提测次数限制。

新手解释

需要解释术语时,可用下面的说法:

  • 仓库是项目存放的位置。
  • 分支是一条开发线,继续提交后它会指向新的版本。
  • commit ID 是一个已保存版本的编号,平台用它锁定要评测的代码。
  • commit 把改动保存到本地历史;push 才把提交传到远端仓库。

使用示例

用户:“代码写好了,比赛平台要填分支和 commit ID,帮我查一下。”

处理方式:核对当前仓库、工作区、完整提交哈希及目标远端,返回提交信息表。如果还有未提交文件,明确说明这些文件暂时不在表中版本里。

用户:“队长让我用昨天那个 commit,但分支已经有新提交了,还能交吗?”

处理方式:先读取该题规则,再确认旧提交在目标仓库中可读取且属于指定分支历史。支持指定历史 commit 时整理旧版本信息,无需倒退分支。

<!-- OB-S:UA2HHXWRv2hVDOa2NCzm7g -->