我们可能会遇到以下的场景:

1)多人共用同一台Linux开发机,该开发机仅仅有一个共用的work帐号,非常多人都用这个帐号登录主机进行日常开发。

2)该work帐号下统一安装了gitclient供多人使用。

3)项目採用gitlab进行云端代码托管;

4)每一个开发人员均使用自己的gitlab帐号进行版本号管理。

在上面的场景下,须要解决一个问题:

在同主机且共用工作帐号的情况下。怎样使用各自的gitlab帐号提交自己负责的代码?

以下的步骤能够解决问题。

1. 为每一个人生成各自的ssh key

比如,假设我以slvher@gmail.com作为gitlab的注冊邮箱,则以下的步骤可为这个gitlab帐号生成ssh key:

$ cd ~/.ssh && mkdir git
$ ssh-keygen -t rsa -C "slvher@gmail.com" ## 注意:须要指定保存ssh key的文件为~/.ssh/git/id_rsa.slvher
$ cat git/id_rsa.slvher.pub
将cat出来的ssh key的内容(不包含"slvher@gmail.com")通过gitlab web管理界面加入到ssh key配置项中,这里不赘述。

假如在同机器同帐号下另一个名叫”sky”的人,他也依照上述步骤用他的gitlab注冊email生成了自己的ssh key保存至~/.ssh/git/id_rsa.sky,且在gitlab web界面上完毕配置。

此时,面临的问题是:

1)假设在~/.gitconfig的[user] section中配置全局的user.email / user.name,则无法满足每人用各自的帐号进行版本号管理的需求,显然不可行。

2)假设每一个project师负责的项目用各自的帐号进行提交(即在每一个项目的作用域内配置user.email / user.name)。那么,git push至remote时,机器怎样选择该项目相应的ssh key进行权限验证?

这个问题能够通过在~.ssh/config文件里配置gitlab.com的host alias来解决。

2. 用~/.ssh/config文件管理多个ssh key

$ cd ~/.ssh
$ vi config

针对用户slvher和tom的gitlab ssh key。配置例如以下内容:

Host gitlab.slvher
Hostname gitlab.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/git/id_rsa.slvher Host gitlab.sky
Hostname gitlab.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/git/id_rsa.sky

上述配置中,Host是Hostname的别名(alias)。比方,假设远程的git repo地址为git@gitlab.com:slvher/multi-user.git,则在本地机器通过git@gitlab.slvher:slvher/multi-user.git也能訪问到同一个repository,由于我们配置了gitlab.slvher是gitlab.com的别名。

当然,在alias与real host互通之前。须要事先做些工作,以下进行简述。

3. 怎样将remote repo url中的domain设置为其别名

两个办法:

1)假设本地还没有project。则通过git clone项目时,能够用host alias的url,比方本来应该是:

$ git clone git@gitlab.com:slvher/multi-user.git

则其别名形式为:

$ git clone git@gitlab.slvher:slvher/multi-user.git

由于git@会走ssh协议,所以~/.ssh/config中的配置使得机器能够识别gitlab.slvher这个别名。

2)假设本地project已经与remote repo相关联,则能够通过git remote set-url来又一次设置与本地project关联的remote repo url。以下的步骤供參考。

$ git remote -v  ## 显示当前与本地项目关联的remote repo url

输出例如以下:

origin git@gitlab.com:slvher/multi-user.git (fetch)

origin git@gitlab.com:slvher/multi-user.git (push)

$ git remote set-url origin git@gitlab.slvher:slvher/multi-user.git
$ git remote -v

此时,输出例如以下:

origin git@gitlab.slvher:slvher/multi-user.git (fetch)

origin git@gitlab.slvher:slvher/multi-user.git (push)

採用上述方法将gitlab host的别名设置成功后,仅仅要为每一个project配置好owner的user.email和user.name,同主机同帐号下的多个开发人员就能够用各自的gitlab帐号管理各自负责的项目了。

上述方法相同适用于github。

參考资料:

[1] One command github accounts switch

=================== EOF =================

