还在手动切Git账号?大错特错!你可以配置出在不同的项目里,自动使用不同账号
切换 Git 账号的命令很简单,比如我们最常见的配置账号方式:
git config –global user.name “Your New Username”
git config –global user.email “Your New Email Address”
执行这两行命令,在替换“Your New Username”和“Your New Email Address”为你想要切换的新用户名和邮箱地址后,切换成功,再次进行git操作时,使用的就是新的账号信息。
然后你输密码,记住,完事。
想要取消配置也很简单,直接 unset 就行:
git config --global –unset user.name
git config --global –unset user.email
执行完后,就会删除当前配置的用户名和邮箱地址。你可以搞个脚本什么的来一键切换/一键删除,想要切换时点一点,也差不多大多。
但是呢,你总归还是在做额外操作,假设你有多个项目,比如说你的公司对接不同合作方,需要使用不同的git账号,你每个项目切来切去是很麻烦的。
有没有一种方法,可以在不同项目里,自动使用不同的Git账号?
实现我在不同的项目里,直接无脑 git pull、git push ,默认就在使用相匹配的正确账号。
当然可以!
我们能通过 Git config 配置文件 + SSH Key 访问 + includeIf.hasconfig 命令实现这一套流程。
实现方法
具体的逻辑是这样的:
- Git 这个工具,它可以指定你磁盘上的单个配置文件来执行,优先级比全局的高
- 所有支持Git工作流的(github、gitee、gitlab等)服务,他都支持配置SSH Key访问
- Git config里,可以配置SSH Key
- 所以,我们只要在每次执行Git命令时,指向对应配置文件就行了
- 正好,Git又有个全局配置,可以设置匹配规则,比如匹配到某个URL ,就应用指定的配置文件
这不就齐活了? 我们只要生成几个不同的SSH Key,生成几个不同的配置文件,然后 git config –global 在全局里指定什么URL就用什么配置,一套下来就能给我们得需求安排得明明白白。
知道方法后,事就好办了,我来带你一步步走。
生成 SSH Key、提交时GPG签名
如何生成SSH Key直接看这个文档,他说的非常详细,我没有必要重复。记得邮箱要对的上我们对应服务的邮箱。
然后我们也可以在自己的系统上增加GPG签名:
在 Git bash 里执行就OK: curl -sS https://github.com/web-flow.gpg | gpg --import
接着我们就可以正式创建配置文件了,我们还是用命令的方式啊,而不是手动去创建。
整体配置流程
-- 配置文件丢哪个目录里 mkdir -p ~/.config/git -- 创建的文件名就叫github,标识它代表我个人的github账号,塞进去我的信息 git config --file ~/.config/git/github user.name myid git config --file ~/.config/git/github user.email myid.me@gmail.com -- 设置SSH Key, 这个.ed25519后缀的文件,就是本地的Key文件 git config --file ~/.config/git/github user.signingKey ~/.ssh/myid.ed25519 --提交时进行gpg签名,格式为SSH git config --file ~/.config/git/github commit.gpgsign true git config --file ~/.config/git/github gpg.format ssh -- 匹配路径,指向刚创建的github文件 git config --global 'includeIf.hasconfig:remote.*.url:git@github.com:myid/**.path' ~/.config/git/github
执行这些命令后,Git 在进行相关操作时(如提交等)会按照这些配置来执行相应的行为,比如使用我们指定好了的用户名、邮箱、签名密钥等。
这里面唯一复杂点的,也就是最后这一行命令。
具体解释一下,他的大致意思是,如果存在某个远程仓库的 URL 匹配特定模式(这里是 git@github.com:myid/**
),则包含指定路径(这里是 ~/.config/git/github
)的配置。这样可以根据特定的远程仓库来应用特定的配置。
而上述流程里所有的 “myid” 其实都是我的github账号,为了方便看我博客的读者们替换,我特地改了改。
克隆时配置无效处理
至此,我们已经配完了。 只不过呢,他还有个问题。
那就是我们虽然在全局里配置了,执行命令时会自动应用配置,但是,它在你第一次clone项目时是不起效果的。读取不到你的配置。
这个解决起来很简单,我们clone项目时,手动指定一下SSH Key 就行:
--config core.sshCommand="ssh -i ~/.ssh/myid.ed25519
只要你把项目克隆下来了,那么之后我们所有的操作,都和日常提交拉取没有任何区别,你进什么项目,用的就是什么账号,不用你费一点神。