Git 多用户配置

一、引言

一般来说,安装好 git 后,我们都会配置一个全局的 config 信息,就像这样:

git config --global user.name "jitwxs" // 配置全局用户名,如 Github 上注册的用户名
git config --global user.email "jitwxs@foxmail.com" // 配置全局邮箱,如 Github 上配置的邮箱

但是你可能会碰到需要在一台电脑上配置多个用户信息的需求。此时就不能够用一个全局配置搞定一切了。

比如因为我的个人电脑出了问题,我想要提交我的个人项目时,只能用公司配的电脑去提交。而公司的电脑配置的是私有的 gitlab 仓库,而我自己的项目存储在 github 上。这两个仓库不仅仓库地址不一样,仓库的用户名和邮箱都不一样。

二、配置多用户

本文将配置分别是 github 以及 gitlab 上的两个用户,并分别在它们所属的项目上进行 git 操作,这差不多就是配置多用户的大部分操作了。

GITHUBGITLAB
用户名jitwxslemon
邮箱jitwxs@foxmail.comlemon@test.com

2.1 清除全局配置

在正式配置之前,我们先得把全局配置给清除掉(如果你配置过的话),执行命令:

git config --global --list

这会列出所有已经配置的全局配置,如果你发现其中有 user.nameuser.email 信息,请执行以下命令将其清除掉:

git config --global --unset user.name
git config --global --unset user.email

2.2 生成钥对

钥对的保存位置默认在 ~/.ssh 目录下,我们先清理下这个目录中已存在的钥对信息,即删除其中的 id_rsaid_rsa.pub 之类的公钥和密钥文件。

首先我们开始生成 github 上的仓库钥对,通过 -C 参数填写 github 的邮箱:

ssh-keygen -t rsa -C “jitwxs@foxmail.com”

按下 ENTER 键后,会有如下提示:

Generatingpublic/privatersa key pair.Enter fileinwhich to save the key (/Users/jitwxs/.ssh/id_rsa):

在这里输入公钥的名字,默认情况是叫 id_rsa,为了和后面的 gitlab 配置区分,这里输入 id_rsa_github。输入完毕后,一路回车,钥对就生成完毕了。

下面开始生成 gitlab 上的仓库钥对,步骤和上面一样:

ssh-keygen -t rsa -C “lemon@test.com”

生成的公钥名就叫做:id_rsa_gitlab

2.3 添加 SSH Keys

我相信你既然都看到这篇文章了,你一定掌握了如何将公钥添加到 SSH Keys 中。请将 id_rsa_github.pubid_rsa_gitlab.pub 内容分别添加到 github 和 gitlab 的 SSH Keys 中,这里就不啰嗦了。

2.4 添加私钥

在上一步中,我们已经将公钥添加到了 github 或者 gitlab 服务器上,我们还需要将私钥添加到本地中,不然无法使用。添加命令也十分简单,如下:

ssh-add ~/.ssh/id_rsa_github // 将 GitHub 私钥添加到本地
ssh-add ~/.ssh/id_rsa_gitlab // 将 GitLab 私钥添加到本地

添加完毕后,可以通过执行 ssh-add -l 验证下,如果都能显示出来和下面一样,就 OK 了。

 ~  ssh-add -l
2048 SHA256:mXVNxWHZsZpKOnHlPslF2jXAWR+jc7M6P5hYbrCo jitwxs@foxmail.com (RSA)
2048 SHA256:Blhp3+Hx5mp9HDivFjDuwc/PaQ8ux45TRa6nTsfIe0PEz4 lemon@test.com (RSA)

2.5 管理密钥

通过以上步骤,公钥、密钥分别被添加到 git 服务器和本地了。下面我们需要在本地创建一个密钥配置文件,通过该文件,实现根据仓库的 remote 链接地址自动选择合适的私钥。

编辑 ~/.ssh 目录下的 config 文件,如果没有,请创建。

vim ~/.ssh/config

