IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> git配置多身份(多用户)不生效 -> 正文阅读

[开发工具]git配置多身份(多用户)不生效

背景

当同时为不同的组织工作时,需要用到不同的身份。比如 GitHub 目录 ~/github/ 提交身份为 mygithub,在Gitee 目录 ~/gitee/ 提交身份为mygitee。使用过git的人都知道,如果不做额外的配置,只能使用一个身份进行代码提交。而这并不是我们想要的。

我们希望达到的效果是,在同一台开发机下,使用git在不同的组织项目下提交代码表现的身份会不一样。

例如:~/github/ 目录下放的都是GitHub 组织的项目,我提交代码时commit时的作者是 mygithub,~/gitee/ 目录下是 gitee 组织的项目,我提交代码时的作者是mygitee

系统配置及不生效原因分析

Git 使用一系列配置文件来保存你自定义的行为。

  • 系统: 它首先会查找系统级的 /etc/gitconfig 文件,该文件含有系统里每位用户及他们所拥有的仓库的配置值。 如果你传递 --system 选项给 git config,它就会读写该文件。
  • 全局:接下来 Git 会查找每个用户的 ~/.gitconfig 文件(或者 ~/.config/git/config 文件)。 你可以传递 --global 选项让 Git 读写该文件。
  • 本地:最后 Git 会查找你正在操作的仓库所对应的 Git 目录下的配置文件(.git/config)。 这个文件中的值只对该仓库有效,它对应于向 git config 传递 --local 选项。
    以上三个层次中每层的配置(系统、全局、本地)都会覆盖掉上一层次的配置,所以 .git/config 中的值会覆盖掉 /etc/gitconfig 中所对应的值。优先级为 本地>全局>系统

因此大概率是因为,有更高优先级的配置覆盖了你的配置,可以根据优先级去排查

# 查看对当前仓库下生效的git所有配置
git config --list 

配置多用户方式

使用本地配置

这种方式最直接,在当前的代码仓库的根目录下找到 .git/config 文件,在文件中添加如下

[user]
    name = mygithub
    email = yourgithubemail@xx.com

这种方式虽然成效快,只适用于临时情况。要想想每个代码仓库都需要这样改,一旦仓库多就不好维护了。

修改全局配置

全局通用配置文件~/.gitconfig里面的内容是:主要是通过 includeIf 配置匹配不用的目录映射到不同配置文件上,然后在不同的配置文件上来进行区分配置。
在 ~/.gitconfig 文件有如下配置

[user]
    name = mygithub
    email = yourgithubemail@xx.com
[includeIf "gitdir:~/gitee/"]
    path = .gitconfig-gitee

在 ~/.gitconfig-gitee 配置如下

[user]
    name = mygitee
    email = yourgiteeemail@xx.com

有几点说明

  • 在 .gitconfig 文件中必须有一个默认的user配置,否则在commit 代码时可能出现需要重新配置用户名和密码
  • .gitconfig 中 user 和 incluedIf 的前后位置有可能导致配置不生效。其原因是,两个地方都配置的user,导致前后user的配置覆盖。 排查方式为,在当前仓库下执行 git config --list 就可以看到对当前仓库生效的配置。后面的配置会覆盖前面的配置。

利用 .ssh/config 文件

  1. 生成github与gitee的公钥与私钥
ssh-keygen -t rsa -C “gitee对应的邮箱” -f ~/.ssh/id_rsa_gitee
ssh-keygen -t rsa -C “github账户的邮箱”

成功后目录下应该有这样四个文件 id_rsa,id_rsa.pub,id_rsa_gitee,id_rsa_gitee.pub

-rw-------  1 root  staff  2610  5 30 15:26 id_rsa
-rw-r--r--  1 root  staff   576  5 30 15:26 id_rsa.pub
-rw-------  1 root  staff  2610  9 21 10:46 id_rsa_gitee
-rw-r--r--  1 root  staff   576  9 21 10:46 id_rsa_gitee.pub
  1. 把对应的秘钥添加到ssh-agent的高速缓存中
ssh-agent bash
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/id_rsa_gitee
  1. .ssh目录下新建config文件,如果有了就直接编辑添加一下内容
Host gitee
    Hostname gitee.com
    User mygitee
    IdentityFile ~/.ssh/id_rsa_gitee
Host github
    Hostname github.com
    User mygithub
    IdentityFile ~/.ssh/id_rsa
  1. 将对应的公钥 id_rsa.pubid_rsa_gitee.pub配置到对应平台。
    在这里插入图片描述
    在这里插入图片描述
  2. 测试链接是否通
ssh -T git@github.com
ssh -T git@gitee.com

总结

经过各大搜索引擎的搜索,使用 .ssh/config 配置的文章最多,笔者也尝试使用此方式,但是并没有生效。最后使用了第二种全局配置,验证成功,但是需要注意容易踩坑的两点。第一种情况尝试过,也能成功。

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:53:00  更:2021-09-22 14:53:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:36:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码