miniyuan
第一个 PR
真的第一个 PR 吗 OoO
作业中描述的开发模式实际上不甚合理(虽然我也不知道我的模式是不是正确喵~)
SSH Agent Forwarding 配置
为了在虚拟机上使用 ssh 连接 GitHub,但是又不想直接把私钥放在危险的虚拟机上,我们可以通过使用 SSH 代理转发(SSH Agent Forwarding)的方式完成。以下均为 windows 系统。
SSH 工作原理
我们简要介绍一下 SSH 的工作原理。SSH 是一种非对称加密,客户端保存私钥,服务器保存公钥。一次连接的具体步骤如下:
- 客户端请求连接
- 服务器返回一个随机数
- 客户端用私钥对随机数进行加密,生成数字签名,并发送给服务器
- 服务器使用公钥解密数字签名,并对比和发送的随机数是否一致
- 验证一致,允许连接
我们可以看到服务器只需验证数字签名即可,不会管你究竟有没有私钥。
Agent Forwarding 的本质:在第三步时,让虚拟机向宿主机请求数字签名,本地使用私钥签名后转发给虚拟机用于连接。
宿主机配置
- 启动 SSH Agent 服务
# 以管理员身份运行 PowerShell
# 设置 SSH Agent 服务自动启动
Set-Service ssh-agent -StartupType Automatic
# 启动服务
Start-Service ssh-agent
# 验证服务状态
Get-Service ssh-agent
- 添加私钥到 Agent
# 添加用于转发的私钥
ssh-add $env:USERPROFILE\.ssh\your-key-name
# 查看已添加私钥
ssh-add -l
# 清空所有私钥
ssh-add -D
- 配置 ssh config
Host your-host-name
HostName 你的虚拟机 IP
User 你的用户名
ForwardAgent yes # 虚拟机开启代理转发
虚拟机配置
- 配置 GitHub 的 SSH Config
# 编辑 ~/.ssh/config
vim ~/.ssh/config
# GitHub 配置
Host host-name
HostName github.com
User git
IdentitiesOnly yes # 这样可以确保只使用 Agent 连接,因为没有指定本地文件
注意虚拟机上 ssh 连接的优先级如下:
- ssh-agent 中的密钥优先
- 然后尝试在 ssh config 中 IdentityFile 指定的密钥
- 最后尝试默认密钥文件
- 在虚拟机测试 ssh 连接
ssh -T git@github.com
Fork 仓库
在 ABACUS 官方发布页面 点击右上角的 Fork 按钮,
添加一些描述,并勾选 Copy the develop branch only,然后点击 Create fork.
这样原仓库就完全复制到你的个人仓库中了。
Clone 远程仓库
先切换到你的工作目录,然后运行
# clone 远程仓库
git clone https://github.com/你的用户名/abacus-develop.git
# 或使用 ssh
git clone git@github.com:你的用户名/abacus-develop.git
# 切换到主分支
cd abacus-develop
# 确认远程仓库
git remote -v
# 如果地址不正确则修改
# 自己的远程仓库
git remote set-url origin https://github.com/你的用户名/abacus-develop.git
# 或使用 ssh
git remote set-url origin git@github.com:你的用户名/abacus-develop.git
# 上游原始仓库
git remote set-url upstream git@github.com:deepmodeling/abacus-develop.git
# 或使用 ssh
git remote set-url upstream https://github.com/deepmodeling/abacus-develop.git
创建功能分支
# 获取 tags
git fetch --tags # 默认从 origin 拉取
git fetch upstream --tags # 如果 origin 没有也可以从 upstram 拉取
# 查看 tags
git tag
# 切换到分支(只读)
git checkout v3.9.0.26
# 确认当前版本
git describe --tags
# 基于版本创建本地分支,并移动到本地分支
git checkout -b branch-name v3.9.0.26
修改代码
# 修改完成
git add .
git commit -m "描述"
# 查看最新提交详情
git log -1
# 确认后推送到远程分支
git push origin branch-name
创建 PR
- 打开你 fork 的仓库
- 点击 “Pull requests” → “New pull request”
- base(原仓库的分支)选择 develop,compare 选择你的分支名
- 标题为:2026PKUCourseHW5: XXX
- 描述自己的修改内容
- 点击 Create pull request
修改 PR
发布 PR 后会自动编译并测试你的代码,如果发现有问题可以直接在原分支上进行修改,并 push 到原分支上。原分支的修改会直接反映在 PR 中,因为 PR 本质上就是请求将原分支合并到目标分支,而不仅仅是合并某个快照。