Appearance
Linux 服务器 Git 操作与故障排除手册
目标: 解决服务器上 Git 拉取代码时的权限报错、反复输入密码等痛点。 场景: Ubuntu Server, Gitee 私有仓库,
/srv/目录部署。
1. 核心问题修复
1.1 "detected dubious ownership" 报错
现象:
text
fatal: detected dubious ownership in repository at '/srv/core'
To add an exception for this directory, call:
git config --global --add safe.directory /srv/core原因: 你当前登录的用户 (如 hongjy) 不是 /srv/core 目录的所有者 (可能是 root 拥有的),Git 出于安全考虑拒绝操作。
解决方案:
添加信任白名单 (推荐):
bashgit config --global --add safe.directory /srv/core # 或者直接信任所有目录 (仅限单人使用的私有服务器) git config --global --add safe.directory '*'修正目录权限 (彻底解决): 如果
/srv/core应该归当前用户管理,直接更改所有权:bash# 将目录所有者改为当前用户 (hongjy) sudo chown -R $USER:$USER /srv/core修改后,以后在这个目录下操作 git 就不需要 sudo 了。
1.2 "Permission denied" (无法打开 .git/FETCH_HEAD)
现象:
text
error: cannot open .git/FETCH_HEAD: Permission denied原因: 之前用了 sudo git pull,导致 .git 目录下的文件变成了 root 权限,现在用普通用户拉取就没权限了。
解决方案: 统一权限,建议平时操作 不要加 sudo (除非目录确实属于 root)。
bash
# 修复权限,将 .git 目录的所有权还给当前用户
sudo chown -R $USER:$USER /srv/core/.git2. 免密拉取方案 (不再每次输密码)
方案 A: 凭证存储 (HTTPS 协议 - 最简单)
如果你是用 https://gitee.com/... 克隆的,可以使用 credential.helper 记住密码。
开启凭证存储:
bashgit config --global credential.helper store执行一次操作:
bashgit pull输入账号密码:
- Username: 填写 Gitee 注册邮箱 (如
652971723@163.com) - Password: 填写 Gitee 密码
- 注意: 如果开启了二次验证,密码可能需要填 Access Token (但在 Gitee 上通常直接用密码即可)。
- Username: 填写 Gitee 注册邮箱 (如
验证: 下次再
git pull就不需要密码了。
方案 B: SSH 密钥 (推荐 - 最安全)
如果你不想存明文密码,或者 HTTPS 总报错,改用 SSH 协议。
生成密钥 (在服务器上):
bashssh-keygen -t ed25519 -C "server-deploy@hongjy" # 一路回车,不要设密码获取公钥:
bashcat ~/.ssh/id_ed25519.pub # 复制输出的内容 (ssh-ed25519 AAAA...)添加到 Gitee:
- 登录 Gitee -> 设置 -> 安全设置 -> SSH 公钥 -> 添加公钥。
修改远程地址 (将 HTTPS 换成 SSH):
bashcd /srv/core git remote set-url origin git@gitee.com:allenhong/core.git验证:
bashgit pull # 第一次会提示 "Are you sure you want to continue connecting?",输入 yes
3. 常用操作速查表
| 场景 | 命令 | 说明 |
|---|---|---|
| 强制覆盖本地 | git fetch --all && git reset --hard origin/master | 慎用! 放弃本地所有修改,强制与远程一致。 |
| 查看远程地址 | git remote -v | 确认是 HTTPS 还是 SSH。 |
| 查看状态 | git status | 检查是否有本地修改阻碍拉取。 |
| 放弃本地修改 | git checkout . | 还原所有被修改的文件。 |
4. 特殊报错:Authentication failed
现象:
text
remote: [session-xxx] Incorrect username or password (access token)
fatal: Authentication failed for 'https://gitee.com/...'原因:
- 密码输错了。
- 如果是 Gitee 企业版或开启了令牌保护,必须使用 私人令牌 (Access Token) 作为密码,不能用登录密码。
解决:
- 再次尝试
git pull,仔细输入密码。 - 如果还是不行,去 Gitee 设置 -> 私人令牌 生成一个新的 Token,用这个 Token 当密码输入。
