git ---多用户管理
一、概述
相信大家都遇到过这样的问题,实际开发中需要在一台PC上用到 不同平台git的账号甚至同一个平台的多个账号(比如本人gitee 、字自己在nas上搭建的gitea ,另外还有github账号,有时还会有公司的代码仓库,账号就更多了)。
于是就有了这次的笔记,多用户管理,即在同一台设备上,使用 git管理来自 Gitee 和 Gitea、 Github 的不同仓库,各自使用不同的身份(SSH 密钥或账号),互不冲突。
二、方案
简单整理一下要求:
- 一键操作切换用户配置,不希望额外单步配置 用户名 邮件 密码 等一系列繁琐操作
- 配置管理简单,不能有用户配置冲突
- 扩展复用性需要较强,适合随时添加用户
- 跨平台使用,
Linux / Termux(android) / Git Bash(windows)
那么目前可以想到的最优方案就是为每个用户创建不同的空目录并单独局部配置,项目结构如下:
/project_git/
├── gitee/
│ ├── user_a
│ │ ├── env.sh
│ │ ├── .gitconfig
│ │ ├── .ssh/
│ │ │ ├── config
│ │ │ ├── id_rsa
│ │ │ ├── id_rsa.pub
│ │ └── project/
│ ├── user_b
│ │ ├── ...
│ ├── ...
├── gitea/
│ ├── user_a
│ │ ├── env.sh
│ │ ├── .gitconfig
│ │ ├── .ssh/
│ │ │ ├── config
│ │ │ ├── id_rsa
│ │ │ ├── id_rsa.pub
│ │ └── project/
│ ├── user_b
│ │ ├── ...
│ ├── ...
├── ...
三、具体步骤
1、创建目录并生成密钥
# 创建目录结构
mkdir -p /project_git/gitee/.ssh
mkdir -p /project_git/gitee/project
# 为Gitee创建SSH密钥,建议gitee@example.com替换为实际邮箱(即使错误也不影响,仅用于管理区分)
# 注意检查 .ssh/id_rsa 权限需要为 600
ssh-keygen -t rsa -b 4096 -f /project_git/gitee/.ssh/id_rsa -C "gitee@example.com"
2、配置 Git 身份信息
为每一个用户环境新建
/gitee/.gitconfig文件[user]
name = user_name
email = gitee@example.com
注意:
gitee_user改成实际用户名。gitee@example.com改成实际邮件名。
3、配置 SSH 文件
/project_git/gitee/.ssh/configHost gitee
HostName gitee.example.com
Port 23
User git
IdentityFile /project-git/gitee/.ssh/id_rsa
IdentitiesOnly yes
注意:
gitee自定义gitee.example.com改为实际服务器地址或IP。23改为实际服务器端口(如果是服务器域名则不需要)。IdentityFile需要绝对地址(使用realpath ../.ssh/id_rsa获取绝对地址)
4、写入环境启动脚本
为每一个用户环境新建
env.sh文件#!/bin/bash ENV_DIR="$(dirname "$(realpath "$0")")"
export GIT_CONFIG_GLOBAL="$ENV_DIR/.gitconfig"
export GIT_SSH_COMMAND="ssh -F $ENV_DIR/.ssh/config" echo " 已启用 GIT 环境"
echo " 用户名: $(git config --global user.name)"
echo " 邮箱: $(git config --global user.email)"
echo " 工作目录: $ENV_DIR/project" cd "$ENV_DIR/project" || exit
bash
赋权
chmod +x env.sh
5、使用方法
# 配置环境
./env.sh
# 测试验证环境配置,正确返回结果包含 “Hi there, user_name! You've successfully ...”
ssh -F ../.ssh/config -T gitee
# gitee环境拉取或推送代码
git clone gitee:user_name/project.git
需要先将生成的密钥添加到对应的服务器(具体的步骤可以参考 gitee 使用笔记 ---基础篇),
然后执行./env.sh后自动进入project文件夹,进入后就是处于当前账号绑定的 shell 环境下了,所有 Git 操作都使用它的身份和 SSH 密钥。
6、补充说明
| 配置 | 用途 |
|---|---|
.gitconfig |
设置该身份的 user.name 和 user.email |
.ssh/config |
设置连接仓库所用的私钥 |
GIT_CONFIG_GLOBAL |
让 Git 使用局部配置替代默认全局配置 |
GIT_SSH_COMMAND |
强制 Git 使用该环境下的 SSH 配置 |
env.sh |
便捷脚本,加载配置 + 进入项目目录 |
四、极简超强方式
下载链接:(多用户管理一键执行应用git-env.bin)[https://download.csdn.net/download/Primary_rookie/91161710]
当前制作了适用于Linux / Termux(android)的一键执行应用git-env.bin,操作如下:
work@work:~/user_project/project-gitee$ ls
git-env.bin
work@work:~/user_project/project-gitee$ sudo chmod +x git-env.bin
[sudo] work 的密码:
work@work:~/user_project/project-gitee$ ./git-env.bin
Git 用户姓名 (user.name): aaa
Git 用户邮箱 (user.email): aaa@aaaa.com
SSH 主机别名(如 gitee/gitea/github):
gitee
服务器域名或 IP (HostName): gitee.com
SSH 端口[回车默认22]:
已创建目录: /home/work/user_project/project-gitee/{.ssh,project}
生成 .gitconfig
生成 SSH 密钥: .ssh/id_rsa(.pub)
生成 .ssh/config
生成 env.sh
全部完成!接下来 3 步即可开始使用:
1) 打开远程平台(如 Gitee)> 个人设置 > SSH 公钥 > 添加:
----------------------------------------------------------------
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCfMVj/w6kVMDh2ox6Ee2NtgtQkXTarllo2Rx/pb4/8NZY5gR/jmeXcOBH9ByEbFwXAzZZp8NpomZvu4QhC6ogFN4jsPdxXvJbVigIJB0U+yocRE8St+FkHYkY1NIkqDyQhu+7oGyG7IkV469Q7wW7Z64DDCD7ZIkB2Qc2qKvK/212XX1HWAjtNGTUMxTfbLHf4fnYABSOY/MBC+/3qdvo/2xo8CYhsuuH1YvVL3UD0nAT1nywR1fAdUHaIK8G3kps7+hbAvBVrLdRr51scdj0RWTqKDkGt6MDgj/U2h3V1cW8gSeRuMzSyjiu5ojXG120iY0LJS4iUrAhlr/WhWVMYiHb71/xF7bFjOcbFWsIPE3PGwuDQNJZKbCVmT/0wFpdDw5dG9f3QkVzYktgupHRMmkM46QKX8wTTzbkqbOcPE5oEXs08OSU+kvOMfnye3uWKSMW4phPII2ebqMi3uXiGQyjNnds+QL4CSug+8gFGwoL1oqzQZkDJarcQsC+fRLbWdM9nqq2bYZ+YOBkx3IeowA4kg6HJLe8Qc31Og4JV4GfLqghJQwcV5h2juUuWsIDjoYGFNogIPb9vPGk1yFEKJpqlLmmyOpD+/3haTDv5XdiCzwhN4K0I6OT8ix58fs96ZL/K995DYQRuF+ERfqG/uLQMAETKrx7Q/h4IphHHvw== aaa@aaaa.com
----------------------------------------------------------------
2) 在本机运行: ./env.sh
将自动进入 project/ 并载入 Git 身份。
3) 在 project/ 里执行 git clone gitee:<user>/<repo>.git 即可。
work@work:~/user_project/project-gitee$ ls -a
. .. env.sh .gitconfig git-env.bin project .ssh
work@work:~/user_project/project-gitee$ ./env.sh
启动 GIT 环境:Gitea
用户名: aaa
邮箱: aaa@aaaa.com
工作目录: /home/work/user_project/project-gitee/project
当前操作: git pull
自动提交模式: false
正在扫描 Git 仓库...
执行摘要:
成功仓库: 0
失败仓库: 0
⏭️ 跳过非 Git 目录: 1
- */
操作完成,进入交互环境
work@work:~/user_project/project-gitee/project$
git ---多用户管理的更多相关文章
- Windows下git多用户配置
refer from :https://blog.csdn.net/qq_39892503/article/details/109374201 windows git多用户配置 在安装git结束,我们 ...
- Git代码管理工具
Git代码管理工具 Git 是分布式的源代码管理工具,这点区别于svn -让源代码可以被追溯,主要是记录了每次的更新了什么,如果新版本不想用,那么则可以退回之前的版本 -Git 是Linux之父当年为 ...
- git版本控制管理实践-4
vcs: version control system 版本控制系统 local vcs, 集中式版本控制系统: centralized vcs; 分布式vcs: distributed vcs Lo ...
- Git 源代码管理工具
Git 源代码管理工具 Git基本信息 Git :Git是一个“分布式”的版本控制工具 Git的作者是Linux之父 Linus Benedict Torvolds,当初开发Git仅仅是为了辅助Lin ...
- GIT分支管理模型
GIT分支管理模型 link: git-branching-model 主分支(Main branches) 项目两个常驻分支: master 主干分支(锁定),仅用于发布新版本,平时不能在上面干活, ...
- git-svn:通过git来管理svn代码
简介 svn和git都是常用的版本管理软件,但是git无论在理念或是功能上都比svn更为先进.但是有的公司是以svn作为中央仓库,这时git与svn代码的同步就可以通过 git-svn这个软件进行,从 ...
- 使用GIT来管理代码的心得
使用GIT来管理代码,第一步当然就是下载一个GIT客户端(不知道是不是这么叫,但是觉得和客户端的功能差不多).电脑的操作系统是windows7的,所以下的是对应的GIT. 就是这玩意,安装的时候不停的 ...
- 使用 Git 来管理 Xcode 中的代码片段
使用 Git 来管理 Xcode 中的代码片段 代码片段介绍 xcode4 引入了一个新 feature: code snippets,在整个界面的右下角,可以通过快捷键:cmd + ctrl + o ...
- 怎么使用git来管理项目版本?
怎么使用git来管理项目版本和存放代码? 作者:rongfangliu 转载请注明出处:http://www.cnblogs.com/rongfangliu/p/howuseGit.html 工具: ...
- Git 分支管理是一门艺术
转载: Git 分支管理是一门艺术 1 要确保:团队成员从主分支(master)获得的都是处于可发布状态的代码,而从开发分支(develop)应该总能够获得最新开发进展的代码. 2 "辅助分 ...
随机推荐
- 保姆级教程——手把手教会你如何在Linux上安装Redis
一.Linux系统安装Redis(7.4.0) 注意: 全程是在root底下操作,当然也可以采用sudo 1.1 安装Redis依赖 Redis是基于C语言编写的,因此首先需要安装Redis所需要的g ...
- 【Pandas】concat方法使用注意点
使用pandas库的concat做数据拼接需要注意,应该先对原始数据设置列名,如果没有设置列名,在拼接时只会保留第一个文件的第一行(以列名形式),由于剩下的文件在读取时会自动将第一行作为列名,这样就会 ...
- React Props指南:从基础到高阶应用的最佳实践解析
在 React 中,Props(属性)是组件间通信和数据传递的核心机制.通过合理使用 Props,开发者可以构建动态.可复用且易于维护的组件体系.本文将深入探讨 Props 的核心概念.使用方法及最佳 ...
- substring( )的两种用法?
xx.substring()括号中带的参数不一样,效果就会有很大的区别 1.xx.substring(0,2)表示取第一个和第二个字符(0,1,2表示第一.二.三个字符,含头不含尾的原则就只包含第一. ...
- 【Java】内部类详解
说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就来一探究竟. 一.内 ...
- LinkedBlockingQueue的poll方法底层原理
一.LinkedBlockingQueue的poll方法底层原理 LinkedBlockingQueue 的 poll 方法用于从队列头部移除并返回元素.如果队列为空,poll 方法会立即返回 nul ...
- 从源码看 QT 的事件系统及自定义事件
事件是程序内部或外部触发的动作或状态变化的信号.在 Qt 中,所有事件都是 QEvent 派生类的对象,事件由 QObject 派生类的对象接收和处理.每一个事件都有对应的 QEvent 派生类,当事 ...
- Sentinel源码—8.限流算法和设计模式总结
大纲 1.关于限流的概述 2.高并发下的四大限流算法原理及实现 3.Sentinel使用的设计模式总结 1.关于限流的概述 保护高并发系统的三把利器:缓存.降级和限流.限流就是通过限制请求的流量以达到 ...
- C# 线程(二)——Thread学习
参照:C#多线程 - .NET开发菜鸟 - 博客园 (cnblogs.com) C# Thread 线程状态知识 - 大圣的笑 - 博客园 (cnblogs.com) 背景: 在.NET Framew ...
- servlet 解决中文乱码
目录 1 get请求request乱码 2 post请求request乱码 3 response乱码 4 使用例子 1 get请求request乱码 在Tomcat7及以下版本,客户端以UTF-8的编 ...