From 66d325d4609e0eb1952870a46c611542823c64bf Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Wed, 26 Aug 2026 08:08:06 -0600 Subject: [PATCH] =?UTF-8?q?ci(=E9=83=A8=E7=BD=B2):=20rsync=20=E5=8A=A0=20-?= =?UTF-8?q?-no-owner=20--no-group=EF=BC=8C=E5=88=AB=E6=8A=8A=20runner=20?= =?UTF-8?q?=E7=9A=84=20uid=20=E6=90=AC=E5=88=B0=E6=9C=8D=E5=8A=A1=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 服务器上 `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 --- .github/workflows/deploy.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 733b831..9ce3163 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -84,9 +84,15 @@ jobs: # 整个 postgres 数据目录。删了就是删库。 # node_modules 服务器上根本不需要(prebuilt 形态下连编都不编),传过去纯浪费。 # .git checkout 出来的 .git 没有任何用处。 + # + # --no-owner --no-group 别删:`-a` 展开含 `-o -g`(保留属主/属组),而接收端是 + # root,rsync 会把**源端的 uid 真写上去**——GitHub 托管 runner 的 runner 用户是 + # uid 1001,于是服务器上的工作区目录变成 1001 所有。而 `.git` 被 --exclude 掉, + # 还是当初手动 clone 时的 root。两者对不上,之后在服务器上跑任何 git 命令都会被 + # 「检测到可疑的仓库所有权」挡下(git 2.35.2 起的 safe.directory 检查)。 - name: 同步到服务器 run: | - rsync -az --delete \ + rsync -az --no-owner --no-group --delete \ -e "ssh -i ~/.ssh/id_deploy -p $REMOTE_PORT" \ --exclude node_modules \ --exclude .git \