如何配置git,使其支持多用户

news2025/4/17 22:05:59

如何配置git,使其支持多用户?

在多数时候, 我们使用git进行操作时,只需要在本地配置一个用户的ssh key,就可以完成基本的pull/push操作。如果现在我有两个github的账号,并需要在一台电脑中操作其中的repo,有没有什么较好的办法呢?

下面就将详解其配置过程。

清除全局用户配置

该步骤是必须的, 在本地设置多账户之后, 就不再使用全局的用户名和email了, 因此需要先unset掉global的用户名和邮箱。

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

生成每个用户的密钥对

我们这里以创建test1用户和test2用户为例, 演示操作过程。

这里, 我们首先查看.ssh目录,由于之前已经配置过test1用户, 因此该目录下已经有了test1用户的ssh公钥和私钥。

$ ls  ~/.ssh/
id_rsa   
id_rsa.pub

接下来我们生成test2用户的ssh key:

ssh-keygen -t rsa -C "test2@qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa):(这里填写一个自定义的名字)
~/.ssh/id_rsa_second
Enter passphrase(empty for on passphrase):

这样就在.ssh目录下生成了对应的ssh密钥。其中.pub文件就是私钥。

$ ls  ~/.ssh/
id_rsa   id_rsa_second 
id_rsa.pub   id_rsa_second.pub

在github Web console中添加SSH Keys

将上一步骤中生成的id_rsa.pub 和 id_rsa_second.pub文件中的内容,分别加入对应账户的github的SSH Keys中, 如下图所示:

git ssh key

管理密钥

管理密钥的目的是让git知道一个repo去什么地方去查找它的ssh key。

该步骤需要在~/.ssh目录下创建一个config文件,文件格式如下所示:

Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa

Host user2.github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_second

该文件各字段的含义如下所示:

Host : 主机别名

HostName: 服务器真实地址

IdentityFile: 私钥文件路径

User : 用户名,这里User均填写git

下面测试我们配置的项目是否正确。

测试命令格式为 ssh -T user@Host

ssh -T git@github.com
ssh -T git@user2.github.com

如果输出了下面的语句,代表你的配置已经成功了。

Hi test2! You've successfully authenticated, but GitHub does not provide shell access.

克隆仓库进行push

在配置完毕之后, 当我们使用git clone 命令时需要做一些修改。

在不需要配置多账户时, 我们clone一个仓库通常使用下面的命令:

git clone git@github.com:your_account/your_proj.git

而如果你仍然使用这样的格式clone时,在push时会失败。

我们需要修改clone命令为如下格式:

git clone git@user2.github.com:your_account/your_proj.git

为什么要这样修改呢?

我们看下面这张图:

git ssh key

在我们修改了Host之后,git会通过该host去~/.ssh/config文件中寻找对应的私钥文件地址,回忆我们刚刚在config配置了test2的Host为user2.github.com,因此当git clone的地址修改之后, git就可以顺利地找到该repo所需要的ssh key。如果仍然用git clone git@github.com:your_account/your_proj.git那么git将会使用~/.ssh/config中配置的一个ssh key, 这样会导致push时失败。

最后需要注意的是, 如果有配置多用户这个需求时, 那么在执行git commit时, 设置用户名和邮箱不能使用全局账户。

应使用:

git config user.name "You Name"
git config user.email name@example.com

而不能使用

git config --global user.name "You Name"
git config --global user.email name@example.com

总结

使用git配置多用户,主要需要注意以下几点:

  • 需要在本地分别生成各用户的ssh密钥
  • 需要为所有的用户配置密钥路径文件config
  • git clone时地址需要修改, 如果是已经clone下来的仓库, 需要修改remote地址
  • 不能使用global配置用户名和邮箱

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/357990.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目管理工具dhtmlxGantt甘特图入门教程(十):服务器端数据集成(下)

这篇文章给大家讲解如何利用dhtmlxGantt在服务器端集成数据。 dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足应用程序的所有需求,是完善的甘特图图表库 DhtmlxGantt正版试用下载(qun 764149912)http…

LVGL WIN32模拟器环境搭建

LVGL WIN32模拟器环境搭建LVGL简介环境搭建IDE 选择模拟器代码下载PC模拟器搭建其他配置项说明LVGL简介 LVGL是一个跨平台、轻量级、易于移植的图形库。因其支持大量特性和其易于裁剪,配置开关众多,且版本升级较快,不同版本之间存在一定的差…

基于springboot+vue的医院信息管理系统

基于springbootvue的医院信息管理系统 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介…

2、登录界面开发

【任务描述】本任务要求使用线性布局以及TextView、EditText、Button等常见控件完成智慧园区登录界面的开发。1、线性布局(LinearLayout)1.1、LinearLayout概述线性布局(LinearLayout)主要以水平或垂直方式来排列界面中的控件。并…

【C++修炼之路】20.手撕红黑树

每一个不曾起舞的日子都是对生命的辜负 红黑树实现:RBTree 前言一.红黑树的概念及性质1.1 红黑树的概念1.2 红黑树的性质二.红黑树的结构2.1 红黑树节点的定义2.2 红黑树类的封装三.红黑树的插入情况1:只变色情况2:变色单旋情况3:双旋插入的代…

