mirror of
https://gitee.com/xmz7891/ykxmz.git
synced 2026-10-18 13:40:45 +00:00
用户原话:「ezhub用https推,我朋友说ssh太麻烦他不想改」。 SSH 公钥在 EzHub 服务端一直没配通(加了公钥仍 Permission denied), 维护者觉得改起来麻烦,所以统一改走 HTTPS + 令牌。 remote 地址里不含令牌(git remote -v 会打印出来,容易泄), 推送时由 _build/ezhub_push.py 临时拼 URL,推完不留痕。 令牌存在仓库外 %USERPROFILE%\.ykxmz\ezhub_token。 ezhub remote 已从 ssh:// 改成 https://git.261826.xyz/xmz/ykxmz.git。 另外本地补齐了 v1.9.0 / v2.0.0 两个 tag。 注意 Gitee 那边是 annotated tag,ls-remote 看到的是 tag 对象的 SHA, 直接拿它建本地 tag 会指向一个本地不存在的对象(git tag 都列不出来)。 要用 refs/tags/<t>^{} 拿 peeled 的 commit SHA。
149 lines
5.1 KiB
Markdown
149 lines
5.1 KiB
Markdown
# 双平台发布(Gitee + EzHub)
|
||
|
||
## 平台
|
||
|
||
| | 地址 | 类型 |
|
||
|---|---|---|
|
||
| **Gitee** | `git@gitee.com:xmz7891/ykxmz.git` | Gitee(API v5) |
|
||
| **EzHub** | `https://git.261826.xyz/xmz/ykxmz.git` | **Gitea 1.22.0**(API v1) |
|
||
|
||
本地 remote 已配好:`origin` = Gitee,`ezhub` = EzHub。
|
||
|
||
> ⚠️ **EzHub 统一走 HTTPS,不再用 SSH**(2026-10-07 改的)。
|
||
> SSH 公钥在 EzHub 服务端一直没配通(加过公钥仍然
|
||
> `Permission denied (publickey,password)`),维护者觉得改起来麻烦,
|
||
> 所以直接走 HTTPS。
|
||
>
|
||
> remote 地址里**不含令牌** —— `git remote -v` 会把它打印出来,
|
||
> 截图或录屏就泄了。推送时由 `_build/ezhub_push.py` 临时拼 URL,
|
||
> 推完不留痕:
|
||
>
|
||
> ```powershell
|
||
> python _build\ezhub_push.py # 用存好的令牌推 main
|
||
> ```
|
||
>
|
||
> 令牌存在仓库外:`%USERPROFILE%\.ykxmz\ezhub_token`。
|
||
> `release_all.py` 也接受令牌参数,建发行版走同一个令牌。
|
||
|
||
---
|
||
|
||
## 一次性配置(需要你操作两件事)
|
||
|
||
### 1. 把 SSH 公钥加到 EzHub
|
||
|
||
我已经生成了一把**专用于 EzHub** 的密钥(不复用 Gitee 那把,权限隔离):
|
||
|
||
```
|
||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMFMh2Zqwm+8KFhU3DhzhOO5Sx7cIzybYqUsrbt1c3ly ykxmz-ezhub
|
||
```
|
||
|
||
**操作**:EzHub 网页 → 右上角头像 → **设置** → **SSH / GPG 密钥** → **增加密钥**
|
||
→ 把上面那一整行粘进去 → 保存。
|
||
|
||
> ⚠️ **实测状态(2026-10-07)**:公钥加过一次,但服务端仍拒绝。
|
||
> 报错:\Permission denied (publickey,password)> 本机送出的指纹:\SHA256:Acmu49YQcjw3m5WefOXSBzYNY2WPHLL2vvhnlYRAttA> 请到 EzHub 确认那条密钥的内容和上面**完全一致**(一个字符都不能差),
|
||
> 并且加在**正确的账号**下。
|
||
>
|
||
> 在你修好之前,可以先用令牌走 HTTPS 推:
|
||
> \\powershell
|
||
> python _build\ezhub_push.py <令牌>
|
||
> \> (令牌存在仓库外的 \%USERPROFILE%\.ykxmz\ezhub_token\)
|
||
|
||
本机配置(已写好,不用你管):
|
||
|
||
```
|
||
# ~/.ssh/config
|
||
Host git.261826.xyz
|
||
HostName git.261826.xyz
|
||
User git
|
||
IdentityFile ~/.ssh/id_ed25519_ezhub
|
||
IdentitiesOnly yes
|
||
ServerAliveInterval 30
|
||
```
|
||
|
||
### 2. 生成 EzHub 的 API 令牌
|
||
|
||
SSH 密钥只能推代码,**建发行版必须要令牌**。
|
||
|
||
**操作**:EzHub 网页 → **设置** → **应用** → **生成令牌**
|
||
→ 名称随便(比如 `ykxmz-release`)→ 权限勾 **`write:repository`** → 生成 → 复制。
|
||
|
||
> ⚠️ **只勾读权限是不行的**(实测踩过)。
|
||
> Gitea 的令牌如果只有读权限:能读仓库、能列发行版,**看起来一切正常**,
|
||
> 但一推代码就 `403 Forbidden`、一建发行版也 403。
|
||
> Gitea 会把原因写在响应里:
|
||
> `token does not have at least one of required scope(s): [write:repository]`
|
||
>
|
||
> 提前探一下(无副作用):
|
||
> ```powershell
|
||
> python _build\probe_token.py <令牌>
|
||
> ```
|
||
> 原理:对一个**不存在的**发行版发 DELETE。
|
||
> `403` = 缺写权限;`404` = 有写权限(只是资源不存在)。
|
||
|
||
> 令牌只从命令行传给脚本,不落盘、不进仓库。
|
||
> `_build/ezhub_push.py` 会把它存到 `%USERPROFILE%\.ykxmz\ezhub_token`
|
||
> (仓库外),不会进版本库。
|
||
|
||
---
|
||
|
||
## 日常发布
|
||
|
||
```powershell
|
||
cd C:\Users\shu\Desktop\deepseekagent\LanRemote
|
||
|
||
# 先演练(不真的发,只看会做什么)
|
||
python _build\release_all.py <gitee令牌> <ezhub令牌> 1.8.0 --dry
|
||
|
||
# 确认无误再正式发
|
||
python _build\release_all.py <gitee令牌> <ezhub令牌> 1.8.0
|
||
```
|
||
|
||
脚本会依次做:
|
||
|
||
1. **前置检查**
|
||
- 三个产物在不在(安装包 exe / 服务端 zip / 手表 apk)
|
||
- 从 `CHANGELOG.md` 取这个版本的更新说明
|
||
- 工作区干不干净(不干净就拒绝 —— 否则推上去的和测过的不是一份)
|
||
- **对外口径检查**:更新说明里出现管理页字眼直接拒绝
|
||
2. **推代码**到 `origin` 和 `ezhub`
|
||
3. **建发行版**并传三个附件到两个平台
|
||
4. 打印两边发行版地址
|
||
|
||
---
|
||
|
||
## 两个平台的接口差别(写代码时容易错的地方)
|
||
|
||
| 项目 | Gitee | Gitea / EzHub |
|
||
|---|---|---|
|
||
| API 前缀 | `/api/v5/repos/...` | `/api/v1/repos/...` |
|
||
| 认证方式 | 参数 `access_token` | 请求头 `Authorization: token <t>` |
|
||
| 传附件路径 | `/releases/{id}/attach_files` | `/releases/{id}/assets?name=<文件名>` |
|
||
| 附件字段名 | `file` | **`attachment`** |
|
||
| 草稿/预发布 | 只有 `prerelease` | `draft` + `prerelease` |
|
||
|
||
**最容易踩的**:EzHub 的文件名要走**查询参数** `?name=`,
|
||
不是 Gitee 那种放 `Content-Disposition` 里。
|
||
|
||
---
|
||
|
||
## 单独发某一个平台
|
||
|
||
```powershell
|
||
# 只发 EzHub
|
||
python _build\ezhub_release.py <ezhub令牌> 1.8.0
|
||
|
||
# 只发 Gitee
|
||
python _build\gitee_release.py <gitee令牌> 1.8.0
|
||
```
|
||
|
||
---
|
||
|
||
## 注意事项
|
||
|
||
- **私钥在 `~/.ssh/`,仓库外,不会进版本库。** 已用 `git ls-files` 确认过。
|
||
- 令牌**不要**提交到仓库,也不要写进任何脚本。
|
||
- 发行版说明**只放更新内容**(用户要求),脚本自动从 CHANGELOG 取,
|
||
不会套额外的标题。
|
||
- 重发同一个版本时,脚本会先按标签查已有的发行版并复用,不会报错。
|