[Git]关联远程库的两种方法及配置
【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://www.cnblogs.com/cnb-yuchen/p/18000705
出自【进步*于辰的博客】
参考笔记三,P16。
1、连接方式
git 的连接方式分为四种:ssh 连接、HTTPS 连接、SVN 连接和SVN + ssh 连接。
1.1 HTTPS
1.1.1 身份验证
在首次连接gitee仓库时,会弹出如下窗口:
用户名、密码就是gitee账号的用户名、密码,正确即可连接成功。前提是,此gitee账号必须是相应仓库的仓库成员。并且,若后续需要进行提交等操作,要求成员权限在开发者及以上。(关于gitee的使用,大家可自行去网站学习 → gitee官网)
1.1.2 两个问题
- 首次连接gitee时,需要输入gitee账号用户名和密码,若重新创建一个本地库,是不是还要连接一次?
- 假设我有两个gitee账号A、B,已连接成功A,现在我要拉取B中的一个项目,以HTTPS的方式连接B,步骤是不是跟上述相同?
在连接成功后,电脑会将gitee账号保存到凭据管理器,当下次git操作时用作身份验证。
只要下次git操作是通过HTTPS方式连接gitee,就会使用此账号进行身份验证。而电脑将gitee账号保存到凭据管理器时的标识是gitee官网的网址,是不区分个人账号的。
因此,连接 B 时进行身份验证使用的还是之前连接 A 时保存的gitee账号,这样必然验证失败。故需要先将凭据管理器中保存的gitee账号删除:
1.1.3 不足之处
- 需要gitee账号的用户名和密码进行身份验证,那如果忘记账号怎么办?
- 需要去凭据管理器删除gitee账号,好麻烦。而且,若是凭据管理器中的gitee账号被恶意查看怎么办?
- 若项目组新进一个成员,就需要将此成员的gitee账号添加进仓库成员中,是不是每个仓库都要添加一次?
第1个不足容易解决,找回密码就行了。
第2个不足,凭据管理器中的gitee账号密码是隐藏的。若是普通操作,管理员都无法查看,但的确有一些工具可以进行查看,比如:SvnPwd。
第3个不足,的确,若是想要新成员能操作另一个项目,则同样要把其gitee账号添加进仓库成员,而且是每个仓库都要添加一次。
仓库邀请新成员时可从其他仓库选择添加。不用再输入一遍新gitee账号,这也是一个便利吧。
1.2 ssh
1.2.1 概述
ssh连接方式很好地解决了HTTPS连接方式存在的问题,其实现思路也很简单:
使用某种加密算法将某个标识和计算机Mac地址等信息进行加密,得到两条一长串字符。由于这两条字符串是由计算机Mac地址等信息加密而成,而计算机Mac地址唯一,故这两条字符串唯一,并且相互对应,这就是公钥和私钥。
从上述阐述中,大家可以知道。ssh连接方式不需要gitee账号进行身份验证。因为,公钥和私钥都唯一、且具有相互对应的特性,这就是最好的身份验证方法。
因此,将公钥添加进仓库的公钥管理中,连接gitee时,电脑会自行查找某个位置的私钥。如果仓库某个公钥能与此电脑上某个私钥对应上,说明这个公钥是由此电脑创建的(当然也可以说这个公钥是由其他电脑创建、然后发送到此电脑上的。这种情况我未尝试过,不过我觉得应该不可行,毕竟加密所用的mac地址不相符,而且似乎无意义,故不探讨),自然通过了身份验证,gitee连接成功。
下面我介绍一下ssh连接方式如何配置(配置所用公钥是现成的,关于创建公钥和私钥的详述后续说明):
1.2.2 公钥配置
1、配置方式一:
将创建的公钥添加进仓库公钥管理中,只要满足以下两个条件,即可通过身份验证。
1、公钥和私钥文件必须在下图文件目录中。
2、公钥和私钥文件名必须以“id_
”作为前缀,如:id_rsa.pub
。
图中红框内,后缀是.pub
的文件是公钥文件,无后缀的是私钥文件。为什么我的公钥文件不是以id_
作为前缀?后续说明。
2、配置方式二:
在配置方式一,大家肯定看出了一个问题:“公钥是添加在仓库公钥管理内,那多个项目是不是要逐个添加?”
配置方式二可以解决这个问题,称为“个人公钥”。即上图,作用与仓库公钥大同小异,关于个人公钥大家可自行在官网查看。
1.2.3 注意
- 两种公钥不相通,且互斥;
- 个人公钥管理此gitee账号旗下所有仓库,而仓库公钥仅管理配置此公钥的仓库。
说明一下:
- “不相通”指个人公钥与仓库公钥不可相互转换,如要迁移公钥,只能删除后再添加,而“不相通”的原因是两种公钥的权限不同,为了区分。“互斥”指个人公钥与仓库公钥不能相同;
- “管理旗下所有仓库”指只要将公钥添加进个人公钥,则这个gitee账号内的所有仓库都可操作,即身份验证一并通过;“仅管理配置此公钥的仓库”是因为当将公钥添加进仓库公钥时,其他仓库是可见的,只是状态为未部署。仓库只有成功部署公钥才能通过身份验证。也就是说,添加进仓库公钥的公钥的身份验证作用仅对当前仓库有效。
1.3 SVN、SVN + ssh
这两种连接方式非本文重心,故暂不探讨。
2、公钥、私钥
我们见过公钥和私钥最多的地方应该是非对称加密算法吧。在非对称加密算法中,公钥和私钥用于加密和解密的唯一凭据。
在Git中,公钥和私钥则用于ssh连接方式的身份验证。
2.1 创建
创建命令:
ssh-kengen -t rsa -b 1024 -C "<标识>" -f <文件存放位置>
上文说道,公钥和私钥是由某种加密算法将某个标识和计算机Mac地址等信息进行加密生成的。
rsa
:rsa 是其中一种加密算法,比较常用的有:rsa、dsa、id25519;-b
后的数字是生成的公钥和私钥的长度,数值任意,但最好是2
的指数幂。注意,如果加密算法是dsa,则长度必须是1024,否则无法生成成功;<标识>
是一个字符串,对git操作无作用,仅是一个标识。公钥生成成功后,大家可能会在两个地方看到:(1)、公钥的结尾;(2)、gitee的个人公钥或仓库公钥的名字(当我们添加公钥未指定公钥名称时)。注意:这个标识与公钥并不绑定,故可任意;-f
后是公钥和私钥文件的保存位置,可以是绝对路径,如:C:\Users\于辰\Downloads\新建文件夹\test_xx
;也可以是相对路径,如:~/.ssh/test_xx
(~
表示当前电脑账户的目录)。其中,test_xx
是公钥和私钥文件名。注意:路径不要加引号。
总结:
在一台电脑、使用一种算法、指定一个标识,可创建无数个公钥和私钥。
大家可能觉得这个总结云里雾里,这么举例吧:另选一个长度、保存位置或文件名就可以成功创建一对公钥和私钥。大家尝试一下就知道了。
2.2 示例
1、创建公钥、私钥。
2、公钥、私钥文件。
3、查看公钥、私钥文件。
最后,将公钥复制,按照上述公钥配置方法,将公钥添加进个人公钥或仓库公钥即可,ssh连接方式配置完成。
2.4 关于身份验证时扫描公钥、私钥文件
上述【公钥配置】中提到若要成功配置公钥,需要满足两个条件:
- 公钥和私钥文件必须在文件目录
C:\Users\于辰\.ssh
中; - 公钥和私钥文件名必须以“
id_
”作为前缀。
为什么需要满足这两个条件?
因为当采用ssh连接方式连接gitee时,git默认扫描C:\Users\于辰\.ssh
目录下、文件名以“id_
”开头的私钥文件,并以其内私钥与gitee个人公钥或仓库公钥进行匹配。若匹配成功,则身份验证通过。
如何自定义扫描目录和文件?
方式一:命令配置。(仅在当前命令窗口有效)
方式二:TortoiseGit工具配置。(需要另行创建ppk公钥、私钥文件)
.ppk
与.pub
类似,也是一种秘钥文件。因为ssh-keygen
命令创建的公钥文件后缀是.pub
,而ppk文件的创建是有点麻烦的。
3、关于同电脑连接多gitee账号
3.1 前言
先补充一点:
虽然git会默认识别相应目录下文件名前缀为“id_”的私钥文件,可并不存在遍历机制。就是说,git不会将相应目录下所有文件名前缀为“id_”的私钥文件逐个与gitee账号的个人公钥或仓库公钥进行匹配,我们必须手动配置私钥文件。
假设我有两个gitee账号A、B,现在我需要分别从A、B的仓库中各拉取一个项目,如何配置私钥文件?
尽管上文中的两种配置方式都存在不足,但皆可以解决这个问题。下文我介绍另一种私钥文件配置方式,也是本人一直在使用的。
3.2 公钥文件配置方式三:config配置文件
文件位置:
图中的 config 文件就是公钥配置文件,这个文件无后缀。
下图是其内容。
这是我目前正在使用的配置,下面我一一进行说明。
Host
:域名别名。
git@gitee.com:yu-chen_xx/xx.git
这是我的一个gitee账号内的仓库note的ssh链接,其中的gitee.com
就是域名。“域名别名”就是为其设置一个别名。
git@local:yu-chen_xx/note.git
这是修改后的ssh链接,“域名别名”是local
。
“域名别名”是什么意思?
Git无法自动遍历匹配公钥和私钥,故需要我们手动配置。因此config配置文件的作用是告诉Git,身份验证时应匹配哪个公钥文件。
Host
的作用是联系ssh链接与配置条目。
我的config文件中有两个配置条目。
HostName
:原域名。
PreferredAuthentications
:验证方式,publickey
指公钥;
IdentityFile
:验证文件,上例指公钥文件,可以是绝对路径或相对路径。
User
:用户名。
前4个配置必填,User
配置可有可无。若有,最好与gitee账号的用户名完全相同。
最后
本文采用意识流,可能会给大家的阅读带来不便。其实大家只要稍作参考、自行测试一下,就完全明白了。
如果大家不了解Git、或者想要查找Git命令,可查阅博文《[Git]入门及其常用命令》。
本文完结。
[Git]关联远程库的两种方法及配置的更多相关文章
- Git恢复之前版本的两种方法reset、revert
实战 回退 1.删除之前的提交 git reset --hard id 推送到远程 git push -f [git log中确实删除了,但是拿到可以恢复] 2.不删除之前的提交 git revert ...
- git 关联远程库(https协议)
1.在oschina上新建库 2.在本地文件夹右键->"git Bash here" 3.设置全局变量: git config --global user.name &quo ...
- Git恢复之前版本的两种方法reset、revert(图文详解)
一.问题描述在利用github实现多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,本文总结了两种解决方法:回退(reset).反做(reve ...
- Git恢复之前版本的两种方法reset、revert(图文详解)(转)
一.问题描述在利用github实现多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,本文总结了两种解决方法:回退(reset).反做(reve ...
- Linux 第一个静态库 (两种方法)
方法1 --------------------------------------------- Linux下 静态库 一般为.a为扩展名 类似 lib***.a 的文件名.利用静态函数库编译 ...
- Android:实现无标题的两种方法
实现无标题的两种方法:配置xml文件和编写代码设置 1.在AndroidManifest.xml文件中进行配置 实现全屏效果: android:theme="@android:style/T ...
- git使用(公钥私钥产生--远程库添加公钥--本地库关联远程库-使用)
原文1:http://www.cnblogs.com/wangmingshun/p/5424767.html 原文2(指令):http://blog.csdn.net/xiaohanluo/artic ...
- oracle多表关联删除的两种方法
oracle多表关联删除的两种方法 第一种使用exists方法 delete from tableA where exits ( select 1 from tableB Where tableA.i ...
- GitHub常用上传文件的两种方法 附带常见的问题及Git安装教程
从早上下课到现在一直在琢磨如何给Github下载本地文件,中午饭都没吃.还好是解决了,感觉挺有成就感的.O(∩_∩)O哈哈~ 好哒 闲话不说,说重点. 一.git的安装 百度云:http://pan. ...
- git 给远程库 添加多个url地址
目录[-] 前提 使用流程 原理解析 注意 Other 参考文章 作者:shede333主页:http://my.oschina.net/shede333 && http://blo ...
随机推荐
- 【LGR-154-Div.4】洛谷入门赛 #15
[LGR-154-Div.4]洛谷入门赛 #15 \(A\) luoguB3813 [语言月赛 202308]四个人的排名加起来没有小粉兔高 AC 水题. #include<bits/stdc+ ...
- NC19989 [HAOI2012]容易题(EASY)
题目链接 题目 题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能 ...
- NC16562 [NOIP2012]开车旅行
题目链接 题目 题目描述 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为 ...
- tensorflow解决回归问题简单案列
1 待拟合函数 noise服从均值为0,方差为15的正太分布,即noise ~ N(0,15). 2 基于模型的训练 根据散点图分布特点,猜测原始数据是一个二次函数模型,如下: 其中,a,b,c为待训 ...
- 微信小程序云开发项目-个人待办事项-04【我的】模块开发
上一篇: 微信小程序云开发项目-个人待办事项-03[主页]模块开发 https://blog.csdn.net/IndexMan/article/details/124538576 模块开发步骤 本篇 ...
- java.lang.System快速指南
1.介绍 在本教程中,我们将快速了解java.lang.System类及其特性和核心功能. 2.IO 系统类是java.lang的一部分,它的一个主要特性是让我们能够访问标准的I/O流. 简单地说,它 ...
- 使用UTL_HTTP包获取网页内容
UTL_HTTP 包提供了容易的方式通过HTTP协议获取网页内容,下面结合几个例子介绍一下: ----------------------------------------------------- ...
- sentry-cli 的 windows 安装
项目搭建时,发现在使用高版本 sentry-cli 上传 pdb 文件后会报 404 错误,同事猜测高版本的 sentry-cli 会返回错误的地址,建议我用低版本的试一下 依据教程,我在 windo ...
- win32-改变显示器的亮度
调用SetMonitorBrightness 代码示例: #pragma comment(lib, "dxva2.lib") #include <windows.h> ...
- 学习go语言编程之工程管理
Go命令行工具 安装了Go语言的安装包后,就直接自带Go命令行工具. # 查看当前安装的Golang版本 go version # 查看go命令行工具的帮助信息 go help Go命令行工具可以完成 ...