以下是 GitHub 的 SSH Key 认证Token 认证创建仓库推送代码的完整流程,分步骤详细说明:


一、SSH Key 认证

1. 生成 SSH Key

1
2
ssh-keygen -t ed25519 -C "你的邮箱@example.com"  # 推荐使用 ed25519 算法
ssh-keygen -t rsa -b 4096 -C "你的邮箱@example.com" # 或使用 RSA(兼容性更好)
  • 连续按回车使用默认路径(~/.ssh/id_ed25519~/.ssh/id_rsa
  • 可设置密码(可选,增强安全性)

2. 添加公钥到 GitHub

  • 复制公钥内容:
    1
    2
    3
    4
    # ed25519 算法
    cat ~/.ssh/id_ed25519.pub
    # 或 RSA 算法
    cat ~/.ssh/id_rsa.pub
  • 登录 GitHub → SettingsSSH and GPG keysNew SSH Key
  • 粘贴公钥内容并保存

3. 测试 SSH 连接

1
2
ssh -T [email protected]
# 成功显示:Hi 用户名! You've successfully authenticated...

二、Token 认证(替代密码)

1. 生成 Personal Access Token

  • 登录 GitHub → SettingsDeveloper settingsPersonal access tokensTokens (classic)Generate new token
  • 设置权限(按需勾选):
    • repo(仓库操作)
    • user(用户信息)
    • write:packages(发布包)
  • 设置过期时间(建议短期有效)
  • 生成后务必复制 Token(关闭页面后无法再次查看)

2. 使用 Token 推送代码

  • HTTPS 协议
    1
    2
    git remote set-url origin https://github.com/用户名/仓库名.git
    # 推送时输入 Token 作为密码(用户名可任意)
  • SSH 协议:仍使用 SSH Key 认证,Token 仅用于 API 操作(如脚本中调用 GitHub API)

三、创建新仓库

1. 在 GitHub 网页创建(推荐)

  • 登录 GitHub → 点击 New → 填写仓库名、描述 → 选择公开/私有 → Create repository
  • 复制仓库地址(SSH 或 HTTPS)

2. 通过命令行创建(本地初始化)

1
2
3
4
5
6
# 初始化本地仓库
git init
# 添加远程仓库地址(SSH 示例)
git remote add origin [email protected]:用户名/仓库名.git
# 首次推送(自动关联分支)
git push -u origin main

四、推送代码流程(完整示例)

1. 本地开发后提交

1
2
3
4
# 添加所有修改
git add .
# 提交代码(需关联远程仓库)
git commit -m "feat: 初始化项目"

2. 推送代码到 GitHub

  • SSH 协议
    1
    git push origin main  # 或分支名(如 git push origin feature/login)
  • HTTPS 协议(使用 Token)
    1
    2
    git push https://github.com/用户名/仓库名.git main
    # 输入用户名(任意)和 Token(作为密码)

五、常见问题

  1. 权限拒绝(Permission Denied)

    • 检查 SSH Key 是否添加到 GitHub
    • 确认远程仓库地址正确:git remote -v
    • 测试 SSH 连接:ssh -T [email protected]
  2. Token 过期

    • 重新生成 Token 并更新本地配置(如脚本中使用的 Token)
  3. 分支名称问题

    • GitHub 默认分支现为 main(旧项目可能为 master),推送时确保分支名一致

流程总结

1
生成 SSH Key → 添加到 GitHub → 本地创建/克隆仓库 → 提交代码 → 推送(SSH/Token)

通过以上步骤,您可以安全高效地使用 GitHub 进行代码管理。SSH Key 适合长期免密操作,Token 则适用于临时授权或 API 调用。