Gitlab和Github共存

Gitlab和Github共存

概念:

Git是一个版本控制系统(Version Control System , VCS)

环境:

  • MacBook笔记本(使用软件SourceTree)
  • Github网站(公开代码管理)
  • 群晖部署的本地GitLab (私有代码管理)

需求:

如何在一台机器上面同时使用 Github 与 Gitlab 的服务?
用同一个Git版本控制系统可以同时,推送和拉取两个Git站点的数据。

步骤:

1.Gitlab如何配置ssh key
2.无密码与远程服务器交互过程 - SSH
3.ssh地址下载和http下载的区别
4.共存


1.gitlab如何配置ssh key?

打开gitlab网站,点击个人的setting中


image.png

配置sshkey
点这里-GitLab配置ssh key

2.无密码与远程服务器交互 - SSH

举例:通过ssh 协议或者git 协议通过终端命令对远程仓库进行push操作。
大概的过程如下:(前提在 Github 上已经配置的本机的 SSH Public Key)

  • 客户端发起给服务端一个 Public Key 的认证请求,并发送RSA Key的模数作为标识符。(关于 RSA Key 详细 维基百科
  • 服务端检查是否存在请求帐号的公钥(Linux中存储在~/.ssh/authorized_keys文件中),以及其拥有的访问权限。
  • 服务端使用对应的公钥对一个随机的256位的字符串进行加密,并发送给客户端。
  • 客户端使用私钥对字符串进行解密,并将其结合session id生成一个MD5值发送给服务端。 结合session id的目的是为了避免攻击者采用重放攻击(replay attack)。
  • 服务端采用同样的方式生成MD5值与客户端返回的MD5值进行比较,完成对客户端的认证。
  • 将push的内容进行加密与服务端传输数据。
    关于 SSH,请查看 SSH原理简介 ,更通俗易懂的文章请查看阮一峰-SSH原理与运用(一):远程登录

3.ssh地址下载和http下载的区别

首先都可以下载,http方式的下载的仓库必须上public状态的。http在push的时候需要验证账号和密码,ssh可以通过密钥进行连接,不需要输入密码。

4.共存

问题:

  • 如果GitLab和Github的注册邮箱是同一个邮箱,那么生成ssh keys就应该是同一个,可以直接配置到对应的GitLab和Github上可以直接使用,就没有冲突的问题了。
  • 如果GitLab仓库和Github仓库使用的不是同一个邮箱,那么由此生成的SSH keys也是不同的,这就造成了冲突,如何在一台机器上面同时使用 Github 与 Gitlab 的服务?

解决方案

方案一:
  • 同一个邮箱

由于邮箱是识别的唯一手段,那么自然的,这两者采用同一个邮箱,生成的 public key 也会是同一个,上传到 Github 或者 Gitlab 上面,在 Git 的配置中 ,设置好 Global 的配置 :git config --global user.name 'xxx x' && git config --global user.email 'xxxx@xx.com' 进行日常的开发是没有问题的。

方案二:
  • 不同邮箱

  • 基于config文件

  • 原理:

上就是对 SSH 协议配置 config 文件,对不同的域名采用不同的认证密钥。

  • git config 介绍:

Git有一个工具被称为git config,它允许你获得和设置配置变量;这些变量可以控制Git的外观和操作的各个方面。这些变量可以被存储在三个不同的位置:

  • /etc/gitconfig 文件:包含了适用于系统所有用户和所有库的值。如果你传递参数选项’--system’给 git config,它将明确的读和写这个文件。

  • ~/.gitconfig 文件 :具体到你的用户。你可以通过传递 ‘--global’ 选项使Git 读或写这个特定的文件。

  • 位于 Git 目录的 config 文件 (也就是 .git/config) :无论你当前在用的库是什么,特定指向该单一的库。每个级别重写前一个级别的值。因此,在 .git/config 中的值覆盖了在/etc/gitconfig中的同一个值,可以通过传递‘--local’选项使Git 读或写这个特定的文件。

    由于采用了不同的邮箱,对不同的服务商进行提交,所以此时我们经常配置的git config --global就不能常用了,必须在每个仓库的目录下进行配置自己的用户名、邮箱。(嫌麻烦?那么可以这么解决,由于个人的 Github 上有较多的仓库,而自己团队的代码基本上都是稳定的,有数的几个,所以在git config --global user.email 'xxxx@gmail.com' 中全局配置的是个人邮箱,在团队的项目单独配置邮箱)

配置流程
1. 配置 Git 用户名、邮箱
# 全局配置,Github仓库中默认使用此配置
git config --global user.name 'steve' && git config --global user.email 'xxxx@gmail.com' 
# 团队项目配置,每次新创建一个项目,需要执行下
git config --local user.name 'xxxx' && git config --local user.email 'xxxx@xx.com.cn' 

单独为该项目设置 --local. 需要注意的是, --local 选项只能 cd 到当前项目路径下中执行, 否则会报错

fatal: --local can only be used inside a Git repository.

2. 生成 ssh key 上传到 Github/Gitlab

生成公钥、密钥的同时指定文件名,Gitlab使用

ssh-keygen -t rsa -f ~/.ssh/id_rsa.gitlab -C "xxxx@xx.com.cn"

生成默认,Github使用

ssh-keygen -t rsa -C "xxxxx@gmail.com"

3. 配置 config 文件

在 ~/.ssh目录下,如果不存在,则新建 touch ~/.ssh/config文件 ,文件内容添加如下:

Host xxx.xxx.com
     IdentityFile ~/.ssh/id_rsa.gitlab
     User steve

配置完成后,符合 xxx.xxx.com后缀的 Git 仓库,均采取~/.ssh/id_rsa.gitlab 密钥进行验证,其它的采取默认的。

4. 上传public key 到 Github/Gitlab

具体看1.gitlab如何配置ssh key?


参考:

*** 简书作者:刺青a123 ***

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容