Windows Git 安装配置与 SSH 密钥免密登录完整指南
先说一个我见过无数次的现象很多人下载完 Git一路 Next 点到底装完发现 git 命令在 cmd 里根本不能用还有人费劲装好了push 代码时每次都要输密码输到怀疑人生。这些都是可以靠一次性配置解决的但碎片化教程太多每个教程只讲一部分拼起来还互相打架。这篇我打算把整条链路一次性讲完从下载安装、环境变量、基础配置到 SSH 密钥全部串起来你照着一步步来之后日常用 Git 就能少碰很多莫名其妙的坑。内容只针对 Windows别拿着去套 macOS 或 Linux虽然大差不差但细节确实有差异。这篇教程不仅适合刚上手 Git 的新人也适合已经用了段时间但一直被“权限被拒”“中文乱码”“push 要反复输密码”这类问题折磨的老朋友。我会把每一步为什么要这么选也一起讲清楚不搞“你照抄就行”的那种说明书帖。看完你不仅能装好还能知道自己改的每一项配置到底动了什么。1. 安装前先花三分钟重新认识 Git这步能帮你省一大半麻烦1.1 Git 到底解决什么问题Windows 用户为什么必须单独装它Git 本身是一个版本控制系统说白了就是给项目做的“自动存档 多人协作日志”。你可以随时查看每一次改动是谁在什么时间做的也可以随时把代码退回到任一个历史节点还能让多个人同时改同一个项目互不冲突。没有它你本地复制粘贴十几个“最终版”“最终版2”“最终版最终”文件夹早晚要出事。问题在于 Windows 操作系统原生不含 Git。Linux 和 macOS 上很多系统工具自带一份 Git 或由发行版直接管理但 Windows 上你想用 git init、git clone 这些命令就得先装一份 Git for Windows。Git for Windows 本质上不仅仅把 Git 的源码编译了一遍还打包了一个模拟 Unix 环境的运行层让你能在 Windows 上正常跑那些原本面向 Linux/macOS 设计的 Git 脚本和 shell 工具。这也是很多人第一次遇到的困惑装完 Git 后开始菜单里多了个 Git Bash打开后界面长得像 Linux 命令行。这就是 Git for Windows 自带的终端环境它基于 MSYS2 发展而来给 Windows 用户提供了接近 Unix 的操作体验。后面我们会主要用它来执行命令但也会在文章里说明如何在 cmd 和 PowerShell 里同时激活 Git 命令。1.2 下载前确认三件事系统位数、现有环境、下载渠道第一确认你的 Windows 是 64 位还是 32 位。现在绝大多数机器都是 64 位系统Git for Windows 官方也基本把 64 位版本当作主力。你可以按 Win R 输入 winver 查看系统版本或者在“设置 → 系统 → 系统信息”里看“系统类型”。如果机器实在太老只有 32 位系统也只能找旧版本或尝试第三方编译版但说实话我劝你放弃Git 新版对老系统的支持越来越少。第二确认你的系统里有没有装过 Git。有些人以前装过但没配好环境变量导致现在无法使用还有可能安装过其他工具附带的老版 Git比如某些 IDE 自带的 Git 解释器。装之前先在 cmd 里敲一行git --version如果提示“git 不是内部或外部命令”说明没装或者环境变量没生效正好按本文流程走。如果已经输出了一个版本号比如 git version 2.40.0.windows.1建议先决定要不要卸掉重装还是继续用现有的。第三选择下载渠道。官方下载地址是 GitHub 上的 Git for Windows 项目以及镜像站 git-scm.com进入后会自动检测系统并跳到对应下载链接。如果你所在网络访问官方源很慢也可以用国内一些开源软件镜像站比如清华 TUNA、腾讯软件源都是合法且安全的下载方式选最新稳定版即可。这里不建议去下载站随便搜“Git 下载”很容易装到捆绑软件。1.3 版本怎么选稳定版优先别追着预览版跑Git 的发布节奏比很多开发工具克制不会天天给你跳出一个大版本。你只要记住一条原则选择标记为 Latest 的最新稳定版不要选 Pre-release 或 RC 候选版。日常开发根本用不到预览版的新功能稳定版反而少一些边界问题。另外安装路径这一项也值得提前考虑。我建议默认路径 C:\Program Files\Git中文用户名或带空格的路径虽然现在的 Git 也兼容但一旦后面你需要手动改配置文件路径里有中文或空格会平白多出很多转义麻烦遇到问题也不好排查。2. 保姆级安装流程每一步选项都拆开讲别无脑 Next2.1 安装包运行与安装界面导航下载完的安装包通常叫 Git-x.xx.x-x-64-bit.exe双击运行。如果你的 Windows 账户不是管理员可能弹 UAC 用户账户控制窗口点“是”即可。进入安装向导后首先是 GNU 许可证页面往下翻到“Next”可点击即可。接下来每一页选项我建议这样处理安装页面选项我的建议Select Destination Location安装路径保持默认避免中文路径Select Components附加组件默认项全保留另外勾选 Git LFSSelect Start Menu Folder开始菜单目录默认Choosing the default editor默认编辑器改成你熟悉的编辑器如 VS Code、Notepad 或 Sublime TextAdjusting your PATH environmentPATH 配置选第二项 “Git from the command line and also from 3rd-party software”Choosing HTTPS transport backendHTTPS 传输后端使用 OpenSSLLine ending conversions换行符转换默认第一项Checkout Windows-stylecommit Unix-styleConfiguring the terminal emulator终端模拟器默认 MinTTYConfiguring the extra options额外选项全部默认Configuring experimental options实验性选项不勾选2.2 安装项逐个拆解每个选择的逻辑是什么最关键的几个页面我说细一点。默认编辑器默认是 Vim。Vim 对新手极其不友好你在 commit 时如果没有带 -m 参数Git 会弹出一个 Vim 窗口等你输入提交信息新手很容易卡在“写完了不知道怎么保存退出”。所以我不止一次建议安装到这个步骤时直接把编辑器从 Vim 换成你已经装了的编辑器。比如你已经装了 VS Code就可以在下拉列表里选 “Visual Studio Code”。这样以后 commit 时如果忘了加 -m弹出的就是 VS Code操作习惯不会断。PATH 环境这里三个选项字面意思比较绕。第一项 “Use Git from Git Bash only” 的意思是只让 Git Bash 能用 git 命令cmd 和 PowerShell 用不了第二项 “Git from the command line and also from 3rd-party software” 会把 Git 的可执行目录加到系统 PATH 里这样你在 cmd、PowerShell、VS Code 终端里都能直接用 git第三项 “Use Git and optional Unix tools from Command Prompt” 会把更多 Unix 工具也塞进 PATH容易和系统自带命令冲突比如 Windows 自带的 find.exe 和 Unix 的 find 完全是两个东西路径里到底调用谁都讲不清。所以选第二项这是最平衡的。换行符这个选项是新手最容易忽略的坑。Windows 文件换行习惯是 CRLFLinux/macOS 习惯是 LF。选默认第一项后Git 在 checkout 代码到本地时会自动把 LF 转成 CRLF在你 commit 时再转回 LF。这样你和别人协作时仓库里统一存 LF你的 Windows 工作区里是 CRLF大多数现代编辑器都能同时处理两者日常几乎无感。你团队里如果都是 Windows 用户且没有跨平台协作场景选默认就行如果你是在 Windows 上编辑、最终部署到 Linux 服务器建议还是保持默认不去动它后续也可以通过 git config core.autocrlf 再调。2.3 安装完成后怎么验证以及 Git Bash 与 Windows 终端的关系安装到最后会有 “View Release Notes” 的勾选取消后点 Finish 就完成了。考验成果的时刻到了重新打开一个 cmd 或 PowerShell 窗口注意我说的是重新打开。不重新打开终端的话环境变量不会刷新你敲 git 仍然可能提示找不到命令。git --version能看到类似 git version 2.44.0.windows.1 的输出说明安装成功且 PATH 配置正确。如果提示“git 不是内部或外部命令”不要急先确认你要么没有重新开终端要么安装时 PATH 选项没选对。Git Bash 是 Git for Windows 自带的一个终端模拟器风格偏向 Linux。日常我主力终端是 Windows Terminal再在 Windows Terminal 里添加 Git Bash 作为其中一个选项卡这样既保留 Windows 现代终端的美观又能在需要时切换到 bash 环境。装了 Git 后你在任意文件夹点右键菜单里通常会出现 “Open Git Bash here”这是很快捷的入口我后面很多操作都是从这里进入。3. 环境变量与 Git 初始配置这几条命令花五分钟能少被折腾一年3.1 身份信息配置user.name 和 user.email 是提交记录的灵魂装好 Git 后第一件事不要急着 clone 项目先把身份信息配好。Git 每次提交commit时都会记录作者信息如果没配置它会用你的 Windows 用户名和主机名拼一个“不知道哪来”的默认身份提交到仓库里别人看到的作者就是一串乱码。打开 Git Bash依次执行git config --global user.name 你的名字 git config --global user.email 你的邮箱这里注意两点。第一用 --global 表示当前用户项目全局生效以后这台电脑上所有仓库默认都用这个身份除非某个仓库用 --local 覆盖。第二邮箱建议填你在代码托管平台注册并验证过的邮箱不要随手填一个否则提交记录里头像和你真实账号对不上社区协作时别人就很难联系你。想知道自己现在配置的是什么一条命令就查完git config --global --listGit 的配置有三层作用域system 级别全机器所有用户、global 级别当前用户所有仓库、local 级别当前仓库。优先级从低到高local 可以覆盖 globalglobal 可以覆盖 system。对应的配置文件分别在安装目录里的 etc\gitconfig、当前用户目录下的 .gitconfig、当前仓库 .git 目录下的 config。理解这个层级很重要后面遇到“我明明改了个别的地方却不生效”这类问题时排查起来会快很多。3.2 顺手把编辑器、别名、缓存凭证都配好日常操作才顺手如果你安装时默认编辑器没有选到想要的也可以直接用命令补上。把默认编辑器设成 VS Codegit config --global core.editor code --wait这个 --wait 参数是让 Git 等待编辑器关闭后再继续执行是配合提交信息编辑的固定用法。再来是常用别名。Git 命令确实略长比如 git checkout 和 git branch天天敲很烦。别名其实就是替身你可以把常用命令简写git config --global alias.st status git config --global alias.ci commit git config --global alias.co checkout git config --global alias.br branch git config --global alias.lg log --oneline --graph --all --decorate设置完git st、git ci、git lg 就能直接用。这个钱花得很值尤其是 git lg 那个图形 log 别名提交历史一眼看全强烈推荐。凭证缓存这块如果你用 HTTPS 方式 clone 项目每次 push 都会要求输入账号密码现在 GitHub 要求用 Personal Access Token不再是账户密码。Git 默认会安装 Git Credential Manager它会在第一次认证通过后把凭证存在 Windows 凭据管理器里之后自动使用。这个机制本身没问题但很多老教程让人去配 cache 或 store反而绕远路。我建议你安装时保持默认只要记住如果你改过系统的安全策略或者用 SSH 方式这里也就不需要凭证缓存了。3.3 中文乱码与路径显示问题一条配置直接根治Git 默认对非 ASCII 字符是按字节转义的文件名如果是中文git status 会把名字显示成一串像 \xe6\x96\x87\xe6\xa1\xa3 的八进制转义谁看谁头大。解决办法是关掉转义git config --global core.quotepath false改完后git status 会直接显示中文文件名。提交信息如果是中文建议同时设置一下编码git config --global i18n.commitencoding utf-8 git config --global i18n.logoutputencoding utf-8另外如果 Git Bash 里本身显示中文乱码多半是终端字符集问题。鼠标移到 Git Bash 标题栏在“选项 → Text → Character set”里选 UTF-8或者设置环境变量 LESSCHARSETutf-8 再重启终端。这几个配置相互配合基本能解决九成中文乱码问题。4. SSH 密钥全程配置从生成到免密登录一次搞定4.1 为什么我推荐 SSH 而不是 HTTPS免密和安全的平衡你在 clone 远端仓库时有两种协议可选HTTPS 和 SSH。HTTPS 方式对新手最友好复制链接直接用但它每次 push 都要先通过 Git Credential Manager 做身份校验即使凭据管理器能记住首次设置 token 的环节也挺折腾。SSH 方式则是靠一对公钥和私钥完成认证公钥上传到代码托管平台私钥安全地锁在本机push 时客户端用私钥签名服务器拿到后用公钥验证全程不需要输入密码。一旦配好你会发现 git push 就是回车即走体验非常清爽。这背后其实是“非对称加密”在帮你省事你没把私钥发到网上网络传输中也不会来回送密码安全性比 HTTPS 的密码/token 方案高一个量级。4.2 生成密钥ed25519 还是 rsa怎么选命令怎么敲打开 Git Bash输入下面这条命令生成密钥ssh-keygen -t ed25519 -C 你的邮箱-t 指定密钥类型ed25519 是目前推荐的选择。它比老的 RSA 更短但安全性更高生成的密钥文件也更小。除非你的代码托管平台不支持 ed25519现在 GitHub、Gitee、GitLab 都早已支持才需要用 RSAssh-keygen -t rsa -b 4096 -C 你的邮箱执行后会问保存位置默认是 C:\Users\你的用户名.ssh\id_ed25519。如果你之前已经生成过密钥这里建议输入一个新文件名比如 id_ed25519_github避免把旧密钥覆盖了多个平台管理后面会用到。接下来会提示 “Enter passphrase (empty for no passphrase)”。这是给私钥再加一道本地密码保护。如果你想追求极致的免密体验这里直接回车跳过也行如果安全意识强可以设置一个 passphrase但代价是每次 SSH 连接都要输入一次或者配合 ssh-agent 每次开机输入一次后免去重复输入。我个人建议设置一个短一点的 passphrase然后下面用 ssh-agent 帮你存住安全和不麻烦可以两全。4.3 把私钥加进 ssh-agent省得每次输 passphraseWindows 上要使用 ssh-agent 管理密钥先确保它已启动eval $(ssh-agent -s) ssh-add ~/.ssh/id_ed25519第一条命令会把 ssh-agent 的信息加载进当前 shell第二条命令将私钥添加进 agent。如果你的密钥文件名不是默认的 id_ed25519请把路径替换成你实际的文件名。添加时会要求输入 passphrase之后在本次 Windows 会话里再使用 SSH 就不用反复输密码了。如果重启了电脑需要重新执行这两条命令。当然如果你完全不设置 passphrase这一步也就是可选的程序逻辑而已。这里要注意ssh-agent 运行在哪个终端上下文里哪里的 ssh 命令才能访问到它。如果你在 Git Bash 里执行 ssh-add 后再回到 cmd 里用 SSHcmd 里的 ssh 可能并不知道你的 agent。所以我们后续测试连接时建议都在同一类终端里操作最好统一用 Git Bash。4.4 查看并复制公钥顺便区分“公钥可公开私钥永不出门”生成的公钥文件是你私钥文件后面加 .pub 后缀的那个。在 Git Bash 里用 cat 直接看或者用系统剪贴板命令把它复制到剪贴板cat ~/.ssh/id_ed25519.pub clip ~/.ssh/id_ed25519.pub输出内容形如ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... your_emailexample.com这行字符串是公钥可以安全地发送给代码托管平台。和它配对的私钥文件 id_ed25519这辈子都不要发给任何人也不要上传到任何云盘、代码仓库更不要贴到论坛里。谁拿到你的私钥谁就能冒充你推送代码。这个红线一定记牢。复制完公钥去平台添加。GitHub右上角头像 → Settings → SSH and GPG keys → New SSH key → Title 填一个备注名Key 粘贴公钥。Gitee设置 → 安全设置 → SSH 公钥。GitLabUser Settings → SSH Keys。各平台位置略有差异但思路一致。4.5 测试连接看到那句英文你就成功了配置完成后在 Git Bash 里验证能否连通 GitHubssh -T gitgithub.com第一次连接会出现一段提示The authenticity of host github.com cant be established. ... Are you sure you want to continue connecting (yes/no)?输入 yes回车。之后如果输出类似下面的信息说明认证通过Hi yourname! Youve successfully authenticated, but GitHub does not provide shell access.如果你用的是 Gitee则测试命令是ssh -T gitgitee.com能看到欢迎语且提到了你的用户名就说明公钥添加成功。之后的 clone 操作从平台复制 SSH 格式的地址形如 gitgithub.com:username/repo.git而不是 HTTPS 格式的那个。这样远程操作就不会再让你输入账号密码了。5. 更进一步多个平台多套密钥、备用端口与高频操作细节5.1 一机多密钥GitHub、Gitee、公司 GitLab 各用各的靠 config 文件分流很多人除了用 GitHub还在 Gitee 或公司内网 GitLab 上放代码。如果你把同一个公钥放在多个平台倒也不会出安全问题但一旦某个平台密钥泄露你就得同时去所有平台换。更合理的做法是给每个平台生成单独密钥文件再用 SSH 的 config 文件按域名自动选择。先生成多套密钥ssh-keygen -t ed25519 -C github邮箱 -f ~/.ssh/id_ed25519_github ssh-keygen -t ed25519 -C gitee邮箱 -f ~/.ssh/id_ed25519_gitee然后创建 ~/.ssh/config 文件注意这个文件在 Windows 上要用非 UTF-8 BOM 格式保存或者直接用 Git Bash 的 touch 和 vim 创建它touch ~/.ssh/config vim ~/.ssh/config内容大概是这样Host github.com HostName github.com User git IdentityFile ~/.ssh/id_ed25519_github Host gitee.com HostName gitee.com User git IdentityFile ~/.ssh/id_ed25519_gitee保存后测试ssh -T gitgithub.com ssh -T gitgitee.com两条命令分别会走不同的密钥互不干扰。如果 config 文件配置后不起作用注意检查文件是不是被 Windows 记事本存成了带 BOM 的 UTF-8BOM 会导致第一行 Host 配置失效这是 Windows 用户最常见的隐藏坑。5.2 SSH 走 443 端口公司网络封锁 22 端口的备选方案日常办公网络里出于安全策略很多企业只放行 443 端口22 端口被防火墙挡掉。遇到这种情况SSH 默认连不上 GitHub。GitHub 官方提供了一个替代方案通过 ssh.github.com 的 443 端口进行 SSH 连接。在 ~/.ssh/config 里针对 github.com 添加Host github.com HostName ssh.github.com Port 443 User git IdentityFile ~/.ssh/id_ed25519然后重新测试ssh -T gitgithub.com如果网络畅通依然能正常认证。这个方案是 GitHub 官方文档明确支持的功能专门用于解决某些网络环境禁止 22 端口访问的问题不需要你安装任何额外的辅助工具。要注意的是这个配置文件修改会同时影响你所有走 gitgithub.com 的 Git 操作如果你本地还有别的程序在直接调用 SSH 连接 GitHub需留意连接记录变化。5.3 高频且容易出错的三个日常操作clone、push 和中文文件名用 SSH 地址 clone 项目最常见的问题是你之前没配好密钥就去 clone结果直接报权限错误。所以请按顺序来先配密钥再 clone SSH 项目。首次 push 时如果项目是从别处 clone 的推送那么简单git push如果是自己新建的仓库Git 会提示当前分支没有上游分支这时按照提示执行一条带 -u 参数的覆盖命令就行git push -u origin main这个 -u 的作用是建立本地分支与远程分支的追踪关系以后在同一分支上直接 git push 即可。中文文件名问题前面已经给了配置这里再提醒一个配套操作如果你在提交时把同名文件改成其他大小写或调整了目录冗余使用 git mv 手动归档而不是直接删了重建否则 Git 容易把它识别成“删除新增”历史线会断掉。这个不算大坑但改历史的时候会很烦。6. 常见问题与排查技巧实录报错不可怕关键是有排查思路6.1 高频报错速查表一眼定位问题源头我整理了一张表格几乎覆盖初学者装上后最常见的几类报错。你看到的报错常见原因解决办法git 不是内部或外部命令安装时 PATH 选项没选对或环境变量未刷新重装时选第二项或重新打开终端手动添加 PATH 路径 C:\Program Files\Git\cmdPermission denied (publickey)SSH 公钥未添加、私钥没加载或连错了平台ssh-add -l 查看 agent 中有没有私钥确认公钥已添加到目标平台ssh -vT 查看具体认证过程Could not open a connection to your authentication agentssh-agent 未启动执行 eval $(ssh-agent -s) 后再执行 ssh-addThe authenticity of host ... cant be established首次连接目标主机确认指纹确认主机域名无误后输入 yes将指纹写入 known_hostsHost key verification failedknown_hosts 中记录冲突清理 known_hosts 中该主机的旧记录或整个删除 known_hosts 重新连接Please make sure you have the correct access rights仓库地址填错或没有该仓库权限检查仓库 URL 是否含用户名确认平台账号是否有该仓库的读写权限fatal: not a git repository当前目录不是 Git 仓库确认目录里有 .git 文件夹或先执行 git init中文文件名成了转义字符core.quotepath 默认开启执行 git config --global core.quotepath false提交信息不管用弹出 Vim 关不掉默认编辑器是 Vim输入 :wq 退出后续设置默认编辑器为 VS Code这张表对应着学习路线里的高频问题你收藏一下遇到对应错误翻一翻通常能省掉大量搜索时间。6.2 排查思路分享用 ssh -vT 看调试日志比瞎猜快十倍遇到 SSH 认证类问题我最推荐的命令不是去网上搜一堆模糊的“解决办法”而是自己先看调试日志ssh -vT gitgithub.com-v 参数会输出详细的调试信息你会看到debug1: Reading configuration data /c/Users/yourname/.ssh/config debug1: Offering public key: ... debug1: Server accepts key: ... debug1: Authentications that can continue: publickey debug1: No more authentication methods to try.重点看两个信息一是它到底读取了哪个配置文件二是它尝试了哪把私钥。如果日志显示 “Offering public key: /c/Users/yourname/.ssh/id_rsa”而你实际上把公钥放到了 id_ed25519 这把私钥上那当然会被拒。如果显示 “No such file or directory”说明你指定的 IdentityFile 路径不对。这些信息比任何笼统排查都靠谱。如果 SSH 连接过程中卡住不动一般考虑证书文件和网络问题。GitHub 官方备用端口方案在前文已经说过。重要提醒调试日志会显示本地用户名和文件路径如果要在论坛发帖求助记得先去掉敏感信息。6.3 这三个坑是我最想劝你避开的第一不要用中文用户名和中文路径安装 Git。虽然新版 Git 对 Unicode 支持已经不错但你后续偶尔会遇到某些脚本或工具对中文路径处理不当定位问题时会很难受。Windows 用户名如果已经是中文建议至少把 Git 安装到纯英文路径下仓库目录也尽量别建在中文路径里。第二不要把私钥当成“普通文本文件”随意备份或同步。私钥泄漏的后果等于你的代码账号被人拿走。有些人图省事用网盘同步整个 .ssh 目录一旦网盘账号被盗私钥也就漂出去了。真要备份私钥请先用加密压缩工具打包而且用完后及时删除临时文件。第三提交到公开项目的仓库时务必确认全局 user.email 用的是你常用的公开邮箱。很多人在全局配置里填了公司邮箱一不留神提交到开源项目等于把公司邮箱留在了公开历史上后续想改历史不仅麻烦还会影响协作。最好在公开项目所在目录用 local 配置覆盖git config --local user.email 你的公开邮箱除了上面这些我还想多说一句环境配置这个东西最怕的不是报错而是“你改了但没验证”。每执行一条配置命令后面最好紧跟一个查看或者测试命令确认真的生效再进入下一步。这套“配置 验证”的习惯我在排查问题的时候一直保留它能帮你把错误隔离在某一个命令内部而不是最后所有环节挤在一起不知道哪一步出了问题。最后再分享一个我自己的体验刚开始用 Git 时总想找“最全的配置清单”一步到位结果每次换电脑还要重新踩一遍坑。后来我养成一个习惯把自己常用的一套配置命令和 SSH 生成流程整理成私有仓库里的一个 markdown 文档新机器到手按顺序执行一遍半小时就能恢复到一个顺手的开发环境。其实工具链的搭建最重要的不是某一个最优解而是你有一套适合自己的、可复现的标准动作。这套标准动作希望你也能从这篇里捋出一个属于自己的版本。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →