GitHub 多账号混用方案总结(SSH + HTTPS)

一、整体方案说明

适用场景

一台设备使用两个 GitHub 账号:

  1. 账号 A(个人):纯 SSH 方式,不依赖 GitHub CLI (gh)

  2. 账号 B(工作 / 其他):纯 HTTPS 方式,由 gh 管理登录与凭据

核心优势

  • 两套认证完全隔离,不会串账号、权限混乱

  • 无需频繁执行账号切换命令,使用简单

  • 符合 GitHub 安全规范,不共用 SSH 密钥

二、关键前置规则

  1. SSH 限制

    • 一个 SSH 公钥仅能绑定一个 GitHub 账号,无法多账号共用

    • 单账号 + 默认命名密钥,**无需配置 ****\~/\.ssh/config**

    • 自定义密钥名 / 多组 SSH 密钥,才需要 \~/\.ssh/config 区分

  2. GitHub CLI (gh) 规则

    • gh 仅管理 HTTPS 协议 的登录态与 Git 凭据,和 SSH 无关

    • 可主动在 gh 中删除 SSH 对应的账号,仅保留 HTTPS 账号,环境更干净

    • 仓库使用协议决定认证方式:SSH 仓库走密钥,HTTPS 仓库走 gh 凭据

Read more

Git基础

创建存储库

# 创建一个新的本地存储库
$ git init [项目名称]

# 克隆存储库
$ git clone <git 仓库 url 地址>

# 将存储库克隆到指定目录
$ git clone <git 仓库 url 地址> <我的文件夹>
Read more

git 修改本地和远程分支名称

git branch -a #查看所有分支
git branch -r #查看远程分支
git branch -vv #查看本地分支所关联的远程分支

git branch -m old_branch new_branch #重命名本地分支
git push origin :old_branch #删除远程分支
git push --set-upstream origin new_branch #推送并关联新的远程分支

Git飞行规则(Flight Rules)

编辑提交(editting commits)

我刚才提交了什么?

如果你用 git commit -a 提交了一次变化(changes),而你又不确定到底这次提交了哪些内容。 你就可以用下面的命令显示当前HEAD上的最近一次的提交(commit):

(main)$ git show

或者

$ git log -n1 -p
Read more

git shallow clone

git clone 默认会下载项目的完整历史版本,如果你只关心最新版的代码,而不关心之前的历史信息,可以使用 git 的浅复制功能:

$ git clone --depth=1 git@github.com:hd1987/hd1987.github.io.git

--depth=1 表示只下载最近一次的版本,使用浅复制可以大大减少下载的数据量,如果之后又想获取完整历史信息,可以使用下面的命令:

$ git fetch --unshallow

Git 忽略文件不加入版本控制

.gitignore

# 此为注释 – 将被 Git 忽略
*.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
tmp/* # 忽略tmp文件夹所有文件,因为git不会加入空目录

其它过滤条件

  • : 代表任意的一个字符
  • : 代表任意数目的字符
  • {!ab} : 必须不是此类型
  • {ab,bb,cx} : 代表ab,bb,cx中任一类型即可
  • [abc] : 代表a,b,c中任一字符即可
  • [ ^abc] : 代表必须不是a,b,c中任一字符

.gitignoreglobal

在用户目录下创建 ~/.gitignoreglobal 文件,
需要执行 git config --global core.excludesfile ~/.gitignoreglobal 来使得它生效。

忽略本地的文件控制,不影响全局

.git/info/exclude 这里设置的是你自己本地需要排除的文件,他不会影响到其他人,也不会提交到版本库中去。

去除已经提交文件的版本控制(公共)

  1. rm -rf PATH
  2. git rm -r --cached PATH
  3. 修改.gitignore,添加忽略文件
  4. git add -A
  5. git push

忽略已经提交到版本库的文件(本地)

git update-index --assume-unchanged PATH # 忽略跟踪
git update-index --no-assume-unchanged PATH #恢复跟踪

提交空的目录树

需要提交一个空的 log 目录时,在里面放置一个空的.gitignore

Git使用摘要

Git是一个“分布式版本管理工具”,简单的理解版本管理工具:大家在写东西的时候都用过“回撤”这个功能,但是回撤只能回撤几步,假如想要找回我三天之前的修改,光用“回撤”是找不回来的。而“版本管理工具”能记录每次的修改,只要提交到版本仓库,你就可以找到之前任何时刻的状态(文本状态)。

下面的内容就是列举了常用的Git命令和一些小技巧,可以通过”页面内查找”的方式进行快速查询:Ctrl/Command+f

Read more