zoukankan      html  css  js  c++  java
  • 【Git笔记】怎样在同主机同账户下实现多个gitlab帐号管理各自的remote repo

    我们可能会遇到以下的场景:
    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 =================

  • 相关阅读:
    使用cocoapods出现问题fetch of the ‘master’ 的解决方法
    说说ASP.NET的表单验证
    php分页类
    php校验
    mySQL时间
    asp .NET弹出窗口 汇总(精华,麒麟创想)
    (转)MVC 3 数据验证 Model Validation 详解
    (转)linux性能优化总结
    (转)ASP.NET缓存全解析6:数据库缓存依赖
    SQL Server是如何让定时作业
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/7216071.html
Copyright © 2011-2022 走看看