goland中ssh免密需确保三要素:本地ssh密钥已生成并添加至git平台、git remote url强制设为git@开头的ssh地址(如git@github.com:user/repo.git)、项目根目录.gitignore首行写入.idea/且已从git缓存剔除。

GoLand里用SSH配置Git免密,不是填密码或Token
GoLand本身不处理认证逻辑,它依赖系统 Git 的凭据管理。所谓“免密”,本质是让本地 Git 命令走 SSH 协议自动鉴权,而不是在 GoLand 弹窗里输账号密码或 Personal Access Token。
常见错误现象:Clone failed: Authentication failed 或 Permission denied (publickey),说明 Git 没走通 SSH 链路,或者密钥没加载。
- 先确认你本地已生成 SSH 密钥对(通常在
~/.ssh/id_rsa和~/.ssh/id_rsa.pub),没生成就用ssh-keygen -t ed25519 -C "your_email@example.com" - 把公钥内容(
cat ~/.ssh/id_rsa.pub)完整复制,粘贴到 GitLab / GitHub / Gitee 的SSH Keys设置页(不是Access Tokens) - 测试是否通:终端执行
ssh -T git@github.com(或对应域名),看到Hi xxx! You've successfully authenticated才算有效 - GoLand 中所有 Git 操作(克隆、pull、push)必须使用 SSH 地址,例如
git@github.com:user/repo.git,不能用https://github.com/user/repo
克隆时地址少 .git 后缀或协议写错,GoLand 直接报 remote repository not found
GitHub/GitLab 页面上点 “Code” 按钮复制的链接,默认是浏览器 URL,不是 Git 协议地址。GoLand 的 Get from VCS 对格式极其敏感,错一个字符就失败。
正确做法:
- 进仓库主页 → 点 “Code” → 切到
SSH标签页 → 复制整段,确保以git@开头、结尾带.git - 如果只有 HTTPS 地址,且你不想配 SSH,那就必须用 Personal Access Token 当密码(不是账户密码),且 Token 权限至少勾选
repo - 路径别选进已有项目目录里 —— 比如桌面已有
go-test文件夹,就不要把新克隆项目也选到它下面,否则 GoLand 可能拒绝识别为独立模块
GoLand 提交推送时仍弹登录框,说明 Git 没走 SSH
即使你用了 SSH 地址,GoLand 内置终端或 Git 工具调用仍可能 fallback 到 HTTPS。根本原因是 Git 的 remote URL 被悄悄改回了 HTTPS。
检查和修正方式:
- 终端进项目根目录,运行
git remote get-url origin,输出如果不是git@xxx开头,就立刻重设:git remote set-url origin git@github.com:user/repo.git - 别信 GoLand 右下角 Git 状态栏显示的 “origin”,它有时缓存旧值;以命令行输出为准
- Windows 用户注意:Git for Windows 自带的
git-credential-manager可能劫持 SSH 请求,可在 Git 配置中禁用:git config --global credential.helper "" - macOS/Linux 用户若用
ssh-agent,记得启动后加私钥:eval "$(ssh-agent -s)"+ssh-add ~/.ssh/id_rsa
忽略 .idea/ 是硬性要求,否则免密成功也推不干净
GoLand 自动生成的 .idea/ 目录含本地路径、SDK 配置、运行配置等,不仅泄露环境信息,还会导致团队成员拉代码后 IDE 行为异常。
操作要点:
- 项目根目录手动创建
.gitignore,第一行就写.idea/(注意斜杠) - 如果之前已 commit 过
.idea/,需先从 Git 缓存中剔除:git rm -r --cached .idea,再 commit - 别只靠 GoLand 的 “Exclude from commit” 勾选 —— 那只是临时过滤,不改 Git 状态,下次 pull/push 仍可能带上
SSH 密钥权限、remote URL 协议、.gitignore 规则这三处,任意一个出问题,都会让“免密”变成“每次输密码”。尤其 git remote set-url 这步,新手最容易漏掉,以为复制了 SSH 地址就万事大吉。











