Files
OJ2/.github
yuetsh 66d325d460
Some checks failed
Deploy / deploy (push) Has been cancelled
ci(部署): rsync 加 --no-owner --no-group,别把 runner 的 uid 搬到服务器
服务器上 `git pull` 报「检测到可疑的仓库所有权」:

    drwxr-xr-x 9 1001 1001  /root/OJDeploy/OJ2
    drwxr-xr-x 8    0    0  /root/OJDeploy/OJ2/.git

原因是 `rsync -a` 展开含 `-o -g`(保留属主/属组),接收端又是 root,
所以源端的 uid 会被真写上去 —— GitHub 托管 runner 的 runner 用户是 uid 1001。
而 `.git` 在 --exclude 里,一直是当初手动 clone 时的 root。两者对不上,
git 2.35.2 起的 safe.directory 检查就把服务器上所有 git 操作挡下了。

加 --no-owner --no-group 之后文件落地归 ssh 登录用户(root)所有,不再错位。

注意这只防复发,**不修复已经错位的目录**:rsync 不带 -o/-g 时不会去改已存在
文件的属主。服务器上还要手动跑一次

    chown root:root /root/OJDeploy/OJ2

只改这一个目录,**不要 -R** —— git 的属主检查不递归,而 OJ2/data 下可能是
「自带数据」形态的整个 postgres 数据目录和判题沙箱以别的 uid 建的运行目录,
递归 chown 会让它们起不来。

这个问题一直都在,只是以前没在服务器上跑过 git 命令所以没撞上。

验证:只做了 YAML 语法校验 —— 这条工作流要真的 push 到 github 才跑得起来,
本机验不了。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-26 08:08:06 -06:00
..