◆ Windows 安装 Git
从官网 https://git-scm.com/download/win 下载安装包,文件名形如 Git-版本号-64-bit.exe,安装选项保持默认,注意添加path环境变量。
Git Bash,是随 Git 一同安装的终端,后续命令在 Git Bash 或 PowerShell 中执行均可。
下载缓慢时可用国内镜像站按目录取对应版本:https://registry.npmmirror.com/binary.html?path=git-for-windows/。
安装结果用版本号确认:
git --version
◆ Linux 安装 Git
Debian、Ubuntu 用 apt 安装:
sudo apt update
sudo apt install git
apt update 刷新软件源索引,apt install 完成安装并处理依赖
◆ SSH 认证原理
SSH 认证使用一对密钥:私钥保存在本机,公钥登记到平台。
认证流程:客户端发起连接后,平台下发一段随机数据;客户端用私钥对其签名并回传,平台用已登记的公钥验签,通过即确认发起方持有对应私钥。
提交记录中的作者名与邮箱与认证无关,来自本机的 git config;其中邮箱与账号邮箱一致时,提交才会关联到该账号。
首次连接某主机时,终端会显示主机指纹并询问是否继续,确认后该指纹写入 ~/.ssh/known_hosts,之后连接时用于判断主机是否被替换。
◆ 生成密钥
密钥对在本机生成,私钥留存、公钥交给平台;Windows 在 Git Bash 中执行,Linux 在终端中执行,命令相同。
ssh-keygen -t ed25519 -C "邮箱"
-t 指定密钥算法,ed25519 为当前通用算法;-C 为备注,通常填邮箱,仅在平台上用于辨认这把公钥。
执行中先后询问两处:保存路径,直接回车取默认的 ~/.ssh/id_ed25519(Windows 对应 C:\Users\用户名.ssh\);口令(passphrase),留空则使用时不需输入,填写则每次连接需要输入一次,或交由 ssh-agent 缓存。
生成后得到两个文件:id_ed25519 为私钥,id_ed25519.pub 为公钥。
所用平台不支持 ed25519 时改用 RSA:
ssh-keygen -t rsa -b 4096 -C "邮箱"
-b 指定位数,RSA 常用 4096。公钥需要复制出来交给平台:Linux 用 cat ~/.ssh/id_ed25519.pub 打印,Windows 打开 C:\Users\用户名.ssh 目录,用记事本打开 .pub 文件,使用 RSA 时把文件名换成 id_rsa.pub。公钥为一行文本,从 ssh-ed25519 或 ssh-rsa 起复制到末尾备注。
◆ 登记公钥
公钥登记在平台的账号设置里;登记完成后,平台即认可对应私钥的签名。
GitHub 的入口在右上角头像 → Settings → SSH and GPG keys → New SSH key;Title 任意填写,Key 处粘贴公钥整行。
Gitee 的入口在右上角头像 → 设置 → 安全设置 → SSH 公钥;按提示粘贴并提交,提交时会要求输入账号密码确认。
同一把公钥可以登记到多个平台;同一平台内,一把公钥只能绑定一个账号。
◆ 验证连接
登记完成后在本地发起一次连接测试:
ssh -T git@github.com
首次连接会提示主机指纹并询问是否继续,输入 yes 回车;-T 表示不申请终端,因为平台只提供认证、不提供 shell。
正常输出形如 Hi 用户名! You've successfully authenticated, but GitHub does not provide shell access. Gitee 换用 ssh -T git@gitee.com 验证,输出结构相同,域名部分为 GITEE.COM。
输出 Permission denied (publickey) 表示平台不认可本机提供的密钥:检查公钥是否已登记、登记的是否为本机这对此密钥、私钥是否位于默认路径;换用 -i 指定私钥可排除路径因素:
ssh -T -i ~/.ssh/id_ed25519 git@github.com
-i 让本次连接使用给定私钥,不改动默认配置。连接超时多为 22 端口被网络拦截;GitHub 支持 SSH 走 443 端口,在 ~/.ssh/config 中把目标主机改为 ssh.github.com 并声明端口,已有 Host github.com 配置时并入同一块:
Host github.com
HostName ssh.github.com
Port 443
User git
该写法把连接目标换到 ssh.github.com 的 443 端口,认证流程不变。
ssh默认不走网络代理,如果启用代理,需要对ssh要使用代理的相应环境变量进行配置。
◆ 多平台密钥配置
需要各平台使用独立密钥时,先分别生成,再配置本机如何挑选:
ssh-keygen -t ed25519 -C "邮箱" -f ~/.ssh/id_ed25519_github
ssh-keygen -t ed25519 -C "邮箱" -f ~/.ssh/id_ed25519_gitee
公钥分别登记后,在 ~/.ssh/config 中按主机指定所用私钥:
Host github.com HostName github.com User git IdentityFile ~/.ssh/id_ed25519_github
Host gitee.com User git IdentityFile ~/.ssh/id_ed25519_gitee
◆ 日常使用
配置身份
提交署名来自本地配置,只影响提交记录,与认证无关;全局设置一对即可。
git config --global user.name "名字"
git config --global user.email "邮箱"
user.name 显示在每条提交的作者处;user.email 与账号邮箱一致时,提交才会关联到该账号。两个平台的账号邮箱不同时,在对应仓库内用 --local 单独设置,该仓库以局部配置为准。
其他常用项:git config --global --list 查看已配置内容;git config --global init.defaultBranch main 把新建仓库的默认分支名设为 main。
克隆与推送
从仓库页面复制 SSH 地址克隆,地址形如 git@github.com:用户名/仓库名.git。
git clone git@github.com:用户名/仓库名.git
git clone 取回该仓库的全部提交,并把远端地址登记为 origin。本地已有仓库、远端仍为 HTTPS 地址的,改一次远端即可。
git remote set-url origin git@github.com:用户名/仓库名.git
git remote set-url 只改远端地址,本地提交与分支不受影响。
日常提交与推送:
git add .
git commit -m "提交说明"
git push
git add 把改动放入暂存区,git commit 记录一次提交,git push 推送到远端;新建仓库的首次推送需要指定上游,写成 git push -u origin main,-u 之后直接 git push 即可。git status 查看当前分支与改动状态,git log 查看提交历史。
查命令
命令行内直接查某个命令的手册:git help 命令 或 git 命令 --help,Windows 上在浏览器打开本地文档,Linux 上打开手册页;git help -a 列出全部命令。
在线资料:官方参考文档在 https://git-scm.com/docs;GitHub 的中文速查表把常用命令集中在一页:https://training.github.com/downloads/zh_CN/github-git-cheat-sheet/。test