配置内容如下:

Host github
HostName github.com
User jitwxs
IdentityFile ~/.ssh/id_rsa_github

Host gitlab
HostName gitlab.mygitlab.com
User lemon
IdentityFile ~/.ssh/id_rsa_gitlab

该文件分为多个用户配置,每个用户配置包含以下几个配置项:

  • Host:仓库网站的别名,随意取
  • HostName:仓库网站的域名(PS:IP 地址应该也可以)
  • User:仓库网站上的用户名
  • IdentityFile:私钥的绝对路径

注: Host 就是可以替代 HostName 来使用的别名,比如我 github 上某个仓库的 clone 地址为:

git@github.com:jitwxs/express.git

那么使用 Host 后就是:

git@github:jitwxs/express.git

咳咳,反正我觉得没啥用,毕竟 remote 地址都是直接复制下来的,没人会手敲吧?

可以用 ssh -T 命令检测下配置的 Host 是否是连通的:

~/.ssh  ssh -T git@github
Hi jitwxs! You've successfully authenticated, but GitHub does not provide shell access.
~/.ssh  ssh -T git@gitlab
Welcome to GitLab, @lemon!

当然不用 Host 用 HostName 也是一样的:

~/.ssh  ssh -T git@github.com
Hi jitwxs! You've successfully authenticated, but GitHub does not provide shell access.
~/.ssh  ssh -T git@gitlab.mygitlab.com
Welcome to GitLab, @lemon!

2.6 仓库配置

恭喜你!完成以上配置后,其实你已经基本完成了所有配置。分别进入附属于 github 和 gitlab 的仓库,此时都可以进行 git 操作了。但是别急,如果你此时提交仓库修改后,你会发现提交的用户名变成了你的系统主机名。

这是因为 git 的配置分为三级别,System —> Global —>Local。System 即系统级别,Global 为配置的全局,Local 为仓库级别,优先级是 Local > Global > System。

因为我们并没有给仓库配置用户名,又在一开始清除了全局的用户名,因此此时你提交的话,就会使用 System 级别的用户名,也就是你的系统主机名了。

因此我们需要为每个仓库单独配置用户名信息,假设我们要配置 github 的某个仓库,进入该仓库后,执行:

git config --local user.name "jitwxs"
git config --local user.email "jitwxs@foxmail.com"

执行完毕后,通过以下命令查看本仓库的所有配置信息:

git config --local --list