【Git笔记】怎样在同主机同账户下实现多个gitlab帐号管理各自的remote repo的更多相关文章

  1. Linux学习笔记---用户管理---帐号管理

    root管理 (1)新增用户:useradd -u 指定UID -g 指定GID -G 作为组员添加到某个组 -M 不创建主用户目录 -m 创建主用户目录 -c 用户信息说明列 -d 指定某个目录为主 ...

  2. Git 在同一台机器上配置多个Git帐号

    在同一台机器上配置多个Git帐号 By:授客 QQ:1033553122 实践环境 win10 Git-2.21.0-64-bit.exe TortoiseGit-2.8.0.0-64bit.msi ...

  3. Git使用:Linux(Ubuntu 14.04 x64)下安装Git并配置连接GitHub

    github是一个非常好的网络代码托管仓库,知晓许久,但是一直没有用起来,最近才开始使用git管理自己的文档和代码. Git是非常强大的版本管理工具,今天就告诉大家,如何在Linux下安装GIt,并且 ...

  4. Jenkins配置git进行构建失败:Error cloning remote repo 'origin'的解决思路

    说明:这个没有实际的解决方法,只提供一个思路去解决. 操作系统:windows 背景:在配置的节点之后,由于是windows的系统,运行git克隆地址,使用的是SSH协议地址.出现如下的错误: Err ...

  5. Git 笔记二-Git安装与初始配置

    git 笔记二-Git安装与初始配置 Git的安装 由于我日常生活和工作基本上都是在Windows上,因此此处只说windows上的安装.Windows上的安装和其他程序一样,只需要到http://g ...

  6. Git 笔记三 Git的初步使用

    Git 笔记三 Git的初步使用 在上一篇中,学习了如何配置Git环境,这一篇,开始学习Git的初步使用.Git的初步使用还是很简单的.总体上知道git init, git clone, git ad ...

  7. Git 笔记一 Git简介

    git 笔记一 什么是版本控制 所谓版本控制就是记录对文件的修改记录,这样以后就能回退到需要的 版本.比如你对一段代码进行了几次修改,有几次修改不想要了,如果 使用了版本控制,就可以回退到未做这些修改 ...

  8. hexo自动部署到git、ftp(虚拟主机等)、云服务器的方式

    自动部署很有用,当你写完文章后,直接使用hexo d就可以自动更新你的网站了 部署到git 首先你需要在你的blog下安装git deployer插件:npm install hexo-deploye ...

  9. git笔记:通过给grunt-inline打tag看tag操作

    晚上review了下grunt-inline的issues,看到有个兄弟pull request,修正了0.3.0版本的一个bug.于是就merge了下,然后发布了0.3.1版本(这里). npm p ...

随机推荐

  1. VS开发C语言系列(零)-VS2013写C语言错误汇总

    错误代码 error C3861:调用函数前未引用 error C4996:调用不安全的函数 error C2668:重载函数不明确 error C3861:"文件名" 找不到标识 ...

  2. Java系列学习(十一)-内部类

    1.内部类 (1)把类定义在另一个类的内部,该类就称为内部类 (2)内部类的访问规则 A:内部类可以直接访问外部类的成员,包括私有 B:外部类要想访问内部类的成员,必须创建对象 (3)内部类的分类 A ...

  3. Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'empid' in 'class cn.happy.entity.Emp'

    org.apache.ibatis.exceptions.PersistenceException: ### Error querying database.  Cause: org.apache.i ...

  4. iOS动画——CoreAnimation

    CoreAnimation在我之前的UIKit动画里面简单的提了一句CoreAnimation动画,其实大家别看它类库名种有个animation,实际上animation在这个库中只占有很小的地位. ...

  5. 前端开发之旅-zopim在线即时聊天客服

    一.与潜在客户实时聊天的神奇-zopim Zopim是一款高效的可嵌入网页中去的即使通讯与网站访客信息追踪的的Web软件.知道谁在访问您的网站吗?想和他们实时交流吗?想更有效的把握商机吗?使用Zopi ...

  6. Java类加载机制总结

    关于Java类加载机制的几个基本概念: JDK提供的基本类加载器:引导类加载器(Bootstrap Class Loader)-用于加载JDK中的核心类.扩展类加载器(Ext Class Loader ...

  7. html5——拖拽

    基本情况 在HTML5的规范中,我们可以通过为元素增加draggable="true"来设置此元素是否可以进行拖拽操作,其中图片.链接默认是开启的. 拖拽元素 页面中设置了drag ...

  8. 快速学习mybatis框架

    一.介绍Mybatis(主要从以下两点进行介绍) 1.MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动 ...

  9. java实现搜索附近地点或人的功能

    前言 当前大多数app都有查找附近的功能, 简单的有查找周围的运动场馆, 复杂的有滴滴, 摩拜查找周围的车辆. 本文主要阐述查找附近地点的一般实现. 方案比较 方案1 (性能还不错) 数据库直接存经纬 ...

  10. 扩增子图表解读4曼哈顿图:差异分类级别Taxonomy

    曼哈顿图 Manhattan Plot 曼哈顿图本质上是一个散点图,用于显示大量非零大范围波动数值,最早应用于全基因组关联分析(GWAS)研究展示高度相关位点.它得名源于样式与曼哈顿天际线相似(如下图 ...