Docker入门和安装教程

一、Docker入门简介 Docker 是一个基于GO语言开发的开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会…

关于如何在 Grafana 绘制 Apache Hudi Metrics 仪表盘的教程

文章目录前言下载 Prometheus下载 PushgatewayPrometheus 集成 PushgatewayPushgateway 后台执行Prometheus 后台执行在Prometheus中配置PushgatewayApache Hudi Metrics中开启 Pushgateway 推送Grafana 安装和启动Grafana 新增 Apache Hudi Metrics 仪表盘添加 Prometheus 数据…

批处理删除指定文件或文件夹

声明:1-2节参考了 https://blog.csdn.net/weixin_43960383/article/details/1243673841. DEL1.1 DEL 的命令参数使用 del 命令能指定文件,Del (erase)[Drive:][Path]FileName指删除指定文件。指定要删除的文件或文件集的位置和名称。语法格式如下&#x…

XML学习

文章目录XML什么是XML?XML的作用?XML语法文档声明XML注释元素(标签)xml属性语法规则5.4、xml解析技术介绍dom4j 解析技术(重点)dom4j 编程步骤:使用遍历标签 获取所有标签中的内容(重点&#x…

第十三届蓝桥杯国赛 C++ C 组 Java A 组 C 组 Python C 组 E 题——斐波那契数组(三语言代码AC)

目录1.斐波那契数组1.题目描述2.输入格式3.输出格式4.样例输入5.样例输出6.数据范围7.原题链接2.解题思路3.Ac_code1.Java2.C3.Python1.斐波那契数组 1.题目描述 如果数组 A(a0,a1,⋯.an−1)A(a_0,a_1,⋯.a_{n-1})A(a0​,a1​,⋯.an−1​)满足以下条件, 就说它是一个斐波那契…

如何在类中定义构造方法?

在一个类中定义的方法如果同时满足以下三个条件,该方法称为构造方法,具体如下:1、方法名与类名相同2、在方法名的前面没有返回值类型的声明3、在方法中不能使用return语句返回一个值接下来通过一个案例来演示如何在类中定义构造方法&#xff…

闪光桐人の实习日记(2023年2月20-27日)

前往闪闪の小窝以获得更好的阅读和评论体验 文章目录2023年2月20日(Vue入门)概念Vue基础Vue中的MVVMVue的体验Vue的生命周期Vue指令Vue组件VueRouter前后端路由的区别工作原理两种模式比较route跟router的区别路由属性导航守卫Vuex概述5种基本对象基本使…

C语言编程规范 第二部分

2、头文件对于C语言来说,头文件的设计体现了大部分的系统设计。不合理的头文件布局是编译时间过长的根因,不合理的头文件实际上反映了不合理的设计。 1、头文件中适合放置接口的声明,不适合放置实现头文件是模块(Module&#xff…

【数据结构】时间复杂度和空间复杂度

🌇个人主页:平凡的小苏 📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情 🛸C语言专栏:https://blog.csdn.net/vhhhbb/category_12174730.html 小苏希望大家能从这篇文章中收获到许…

苹果手机怎么设置闹钟铃声?更改为歌曲铃声,亲测有效

很不是有很多小伙伴每天早上都被苹果手机刺耳的“雷达”闹钟铃声给吵醒呢?想要更换一个舒缓的闹钟铃声,却发现自己鼓捣半天却无法更换喜欢的歌曲闹钟铃声。苹果手机怎么设置闹钟铃声?下面小编就来分享如何将苹果手机的闹钟铃声设置成歌曲铃声…

【docker】拉取镜像环境报错解决#ERROR: Get https://registry-1.docker.io/v2/

🍁博主简介   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 文章目录问题报错原因解决方法问题 ERROR…

简单的认识 Vue(vue-cli安装、node安装、开发者工具)

Vue1、Vue 与其他框架的对比及特点1.1 Vue.js 是什么1.2 作者1.3 作用1.4 Vue 与其他框架的对比2、安装 Vue 的方法2.1 CDN 引入2.2 脚手架工具2.3 vue 开发者工具安装3、创建第一个实例4、理解 Vue 的 MVVM 模式5、数据双向绑定5.1 感受响应式实验总结1、Vue 与其他框架的对比…

Flutter WebView 如何与 h5 同步登录状态

大家好,我是 17。 Flutter WebView 一共三篇文章 在 Flutter 中使用 webview_flutter 4.0 | js 交互Flutter WebView 性能优化,让 h5 像原生页面一样优秀Flutter WebView 如何与 h5 同步登录状态 本篇是第 3 篇,讲下 Flutter WebView 与 h…

Python|每日一练|动态规划|图算法|散列表|数组|双指针|单选记录:不同路径|求两个给定正整数的最大公约数和最小公倍数|删除有序数组中的重复项

1、不同路径(数学,动态规划) 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”…

【大数据基础】Linux常用命令

参考资料: https://www.runoob.com/w3cnote/linux-common-command-2.html 1、ls命令 就是 list 的缩写,通过 ls 命令不仅可以查看 linux 文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等。 ls -a 列…