配置同时使用 Gitlab、Github、Gitee(码云) 共存的开发环境
<div><p>首先确认已安装Git,可以通过 <code>git –version</code> 命令可以查看当前安装的版本。</p>
<p>Mac OSX 中都已经安装了Git。但是,Git的版本未必是最新的。</p>
<p>可以通过命令 <code>git clone https://github.com/git/git</code> 进行更新</p>
<p>Git共有三个级别的config文件,分别是<code>system、global和local</code>。</p>
<p>在当前环境中,分别对应</p>
<p>%GitPath%\mingw64\etc\gitconfig文件<br>
$home.gitconfig文件<br>
%RepoPath%.git\config文件</p>
<p>其中<code>%GitPath%</code>为Git的安装路径,<code>%RepoPath%</code>为某仓库的本地路径。</p>
<p>所以 system 配置整个系统只有一个,global 配置每个账户只有一个,而 local 配置和git仓库的数目相同,并且只有在仓库目录才能看到该配置。</p>
<p>大致<code>思路</code>,<strong>建立两个密钥,不同账号配置不同的密钥,不同仓库配置不同密钥。</strong></p>
<h2>1. 清除 git 的全局设置(针对已安装 git)</h2>
<p>新安装 git 跳过。</p>
<p>若之前对 git 设置过全局的 <code>user.name</code> 和 <code>user.email</code>。<br>
类似 (用 <code>git config --global --list</code> 进行查看你是否设置)</p>
<pre class="line-numberslanguage-batch"><code class="batchlanguage-batch">$ git config --global user.name "你的名字"
$ git config --global user.email"你的邮箱"
</code><button class="VJbwyy" type="button"></button></pre>
<p>必须删除该设置</p>
<pre class="line-numberslanguage-php"><code class="language-php">$ git config <span class="token operator">--<span class="token keyword">global <span class="token operator">--<span class="token keyword">unset user<span class="token punctuation">.name <span class="token double-quoted-string string">"你的名字"
$ git config <span class="token operator">--<span class="token keyword">global <span class="token operator">--<span class="token keyword">unset user<span class="token punctuation">.email <span class="token double-quoted-string string">"你的邮箱"
</span></span></span></span></span></span></span></span></span></span></span></span></code><button class="VJbwyy" type="button"></button></pre>
<h2>2. 生成新的 SSH keys</h2>
<h3>1)GitHub 的钥匙</h3>
<p>指定文件路径,方便后面操作:<code>~/.ssh/id_rsa.gitlab</code></p>
<pre class="line-numberslanguage-jsx"><code class="language-jsx">ssh<span class="token operator">-keygen <span class="token operator">-t rsa <span class="token operator">-f <span class="token operator">~<span class="token operator">/<span class="token punctuation">.ssh<span class="token operator">/id_rsa<span class="token punctuation">.github <span class="token operator">-<span class="token constant">C <span class="token string">"abc@qq.com"
</span></span></span></span></span></span></span></span></span></span></span></code><button class="VJbwyy" type="button"></button></pre>
<p>直接回车3下,什么也不要输入,就是默认没有密码。</p>
<p>注意 github 和 gitlab 的文件名是不同的。</p>
<h3>2)GitLab 的钥匙</h3>
<pre class="line-numberslanguage-jsx"><code class="language-jsx">ssh<span class="token operator">-keygen <span class="token operator">-t rsa <span class="token operator">-f <span class="token operator">~<span class="token operator">/<span class="token punctuation">.ssh<span class="token operator">/id_rsa<span class="token punctuation">.gitlab <span class="token operator">-<span class="token constant">C <span class="token string">"abcdef@qq.com"
</span></span></span></span></span></span></span></span></span></span></span></code><button class="VJbwyy" type="button"></button></pre>
<h3>2)Gitee 的钥匙</h3>
<pre class="line-numberslanguage-jsx"><code class="language-jsx">ssh<span class="token operator">-keygen <span class="token operator">-t rsa <span class="token operator">-f <span class="token operator">~<span class="token operator">/<span class="token punctuation">.ssh<span class="token operator">/id_rsa<span class="token punctuation">.gitee <span class="token operator">-<span class="token constant">C <span class="token string">"abcdef@qq.com"
</span></span></span></span></span></span></span></span></span></span></span></code><button class="VJbwyy" type="button"></button></pre>
<h3>3)完成后会在~/.ssh / 目录下生成以下文件</h3>
<ul>
<li>id_rsa.github</li>
<li>id_rsa.github.pub</li>
<li>id_rsa.gitlab</li>
<li>id_rsa.gitlab.pub</li>
</ul>
<hr>
<h2>3.添加识别 SSH keys 新的私钥</h2>
<p><code>亲测Mac下,新增一个 id_rsa.gitee,没加进去 也识别到了。 所以此步骤可忽略,如有问题删除所有密钥 重新按步骤操作一遍。</code></p>
<p>默认只读取 id_rsa,为了让 SSH 识别新的私钥,需要将新的私钥加入到 SSH agent 中</p>
<pre class="line-numberslanguage-ruby"><code class="language-ruby">$ ssh<span class="token operator">-agent bash
$ ssh<span class="token operator">-add <span class="token operator">~<span class="token operator">/<span class="token punctuation">.ssh<span class="token operator">/id_rsa<span class="token punctuation">.github
$ ssh<span class="token operator">-add <span class="token operator">~<span class="token operator">/<span class="token punctuation">.ssh<span class="token operator">/id_rsa<span class="token punctuation">.gitlab
$ ssh<span class="token operator">-add <span class="token operator">~<span class="token operator">/<span class="token punctuation">.ssh<span class="token operator">/id_rsa<span class="token punctuation">.gitee
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code><button class="VJbwyy" type="button"></button></pre>
<h2>4. 多账号必须配置 config 文件(重点)</h2>
<p>若无 config 文件,则需创建 config 文件</p>
<h3>创建config文件</h3>
<pre class="line-numberslanguage-ruby"><code class="language-ruby">$ touch <span class="token operator">~<span class="token operator">/<span class="token punctuation">.ssh<span class="token operator">/config
</span></span></span></span></code><button class="VJbwyy" type="button"></button></pre>
<h3>config 里需要填的内容</h3>
<p>亲测可以不缩进,所以方便看,建议缩进。</p>
<h3>最简配置</h3>
<pre class="line-numberslanguage-jsx"><code class="language-jsx">Host github<span class="token punctuation">.com
HostName github<span class="token punctuation">.com
IdentityFile <span class="token operator">~<span class="token operator">/<span class="token punctuation">.ssh<span class="token operator">/id_rsa<span class="token punctuation">.github
</span></span></span></span></span></span></span></code><button class="VJbwyy" type="button"></button></pre>
<h3>完整配置</h3>
<pre class="line-numberslanguage-tsx"><code class="language-tsx">#Default gitHub user Self
Host github<span class="token punctuation">.com
HostName github<span class="token punctuation">.com
User git
IdentityFile <span class="token operator">~<span class="token operator">/<span class="token punctuation">.ssh<span class="token operator">/id_rsa<span class="token punctuation">.github
#Add gitLab user
Host git@gitlab<span class="token punctuation">.com
HostName gitlab<span class="token punctuation">.com
User git
IdentityFile <span class="token operator">~<span class="token operator">/<span class="token punctuation">.ssh<span class="token operator">/id_rsa<span class="token punctuation">.gitlab
# gitee
Host gitee<span class="token punctuation">.com
Port <span class="token number">22
HostName gitee<span class="token punctuation">.com
User git
IdentityFile <span class="token operator">~<span class="token operator">/<span class="token punctuation">.ssh<span class="token operator">/id_rsa<span class="token punctuation">.gitee
# other settings
Host git@git<span class="token punctuation">.startdt<span class="token punctuation">.net
Port <span class="token number">22
HostName http<span class="token punctuation">:<span class="token operator">/<span class="token operator">/git<span class="token punctuation">.startdt<span class="token punctuation">.net
User git
IdentityFile <span class="token operator">~<span class="token operator">/<span class="token punctuation">.ssh<span class="token operator">/lab_rsa<span class="token punctuation">.startdt
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code><button class="VJbwyy" type="button"></button></pre>
<p>下面对上述配置文件中使用到的配置字段信息进行简单解释:</p>
<ul>
<li>
<p>Host<br>
它涵盖了下面一个段的配置,我们可以通过他来替代将要连接的服务器地址。<br>
这里可以使用任意字段或通配符。<br>
当ssh的时候如果服务器地址能匹配上这里Host指定的值,则Host下面指定的HostName将被作为最终的服务器地址使用,并且将使用该Host字段下面配置的所有自定义配置来覆盖默认的/etc/ssh/ssh_config配置信息。</p>
</li>
<li>
<p>Port<br>
自定义的端口。默认为22,可不配置</p>
</li>
<li>
<p>User<br>
自定义的用户名,默认为git,可不配置</p>
</li>
<li>
<p>HostName<br>
真正连接的服务器地址</p>
</li>
<li>
<p>PreferredAuthentications<br>
指定优先使用哪种方式验证,支持密码和秘钥验证方式</p>
</li>
<li>
<p>IdentityFile<br>
指定本次连接使用的密钥文件</p>
</li>
</ul>
<h2>5.在 github 和 gitlab 网站添加 ssh</h2>
<h3>Github</h3>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill"> </div>
<div class="image-view" data-width="1031" data-height="537"><img src="//upload-images.jianshu.io/upload_images/1731581-87c85f5c7f3abe9b.png?imageMogr2/auto-orient/strip|imageView2/2/w/1031/format/webp" alt="" data-original-src="//upload-images.jianshu.io/upload_images/1731581-87c85f5c7f3abe9b.png" data-original-width="1031" data-original-height="537" data-original-format="image/png" data-original-filesize="70909" data-image-index="0"></div>
</div>
<div class="image-caption">Github 添加SSH公钥</div>
</div>
<p>直达地址:https://github.com/settings/keys</p>
<p>过程如下:</p>
<ol>
<li>登录 Github</li>
<li>点击右上方的头像,点击 <code>settings</code>
</li>
<li>选择 <code>SSH key</code>
</li>
<li>点击 <code>Add SSH key</code>
</li>
</ol>
<p>在出现的界面中填写 SSH key 的名称,填一个你自己喜欢的名称即可。<br>
将上面拷贝的<code>~/.ssh/id_rsa.xxx.pub</code>文件内容粘帖到 key 一栏,在点击 “add key” 按钮就可以了。</p>
<p>添加过程 github 会提示你输入一次你的 github 密码 ,确认后即添加完毕。</p>
<h3>Gitlab</h3>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill"> </div>
<div class="image-view" data-width="1449" data-height="579"><img src="//upload-images.jianshu.io/upload_images/1731581-f448ecd498b6ca6e.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp" alt="" data-original-src="//upload-images.jianshu.io/upload_images/1731581-f448ecd498b6ca6e.png" data-original-width="1449" data-original-height="579" data-original-format="image/png" data-original-filesize="90170" data-image-index="1"></div>
</div>
<div class="image-caption">Gitlab添加SSH公钥</div>
</div>
<p>直达地址:https://gitlab.com/profile/keys</p>
<ol>
<li>登录 Gitlab</li>
<li>点击右上方的头像,点击 <code>settings</code>
</li>
<li>后续步骤如 Github</li>
</ol>
<h3>Gitee / 码云</h3>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill"> </div>
<div class="image-view" data-width="1032" data-height="503"><img src="//upload-images.jianshu.io/upload_images/1731581-1973f228f3eea7ac.png?imageMogr2/auto-orient/strip|imageView2/2/w/1032/format/webp" alt="" data-original-src="//upload-images.jianshu.io/upload_images/1731581-1973f228f3eea7ac.png" data-original-width="1032" data-original-height="503" data-original-format="image/png" data-original-filesize="73350" data-image-index="2"></div>
</div>
<div class="image-caption">码云 添加SSH公钥</div>
</div>
<p>直达地址:https://gitee.com/profile/sshkeys</p>
<ol>
<li>登录 Gitee</li>
<li>点击右上方的头像,点击 <code>设置</code>
</li>
<li>后续步骤如 Github</li>
</ol>
<p>添加过程 码云 会提示你输入一次你的 Gitee 密码 ,确认后即添加完毕。</p>
<h2>6.测试是否连接成功</h2>
<p>由于每个托管商的仓库都有唯一的后缀,比如 Github 的是 git@github.com:*。</p>
<p>所以可以这样测试:<br>
ssh -T git@github.com</p>
<p>而 gitlab 的可以这样测试:<br>
ssh -T git@gitlab.corp.xyz.com<br>
如果能看到一些 Welcome 信息,说明就是 OK 的了</p>
<ul>
<li>ssh -T git@github.com
</li>
<li>ssh -T git@gitlab.com
</li>
<li>ssh -T git@gitee.com
</li>
</ul>
<pre class="line-numberslanguage-ruby"><code class="language-ruby">$ ssh <span class="token operator">-<span class="token constant">T git<span class="token variable">@github<span class="token punctuation">.com
<span class="token constant">Warning<span class="token punctuation">: <span class="token constant">Permanently added the <span class="token constant">RSA host key <span class="token keyword">for <span class="token constant">IP address <span class="token string">'13.250.177.223' to the list of known hosts<span class="token punctuation">.
<span class="token constant">Hi dragon<span class="token operator">! <span class="token constant">You've successfully authenticated<span class="token punctuation">, but <span class="token constant">GitHub does <span class="token keyword">not provide shell access<span class="token punctuation">.
$ ssh <span class="token operator">-<span class="token constant">T git<span class="token variable">@gitlab<span class="token punctuation">.com
<span class="token constant">The authenticity of host <span class="token string">'gitlab.com (35.231.145.151)' can't be established<span class="token punctuation">.
<span class="token constant">ECDSA key fingerprint is <span class="token constant">SHA256<span class="token symbol">:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSn<span class="token punctuation">.
<span class="token constant">Are you sure you want to continue connecting <span class="token punctuation">(yes<span class="token operator">/no<span class="token punctuation">)<span class="token operator">? yes
<span class="token constant">Warning<span class="token punctuation">: <span class="token constant">Permanently added <span class="token string">'gitlab.com,35.231.145.151' <span class="token punctuation">(<span class="token constant">ECDSA<span class="token punctuation">) to the list of known hosts<span class="token punctuation">.
<span class="token constant">Welcome to <span class="token constant">GitLab<span class="token punctuation">, <span class="token variable">@dragon!
$ ssh <span class="token operator">-<span class="token constant">T git<span class="token variable">@gitee<span class="token punctuation">.com
<span class="token constant">The authenticity of host <span class="token string">'gitee.com (116.211.167.14)' can't be established<span class="token punctuation">.
<span class="token constant">ECDSA key fingerprint is <span class="token constant">SHA256<span class="token symbol">:FQGC9Kn<span class="token operator">/eye1W8icdBgrp<span class="token operator">+<span class="token constant">KkGYoFgbVr17bmjeyc<span class="token punctuation">.
<span class="token constant">Are you sure you want to continue connecting <span class="token punctuation">(yes<span class="token operator">/no<span class="token punctuation">)<span class="token operator">? yes
<span class="token constant">Warning<span class="token punctuation">: <span class="token constant">Permanently added <span class="token string">'gitee.com,116.211.167.14' <span class="token punctuation">(<span class="token constant">ECDSA<span class="token punctuation">) to the list of known hosts<span class="token punctuation">.
<span class="token constant">Hi 我是x<span class="token operator">! <span class="token constant">You've successfully authenticated<span class="token punctuation">, but <span class="token constant">GITEE<span class="token punctuation">.<span class="token constant">COM does <span class="token keyword">not provide shell access<span class="token punctuation">.
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code><button class="VJbwyy" type="button"></button></pre>
<p>结果如果出现这个就代表成功:</p>
<ul>
<li>GitHub -> successfully</li>
<li>GitLab -> Welcome to GitLab</li>
<li>Gitee -> successfully</li>
</ul>
<h3>测试 clone 项目</h3>
<pre class="line-numberslanguage-bash"><code class="language-bash">$ git clone git@gitlab.com:d-d-u/java-xxx.git
Cloning into 'java-basic'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
</code><button class="VJbwyy" type="button"></button></pre>
<h2>7.操作过程出现的问题/报错</h2>
<h3>tilde_expand_filename: No such user</h3>
<p>检查是否成功的时候,报错:<code>tilde_expand_filename: No such user .</code></p>
<pre class="line-numberslanguage-batch"><code class="batchlanguage-batch">$ ssh -T git@github.com
tilde_expand_filename: No such user .
</code><button class="VJbwyy" type="button"></button></pre>
<p>解决方法:</p>
<p>此问题是因为<code>写错了文件路径</code> 或者 <code>大小写没写对</code>,删除重新配置,或者复制我的改好粘贴进去。</p>
<h2>8. 参考链接</h2>
<ul>
<li>https://www.cnblogs.com/kelsen/p/8342239.html</li>
<li>git 多账号 ssh-key 管理(github和gitlab共同使用), by 长是人千离</li>
<li>https://stackoverflow.com/questions/27708264/when-trying-to-clone-a-repository-i-get-the-following-message-tilde-expand-file</li>
<li>https://blog.csdn.net/u014296452/article/details/79984867</li>
</ul>
</div>
<p style="text-align: right"><br><br><br><span style="font-size: 12px">转载链接:https://www.jianshu.com/p/68578d52470c</span><br><br></p>
</div>
<div id="MySignature" role="contentinfo">
作者:子钦加油<br>
出处:https://www.cnblogs.com/zmdComeOn/<br>
<span style="color: #DD2C2A">个性签名</span>:努力生活,努力走路<br>
阿里云拼团:https://www.aliyun.com/1111/home?userCode=f4ee1llo1核2G1M,86一年,229三年;2核4G5M,799三年;2核8G5M,1399三年<br>
腾讯云三月采购计划特价:https://cloud.tencent.com/act/cps/redirect?redirect=1073&cps_key=15d0b1673287c43fe946626d9f4e2eee&from=console1核2G1M,88一年;1核2G1M,268三年;2核4G5M,998一年;4核8G5M,2888元三年<br>
<div class="div_masklayer" id="div_masklayer" style="display: none;"></div>
<div class="div_popup" id="Div_popup" style="display: none; margin-top: -386px;">
<img class="img_zfb" id="img_zfb" src="https://images.cnblogs.com/cnblogs_com/zmdComeOn/1584136/o_191107040714WechatIMG85.jpeg">
<p class="mid">您的资助是我最大的动力!<br>金额随意,欢迎来赏!</p>
<img class="img_zfb" id="img_wx" src="https://images.cnblogs.com/cnblogs_com/zmdComeOn/1584136/o_191107040644WechatIMG84.png">
</div>
<div class="blogds">如果,想给予我更多的鼓励,<span class="bold">求打</span> </div><br><br>
来源:https://www.cnblogs.com/zmdComeOn/p/11748991.html
頁:
[1]