Windows下Git安装配置与SSH密钥实操指南
用 Git 在 Windows 上从零跑到飞起下载、安装、环境配置、SSH 密钥一篇讲透如果你刚接触 Git大概率会卡在这种状态网上下载了一个安装包一路 Next 装完打开命令行敲git --version却提示找不到命令或者好不容易装好了push 代码的时候又被各种 403、权限报错折磨。这些坑我都踩过而且不止一次。这篇文章就是根据我这些年在 Windows 上折腾 Git 的实操经验整理出来的从下载哪个安装包、安装时哪些选项千万别手滑到环境变量怎么配、SSH 密钥怎么生成和托管到代码平台一条龙讲完。无论是前端、后端还是刚从 IDE 里点“提交”的学生党这一篇都能让你少走好几天的弯路。1. 安装前的准备工作版本选择与系统检查1.1 Git 到底是什么先搞懂这三点再动手很多新手容易把 Git 和 GitHub 混为一谈其实这是两个概念。Git 是一个分布式的版本控制工具它运行在本地帮你记录每一次文件的变更、支持分支切换、合并代码、回溯历史而 GitHub、Gitee、GitLab 这些是基于 Git 的代码托管平台它们是“存放代码的远程仓库”。换句话说Git 是引擎托管平台是停车场你本地开车开完了可以停到停车场里也能从停车场把车开回来。还有一点要理解Git 的命令行操作是跨平台的。你在 Windows 上学到的git add、git commit、git push换到 macOS 或者 Linux 上几乎一模一样。所以现在在 Windows 上把基础和习惯练好以后切换系统或者直接上服务器操作成本非常低。这也就意味着配置好 Git 不只是解决“能不能用”的问题更是为后面写脚本、配 CI/CD、搞自动化部署打地基。最后Windows 下的 Git 有一个独立的发行版叫 Git for Windows它不仅有 Git 核心还自带了一个 Bash 模拟环境Git Bash和一整套 GNU 工具。很多人在 Windows 上敲不出ls、grep、tar这些命令装上 Git for Windows 之后Git Bash 里就能直接用了。这也是为什么我建议新手优先装官方 Git for Windows而不是用第三方精简版。1.2 下载 Git 时怎么选版本不看清楚容易装个寂寞下载 Git 的官方入口是 git-scm.com这个网站会识别你的操作系统通常打开就直接显示 Windows 下载按钮。但如果你需要指定架构和安装包类型就要注意几个选项。第一是系统架构。现在绝大多数 Windows 电脑都是 64 位系统选 64-bit 版本没问题只有极老的机器才需要考虑 32 位。怎么确认右键“此电脑”选“属性”在“系统类型”里就能看到。第二是安装包类型。Git 官网一般提供 Standalone Installer独立安装器和 Portable便携版。独立安装器适合绝大多数人装完系统级可用便携版解压即用适合不想写入注册表的场景但不建议新手选你后面配置环境变量和 SSH 的时候会很痛苦。第三是版本号。Git 的版本迭代很快你不用追最新但也不要选两年以上的老版本因为老版本对 Windows 新系统的兼容性、对 SSH 算法的支持都不够好。我个人的习惯是只要官网推荐的是默认 Stable稳定版直接下载就行。下载完之后别急着双击安装包先做一件事如果你之前装过任何版本的 Git、TortoiseGit小乌龟或者集成过 SourceTree 里自带的一套 Git最好先卸载干净避免 PATH 环境变量里残留一堆指向不明路径的配置后面排查问题会非常头疼。1.3 安装前的系统检查与关键注意点老手在安装之前通常会在命令行里做一轮快速体检。Windows 下打开 PowerShell 或者 CMD依次执行下面几条命令确认系统状态没有问题systeminfo | findstr /C:OS Name /C:System Type where git where ssh第一条让你确认当前系统的具体版本和架构后面两条是检查系统里是不是已经存在某个旧的 Git 或 SSH 程序。如果where git返回了路径说明之前已经装过而且这个路径不一定是你以为的那个目录。我曾经在一台机器上装完新版 Git 之后git --version始终显示旧版本排查了一圈发现 PATH 里残留了一个旧版 Git 目录而且优先级比新版更高。这种问题很隐蔽安装前先查清楚能省不少事。再有一个注意点安装 Git 会涉及修改系统环境变量部分安全软件可能会拦截。安装的时候建议暂时退出杀毒软件或者至少允许 Git 安装程序的所有修改操作否则安装到一半提示“无法写入注册表”或者“环境变量配置失败”会很尴尬。这些提示如果你无视后面很可能出现 Git 命令能运行但无法正确调用 SSH 工具的情况。2. 完整安装 Git for Windows一步步拆解安装向导2.1 从双击安装包到完成安装的完整流程双击下载好的.exe安装包会弹出 Git 安装向导。整个安装流程界面并不多但每一步都有选项。我下面把完整流程和推荐选择写出来你照着走就行。第一步是选择安装路径。默认是C:\Program Files\Git如果你不想改动保持默认即可。如果你有多个硬盘分区建议装在非系统盘里比如D:\Git。要注意安装路径中不要出现中文和空格Program Files 里的空格是官方的特例能正常用但你又装其他工具时最好统一避免空格路径一些老的脚本工具对带空格的路径处理并不好。第二步是选择组件。默认会勾选“Git Bash Here”“Git GUI Here”“Add a Git Bash Profile to Windows Terminal”等选项。这些统统建议保留。其中“Add to Windows Terminal”这个选项很重要因为它会把 Git Bash 集成到 Windows Terminal 的配置文件里以后你可以直接在终端下拉菜单里打开 Git Bash体验非常好。“Git LFS”建议也一起勾上虽然你没用到大型文件的时候它不参与工作但万一克隆的仓库里有 LFS 文件缺了它会卡在拉取阶段。第三步是选择默认编辑器。这一步安装向导默认会让你选 Vim 还是别的编辑器。如果你没安装 VS Code开局默认的 Vim 会让你在写 commit message 的时候一头雾水——你真的想在一个只有键盘操作、连鼠标都不能用的界面里输入文字吗我强烈建议在下拉列表里选择“Use Visual Studio Code as Gits default editor”前提是你的电脑已经装好了 VS Code。如果没有 VS Code装一个再回来选。编辑器选择影响的是你每次git commit打开写提交说明的体验别在这一步偷懒。如果硬要用 Vim至少先搜一下 Vim 的基本保存退出命令不然你敲完代码死活退不出去只能强关窗口。第四步是调整 PATH 环境变量。这一步有三选一第一项“Use Git from Git Bash only”表示只在 Git Bash 里用 GitCMD 和 PowerShell 里不能用第二项“Git from the command line and also from 3rd-party software”是推荐选项它会把 Git 命令加入系统 PATH让 CMD、PowerShell 以及其他软件都能直接调用第三项“Use Git and optional Unix tools from the Command Prompt”会把整套 Unix 工具也加进 PATH容易和系统自带命令冲突。绝大多数情况下选第二项就好。为什么因为你后面的环境配置、SSH 操作很可能就是在 PowerShell 里做的如果选了第一项你在 PowerShell 里敲git会提示找不到命令这对新手来说就是灾难。第五步是选择 HTTPS 传输后端。有两个选项OpenSSL 和 Windows Secure Channel。默认是 OpenSSL如果你没有通过公司自建证书服务器拉代码的硬性需求保持默认绝对没问题。Windows Secure Channel 的好处是它会自动使用 Windows 系统的证书存储和代理配置在某些企业内网环境下更省心但配置灵活性不如 OpenSSL。第六步是配置行结束符转换。这个后面会专门讲安装时我建议选第一项“Checkout Windows-style, commit Unix-style line endings”也就是检出到工作区时自动转成 CRLF提交到仓库时自动转成 LF。这是最兼容的默认选择适合绝大多数人。第七步是选择终端模拟器推荐选“Use Windows default console window”如果你追求更好的终端体验也可以选 MinTTY。我个人更倾向于 MinTTY它对 ANSI 颜色支持更好命令行高亮看着更舒服但新手初期选默认的 Windows console 也不影响使用。第八步是一系列额外的配置选项包括文件缓存、Git Credential Manager、符号链接支持等这些保持默认即可特别是“Enable Git Credential Manager”一定要勾选它会帮你保存 HTTP 方式的账号密码免得每次 pull/push 都要输入。最后一路点击 Install等待安装完成。2.2 关键安装选项的取舍与原因上面的第九步里其实藏着一个很关键的细节Git Credential Manager 是什么简单说它是微软赞助的官方开源工具能够在 Windows 上帮你安全存储 Git 的访问凭据。当你第一次通过 HTTPS 方式登录 GitHub 或者 Gitee 时它会在弹窗中让你用浏览器授权成功后凭据就会被保存在系统的凭据管理器中之后推拉代码就不用再输账号密码了。这个工具集成在 Git 安装向导中默认是启用的。很多教程会让你去额外安装这个工具其实新版的 Git for Windows 已经默认带上了安装时千万别取消勾选。另外还有一个选项叫“Enable symbolic links”新手最好不要开。Windows 对符号链接的支持很特殊开启这个选项后你在克隆一个包含符号链接的仓库时可能会出现权限问题而 Windows 在默认情况下创建符号链接也需要管理员权限。除非你确实知道自己需要一个符号链接否则保持关闭最安全。PATH环境变量的选择值得再多说一句。选择第二项“Git from the command line and also from 3rd-party software”之后安装程序会把C:\Program Files\Git\cmd写入系统 PATH。这个目录里只有几个关键的 git.exe 和 gitk.exe 包装器不会把整套 Unix 工具暴露给系统。那些 Unix 工具仍然被放在C:\Program Files\Git\usr\bin里只有 Git Bash 会默认加载它。这样做的好处是互不干扰你在 PowerShell 里能正常使用 Git但又不会因为 grep、find 这些命令的版本冲突弄坏其他软件。这里面是经过权衡的设计不是随便选的。3. 环境配置让 Git 在 Windows 里真正“听话”3.1 安装完成后的第一件事验证再配置安装完成后重新打开一个终端窗口Windows Terminal、PowerShell 或者 CMD 都行然后依次执行下面的命令git --version git --exec-path where git如果git --version能正常输出版本号比如git version 2.47.1.windows.1说明安装成功。git --exec-path会显示 Git 核心程序的目录用来确认安装位置。where git则用来确认系统调用的 git 到底是哪一个路径下的版本。这三条命令一条验证版本一条确认路径一条排除环境变量冲突缺一不可。如果你刚装完却发现git --version报错“不是内部或外部命令”别慌多半是 PATH 没有生效。这时你打开系统的“环境变量”设置在“系统变量”中找到Path看看有没有包含 Git 的cmd目录。没有就手动加上。加完之后重新打开终端窗口再试一次。3.2 全局用户信息不配这一步任何提交都提交不上去Git 每次提交代码时都需要知道“你是谁”这是通过用户名称和邮箱来标记的。安装完成后的第一件事就是用下面两条命令设置全局用户名和邮箱git config --global user.name your_name git config --global user.email your_emailexample.com这里的名称和邮箱会出现在你每一次提交记录中别人在 GitHub 上也能看到它们。如果你不想暴露真实邮箱一些平台支持设置“noreply 邮箱”比如 GitHub 就提供了你的ID用户名users.noreply.github.com这样的隐藏邮箱选项可以在平台设置里查看到。另外要注意的是邮箱最好和你在代码托管平台上注册的邮箱一致这样你的提交才能正确关联到你的账号否则会出现“提交记录里显示的是另一个人”的尴尬情况。设置完可以执行git config --global --list来查看你的全部全局配置。这个命令会输出一堆配置项正常会看到 user.name、user.email以及你以后逐步加进去的 core.autocrlf、core.quotepath 等。把这些配置理解成 Git 的“个人档案”每条都有它的意义不用背但要会查。3.3 换行符与编码环境Windows 用户绕不开的坑换行符是 Windows 用户必须理解的一个概念。Unix/Linux 系统里换行符是一个字符LF也就是\n而 Windows 里换行符是两个字符CRLF也就是\r\n。如果这两个不处理好你用 Windows 打开别人提交的代码可能会看到“每一行后面多了一个 ^M”或者反过来你推上去的代码在 Linux 服务器上变得混乱不堪。Git 提供了一个核心配置来解决这个问题叫做core.autocrlf。可选值有三个true表示检出时转成 CRLF、提交时转成 LFinput表示检出时不转换、提交时转成 LFfalse表示完全不转换。在 Windows 上安装时如果你选了“Checkout Windows-style, commit Unix-style line endings”那全局配置里就已经写好了core.autocrlftrue。如果你当初不小心选了别的选项可以用下面命令手动修正git config --global core.autocrlf true除了换行符还有一个编码相关的配置叫core.quotepath。这个默认值是false意思是 Git 不会把中文文件名转成\xxx之类的八进制转义形式。很多人在 Windows 上提交中文名文件之后git status显示的全是一串乱码数字就是因为这个配置被改成了true。如果你遇到了这个问题执行git config --global core.quotepath false配置完之后git status就能正常显示中文文件名了。3.4 终端联动与 VS Code 集成在 Windows 上开发你大概率会用到 VS Code。VS Code 自带的终端可以直接调用 Git 命令而且编辑器的源代码管理面板会自动识别仓库里的文件变更。要做到这一点你只需要确保 VS Code 的git.path设置指向正确的 git.exe。一般来说如果在安装 Git 时选择了“Git from the command line and also from 3rd-party software”VS Code 会自动找到 Git无需额外配置。如果你在 VS Code 的源代码管理面板看到类似“Git not found”的提示可以打开设置搜索git.path把它手动改成C:\Program Files\Git\cmd\git.exe注意后面对应你自己实际的安装路径。之后在 VS Code 里打开任意一个 Git 仓库文件夹左侧的源代码管理图标上就会显示当前修改的文件数量点击旁边的小箭头还能直接查看文件的 diff。另外如果你重新安装了 Git 或者更新了版本记得在 VS Code 里执行一次“Developer: Reload Window”让编辑器重新加载配置和路径。否则它可能仍然缓存着旧的 Git 路径导致版本识别错误。4. SSH 密钥从生成到多平台复用4.1 SSH 密钥到底是怎么回事一句话讲明白SSH 是一种网络协议专门用来在客户端和服务器之间建立安全的加密连接。而 SSH 密钥是这套协议中使用的身份凭据它由一对文件组成公钥和私钥。公钥是可以公开的你可以把它上传到 GitHub、Gitee、GitLab 或者你自己的服务器上私钥必须严格保密它只保存在你本机的~/.ssh目录中。打个比方公钥就像你家的锁你可以把锁发给全世界私钥就像钥匙只有你手里有。别人想进门必须拿配对的钥匙来开锁。在使用 Git 时相比 HTTPS 方式每次都要输账号密码或者依赖 Credential ManagerSSH 方式更灵活更适合频繁推送代码、操作多台服务器、写自动部署脚本的场景。一旦配置好了 SSH 密钥你就能在免密的情况下完成 git clone、git pull、git push 等操作。这也是为什么很多人在 Windows 上折腾 SSH 密钥——它的确是 Git 使用体验里非常关键的一环。4.2 用 ssh-keygen 生成密钥的完整实操打开 Git Bash注意这里最好用 Git Bash而不是 PowerShell因为在 Git Bash 里路径规则和 SSH 工具的表现更稳定执行下面的命令生成密钥ssh-keygen -t ed25519 -C your_emailexample.com我来解释一下这条命令的参数。-t ed25519指定使用 Ed25519 算法生成密钥。这是目前推荐使用的算法密钥长度短、安全性高、生成速度快如果你面对的是某些老旧服务器或者代码托管平台不支持 Ed25519那就改成老牌的 RSA 算法ssh-keygen -t rsa -b 4096。-C后面的字符串只是一个注释通常填你的邮箱方便你以后在多台电脑上区分哪把钥匙是谁的。回车之后系统会提示你输入保存密钥的文件路径默认是~/.ssh/id_ed25519。如果你只有一台电脑、一把钥匙直接回车用默认即可。如果你要管理多个账号这一步骤很重要后面会专门讲。接着系统会提示你输入 passphrase口令这个相当于给私钥再加一层保护即使私钥文件被别人拷走了没有口令也打不开。很多人怕麻烦直接跳过但从安全角度我建议你设置一个尤其当你用它连接生产服务器时。生成成功后屏幕上会显示一个“随机艺术图像”一样的字符画这是让你确认指纹用的。真正重要的是你本机的~/.ssh目录里会出现两个文件id_ed25519私钥和id_ed25519.pub公钥。如果你想查看公钥的内容执行cat ~/.ssh/id_ed25519.pub输出的一整行就是你的公钥形如ssh-ed25519 一串字母... 你的邮箱。把这一行完整复制下来准备配置到托管平台上。4.3 把公钥配置到代码托管平台并进行连通性验证大部分代码托管平台添加 SSH 公钥的位置都差不多。以 GitHub 为例登录后点击右上角头像选择 Settings然后在左侧导航找到 SSH and GPG keys点击“New SSH key”把上一步复制的公钥粘贴进去取一个容易识别的标题比如“Windows laptop”保存即可。Gitee 的路径是“设置 - 安全设置 - SSH 公钥”GitLab 则是“Preferences - SSH Keys”大同小异。填好公钥之后回到本地终端执行下面的命令测试 SSH 连接是否通畅ssh -T gitgithub.com第一次连接时SSH 会提示你确认远程主机的指纹输入yes回车。如果配置正确你会看到类似“Hi your_name! Youve successfully authenticated, but GitHub does not provide shell access.”的提示。这句话的意思是认证已成功但 GitHub 不支持 shell 登录这是正常现象你不是真的要用 SSH 去它的服务器上敲命令只是用来传 Git 数据。如果你连的是 Gitee测试命令是ssh -T gitgitee.com成功后会看到“Hi xxx! Youve successfully authenticated, but GITEE.COM does not provide shell access.”。看到这些提示你的 SSH 密钥就正式生效了。4.4 多账号多密钥管理的进阶方案现实中很多人不止一个代码托管平台的账号比如公司用 GitLab个人用 GitHub有时候还自建了一个 Gitee。如果为每个账号都生成一对不同的密钥就必须单独管理一下否则 Git 默认用的都是id_ed25519你推代码到不同平台时身份会乱套。多密钥管理的核心是~/.ssh/config文件。假设你生成了三对密钥分别是id_ed25519_github、id_ed25519_gitee、id_ed25519_gitlab那么就在~/.ssh目录下新建一个名为config的文件没有后缀名内容如下# GitHub Host github.com HostName github.com User git IdentityFile ~/.ssh/id_ed25519_github # Gitee Host gitee.com HostName gitee.com User git IdentityFile ~/.ssh/id_ed25519_gitee # GitLab Host gitlab.com HostName gitlab.com User git IdentityFile ~/.ssh/id_ed25519_gitlab保存之后Git 在连接对应域名时就会自动使用对应的私钥。这里有一点值得注意Host后面的别名可以和HostName不一样你在执行 SSH 命令时用的是Host这个别名而 SSH 真正连接时使用的是HostName。这也是很多人喜欢配置Host mygithub这种简短别名的原因。生成多把密钥时每把密钥都需要在不同的命令行交互中输入自定义文件名。比如你在生成第二把密钥时系统问“Enter file in which to save the key”你就得手动输入id_ed25519_gitee之类的名字不能直接回车否则会覆盖掉之前的默认密钥。这是一个很容易踩的坑我自己的经验是在生成密钥之前先想好命名规则不然后悔了还得从头配置。5. 实操中的常见问题与排查技巧实录5.1 认证与连接故障SSH 连不上怎么查场景一ssh -T gitgithub.com卡了很久没有反应最后提示Connection timed out。这种情况首先要确认你本机是不是开了系统代理之类的东西导致 SSH 流量走了不该走的路径。SSH 默认走 22 端口如果网络环境对 22 端口不友好你可以换用 GitHub 提供的 443 端口 SSH 方式来解决。具体做法是在~/.ssh/config里追加Host github.com HostName ssh.github.com Port 443这个方案是可行的GitHub 官方文档里也推荐过在特定网络环境下使用。改完之后重新测试通常就能连上。场景二已经添加了公钥但ssh -T却提示Permission denied (publickey)。这一般有三个原因一是你测试用的命令跟密钥文件不匹配比如你默认密钥是id_ed25519_github但 SSH 没有通过 config 文件获知该用哪一把导致它去尝试默认的id_ed25519二是私钥的权限不对Windows 下有时候会把整个~/.ssh目录的权限开放给所有用户SSH 出于安全会拒绝读取这些密钥三是你在复制公钥时粘贴错了比如多复制了一个空格或者少了末尾的注释。排查思路很简单先用ssh -vT gitgithub.com开启详细日志输出观察里面有没有类似Offering public key的条目以及它加载了哪个文件名。如果显示的路径不是你的预期密钥就说明 config 文件没生效或者IdentityFile写错了。如果提示Bad permissions在 Windows 上可以通过属性面板把~/.ssh目录的继承权限去掉只保留当前用户完全控制再删掉多余的 Everyone 权限项。5.2 换行符、中文乱码与历史提交的隐藏坑之前在环境配置里说过core.autocrlf和core.quotepath这两个配置在多平台协作时最容易引发隐性冲突。比如你在 Windows 上提交了一个文件里面是 CRLF 换行然后你的同事在 macOS 上把它改成 LF 提交了Git 默认会把这个文件识别为“整个文件都发生了变化”因为每一行的行尾都不同。等别人拉取时diff 界面会显示一大片红色非常难排查。解决方法是仓库级别的统一约定。新建仓库时最好创建一个.gitattributes文件在里面显式声明文本文件的换行规范。例如* textauto *.js text eollf *.ts text eollf *.bat text eolcrlf这样无论你本地是什么系统Git 都会按文件层级规则处理换行远比全局core.autocrlf可靠。全局配置解决的是“个人习惯”仓库级.gitattributes解决的是“团队约定”后者才是不吵架的根本。如果你已经在一个老仓库里因为换行符造成了大量假 diff可以执行一次git add --renormalize .把整个仓库文件按当前属性重新归一化一次但前提是仓库里所有参与者的配置一致做完后最好告知大家统一更新配置。中文乱码是另一个高频问题。除了前面提到的core.quotepath false还有可能是你的终端编码不对。Git Bash 默认使用 UTF-8Windows 自带的 CMD 默认可能是本地代码页比如 GBK这会导致你在 CMD 里看到的中文 commit message 变成乱码。解决办法就是把 Windows 系统的“Beta 版使用 Unicode UTF-8 提供全球语言支持”选项打开在控制面板的“区域 - 管理 - 更改系统区域设置”里或者一律使用 Windows Terminal Git Bash 的组合。5.3 环境冲突与多版本共存别让 PATH 毁了你的调试时光我见过一个很典型的问题机器上装了 SourceTree它自带了一个 Git后来又装了 Git for Windows结果git --version一会儿显示 2.x 新版本一会儿又显示 1.x 老版本同一个仓库用 VS Code 提交就是失败。后来排查发现SourceTree 在安装时自动把自己内置的 Git 目录加到了用户 PATH 前面用户 PATH 的优先级高于系统 PATHGit for Windows 写入的是系统 PATH自然就“打不过”它了。这种问题最好的规避方法就是装 Git 的时候选择“仅安装到当前用户”还是“安装到所有用户”建议选择所有用户安装向导有这一步。以后如果出现 PATH 优先级问题打开“系统环境变量”设置把用户变量中的 Git 相关项删掉只保留系统变量里的路径或者把系统变量Path中C:\Program Files\Git\cmd上移到最前面。另外还有一件事被很多人忽略Windows 更新之后系统的 OpenSSH 客户端可能会升级到一个新版本它和 Git 自带的 SSH 可能会争抢~/.ssh/config的解析方式。如果你发现 SSH config 写了很多规则却一直没生效可以检查一下ssh -V输出的版本。如果你希望通过 Git 自己带的 SSH 来处理一切可以在 Git 配置里指定使用内置 SSHgit config --global core.sshCommand C:/Program Files/Git/usr/bin/ssh.exe这个配置在 Windows 上特别实用因为它能让 Git 和系统 SSH 解耦避免因为 Windows 更新或者系统策略导致 SSH 行为出现意外变化。最后再分享一个小技巧Git 的全局配置文件和~/.ssh/config在 Windows 上的默认位置分别是C:\Users\你的用户名\.gitconfig和C:\Users\你的用户名\.ssh\config。如果你换了新电脑直接把这两个文件备份带走再重新生成一对密钥新机器的 Git 环境和 SSH 连接几乎可以无缝迁移。我每次重装系统前都会把这两份文件加上私钥和公钥一块备份到自己的私人存储里事实证明这能省掉至少半个小时的“初始环境搭建”时间。希望你也能从一开始就把习惯养好后面越用越顺。