至此你已经配置好了 Local 级别的配置了,此时提交该仓库的代码,提交用户名就是你设置的 Local 级别的用户名了。

  • 29
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
Git-2.23.0/win64/32/mac os 等 多个系统的安装包 , Git 2.23发行说明 ====================== 自v2.22起的更新 ------------------- 向后兼容性说明 *“format-patch”的“--base”选项计算了patch-id 不稳定方式的必备补丁,已更新为 以与“git patch-id --stable”兼容的方式进行计算。 *默认情况下,“git log”命令的行为就像--mailmap选项一样 得到了。 用户界面,工作流程和功能 *已经教授“git fast-export / import”对来处理提交 使用UTF-8以外的编码的日志消息更好。 *在最近的Git版本中,每个工作树的引用都暴露在外 refs / worktrees / / hierarchy,表示工作树名称 必须是有效的refname组件。代码现在清理名称 给予工作树,确保这些参考文件格式正确。 *“git merge”学习了“--quit”选项,可以清理正在进行中 合并,同时离开工作树和索引仍然一团糟。 *“git format-patch”学习配置以设置默认值 它的--notes = 选项。 *显示具有潜在拼写错误的args的代码 解释为commit-ish已得到改进。 *“git clone --recurse-submodules”学会了设置子模块 忽略超级项目gitlink中记录的提交对象名称 而是使用恰好位于最前端的提交 通过传递新的远程跟踪分支从一开始 “--remote-submodules”选项。 *模式“git diff / grep”用于提取功能和单词 Matlab的边界已扩展到覆盖Octave,更多 或更少的等价物。 *“git help git”很难发现(好吧,至少对某些人而言) 人)。 *模式“git diff / grep”用于提取功能和单词 Rust的边界已被添加。 *“git status”可以告诉非标准默认值 “ - [no-] ahead-behind”选项带有新的配置变量 status.aheadBehind。 *获取结果时会报告“git fetch”和“git pull” 非快进更新,让用户注意到异常情况。 这些命令学会了“--no-show-forced-updates”选项以禁用 这个安全功能。 *引入了两个新命令“git switch”和“git restore” 分裂“检查分支机构以推进其历史”和 “检查索引和/或树的路径 推进当前历史“脱离单一”git checkout“ 命令。 *“git branch --list”学会了总是将分离的HEAD输出为 无论如何,第一项(当HEAD分离时) 的语言环境。 *条件包含机制学习基于选择 HEAD目前所在的分支机构。 *“git rev-list --objects”学习了“--no-object-names”选项 压制用作分组提示的对象的路径 包装对象。 *一个新的tag.gpgSign配置变量将“git tag -a”变成 “git tag -s”。 *“git multi-pack-index”学习了expire和repack子命令。 *“git blame”学会了“忽略”历史上的承诺,其中 效果(以及它们的存在)被忽略了。 *“git cherry-pick / revert”学会了一个新的“--skip”动作。 *来自备用对象库的引用提示可用作 现在可达性计算的起点。 *“git status”输出中的额外空行已减少。 *存储库中的提交可以用多个来描述 现在提交图形文件,它允许提交图形文件 逐步更新。 *“git range-diff”输出已经过调整,以便于识别 显示补丁所显示的文件的哪一部分。 绩效,内部实施,发展支持等 *更新“git rebase”的支持部分以删除应该的代码 不再使用。 *开发人员支持,以模拟测试中未满足的先决条件 确保测试时其余测试仍然成功 已跳过先决条件。 *“git update-server-info”学会了不用#重写文件 相同的内容。 *指定在运行时查找动态库的路径的方法 已经简化了。传递-R / path /到/ dir的旧默认值 替换为新的默认值以传递-Wl,-rpath,/ path / to / dir, 这是最近GCC的用途。那些需要建立的人 旧的GCC仍然可以使用“CC_LD_DYNPATH = -R” *准备在拓扑步行器中使用可达性指数 在一个范围(A..B)。 *一个专门针对有抱负的git-core的新教程 开发人员已被添加。 *自动检测如何告知HP-UX aCC动态链接使用的位置 来自运行时的库。 *“git mergetool”及其测试现在产生更少的子进程。 * Dev支持更新以帮助跟踪测试。 *使用MSVC构建的支持已更新。 *“git fetch”从一组遥控器中获取学会运行的 auto-gc只在最后一次。 *少数Windows构建补丁已经被上流。 *用于读取序列器机器使用的状态文件的代码 对于腐败或陈旧,“git status”已变得更加强大 州档案。 *已经优化了具有多种模式的“git for-each-ref”。 *了解了遍历内核存储库的tree-walk API 更多代码路径中的实例。 *当多步骤樱桃采摘或恢复中的一步被重置或 已提交,命令行提示脚本未能注意到 目前的状况,已得到改善。 *许多GIT_TEST_ *环境变量控制着各个方面 我们的测试是如何运行的,但有一些是“非空的是真的,空的 或者未设置是假“而其他人遵循通常”有一些 拼写真实的方法,如是,等等,以及拼写方法 虚假,不,不,等等。“惯例。 *调整dir-iterator API并将其应用于本地克隆 优化代码路径。 *我们一直在尝试c89之外的一些语言功能; 该 编码指南文件没有谈论它们,而是有 全面禁止他们。 *已引入测试助手以优化测试准备 存储库有很多简单的提交,还有一些测试 脚本已更新为使用它。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值