侧边栏壁纸
博主头像
琉璃红梅 博主等级

琉璃世界,白雪红梅。

  • 累计撰写 52 篇文章
  • 累计创建 102 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录
Git

Git系列-Git简介与SSH配置

雪穗
2024-02-21 / 0 评论 / 0 点赞 / 139 阅读 / 0 字
温馨提示:
本文最后更新于2026-01-23,若内容或图片失效,请留言反馈。 若部分素材不小心影响到您的利益,请联系我删除。

1.Git简介

Git是一种分布式版本控制系统,在我看来有两个重要优势:更新、回溯,举个简单的例子,在写毕业论文的过程,在初版到最终版的过程中,一般进行多次修改,并且还会有其他同学或老师提出的修改意见,生成许多不同版本,我们一般是保存历史版本,在前一版的基础之上进行修改,而这一过程就是“版本控制”。何为分布式,即集中式的反义词,任何人只需要clone公共的代码仓库就可以拥有整个代码和版本信息,开发者之间可以容易地解决冲突问题,更好的实现协作开发。

推荐阅读:

1.Pro Git book

2.Git教程

2.Git的基本工作流程

转载自:

1.Git使用教程,最详细,最傻瓜,最浅显,真正手把手教

2.Git简介

Workspace: 工作区,就是你平时存放项目代码的地方

Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

常用的命令:

#初始化仓库
git init
#提交所有文件到暂存区
git add .
#提交所有文件到仓库区
git commit -m "提交说明"
#提交到远程仓库
git push

3.Git的常用配置

3.1 Git配置文件与配置流程总览

转载自:

1.1.6 起步 - 初次运行 Git 前的配置

3.1.1 Git配置文件介绍

既然已经在系统上安装了 Git,你会想要做几件事来定制你的 Git 环境。 每台计算机上只需要配置一次,程序升级时会保留配置信息。 你可以在任何时候再次通过运行命令来修改它们。

Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:

1./etc/gitconfig文件: 包含系统上每一个用户及他们仓库的通用配置。 如果在执行 git config 时带上 --system 选项,那么它就会读写该文件中的配置变量。 (由于它是系统配置文件,因此你需要管理员或超级用户权限来修改它。)

2.~/.gitconfig~/.config/git/config 文件:只针对当前用户。 你可以传递 --global 选项让 Git 读写此文件,这会对你系统上 所有 的仓库生效。

3.当前使用仓库的 Git 目录中的 config 文件(即 .git/config):针对该仓库。 你可以传递 --local 选项让 Git 强制读写此文件,虽然默认情况下用的就是它。 (当然,你需要进入某个 Git 仓库中才能让该选项生效。)

每一个级别会覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。

在 Windows 系统中,Git 会查找 $HOME 目录下(一般情况下是 C:\Users$USER )的 .gitconfig 文件。 Git 同样也会寻找 /etc/gitconfig 文件,但只限于 MSys 的根目录下,即安装 Git 时所选的目标位置。 如果你在 Windows 上使用 Git 2.x 以后的版本,那么还有一个系统级的配置文件,Windows XP 上在 C:\Documents and Settings\All Users\Application Data\Git\config ,Windows Vista 及其以后的版本在 C:\ProgramData\Git\config 。此文件只能以管理员权限通过 git config -f <file> 来修改。

你可以通过以下命令查看所有的配置以及它们所在的文件:

git config --list --show-origin
3.1.2 配置用户信息

安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改,全局配置信息会写入到 ~/.gitconfig 文件中:

git config --global user.name "John Doe"   
git config --global user.email [email protected]

#示例
git config --global user.name "Einstein-schrodinger"   
git config --global user.email [email protected]
  • user.name:github或其它代码仓库的用户名

  • user.email:github或其它代码仓库所绑定的邮箱

再次强调,如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。

删除全局配置:

git config --global --unset user.name "用户名"
git config --global --unset user.email 邮箱

当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置。

局部配置,这一配置会保存在当前仓库目录的 .git/config 文件中,在提交代码时会携带该信息

git config --local user.name "用户名"   
git config --local user.email 邮箱
3.1.3 检查配置信息

如果想要检查你的配置,可以使用 git config --list 命令来列出所有 Git 当时能找到的配置:

git config --list

user.name=John Doe
[email protected]
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
...

你可能会看到重复的变量名,因为 Git 会从不同的文件中读取同一个配置(例如:/etc/gitconfig~/.gitconfig)。 这种情况下,Git 会使用它找到的每一个变量的最后一个配置。

你可以通过输入 git config <key>: 来检查 Git 的某一项配置:

git config user.name

John Doe
3.1.4 生成/添加SSH公钥

Git服务器都了基于 SSH 协议的 Git 服务,在使用 SSH 协议访问仓库之前,需要先配置好账户/仓库的 SSH 公钥。

3.2 Git配置的实际操作流程

3.2.1 安装git(如果已经安装可以忽略)

推荐阅读:

1.Git 详细安装教程(详解 Git 安装过程的每一个步骤)

3.2.2 设置环境变量

HOME环境变量设置为自己的家目录(如果已经配置可以忽略)

3.2.3 配置全局用户信息(如果已经配置过可以忽略,安装完git后这一步配置是必须的)

这一信息将会在你向远程仓库push时携带

git config --global user.name "用户名"   
git config --global user.email 邮箱

之后通过以下命令查看配置是否成功,如下图的末尾两行显示

git config --list --show-origin

可以看到配置之后会在 C:\User\Su 家目录下生成 .gitconfig 文件,内容如下:

[user]
	name = Einstein-schrodinger
	email = [email protected]
3.2.4 生成SSH公钥和私钥用于SSH连接远程代码仓库

参考:

1.配置同时使用 Gitlab、Github、Gitee(码云) 共存的开发环境

2.生成/添加SSH公钥

一般来说需要我们需要连接的代码仓库不止一个,所以这里演示连接多个代码仓库的配置步骤,以连接Gitee和Github以及自建的Git仓库Gitea为例,所以需要生成三次密钥

右键打开git bash,依次输入如下内容分别生成三个仓库的公钥与私钥,-t之后为加密方式,-C之后为 sshkey 的标识名,一般便于标识会使用邮箱,实际并不要求具体命名为某个邮箱,下图中SHA256一行的末尾即为该标识,-f之后为生成的密钥文件名称,为了便于标识,在最后以仓库名称结尾

ssh-keygen -t ed25519 -C "github" -f ~/.ssh/id_ed25519_github

ssh-keygen -t ed25519 -C "gitee" -f ~/.ssh/id_ed25519_gitee

ssh-keygen -t ed25519 -C "gitea" -f ~/.ssh/id_ed25519_gitea

具体生成过程如下,一路回车即可

之后会在 ~/.ssh 目录下生成三个仓库的公钥(后缀名为pub)与私钥六个文件,分别为:

id_ed25519_github
id_ed25519_github.pub
id_ed25519_gitee
id_ed25519_gitee.pub
id_ed25519_gitea
id_ed25519_gitea.pub

然后将公钥放置到代码仓库,这样在连接代码仓库时会进行公钥和私钥的验证,配对成功则进行连接

Github添加公钥流程

Gitee添加公钥流程

Gitea添加公钥流程

此时你迫不及待,想要进行SSH连接测试,结果会报如下错误:

ssh -T [email protected]

这是因为你设置了三组密钥,而在连接代码仓库时未指定那一组公钥和私钥进行配对,所以还需要再 ~/.ssh目录下新建一个config配置文件,内容如下:

# github密钥
Host github.com
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_ed25519_github


# gitee密钥
Host gitee.com
HostName gitee.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_ed25519_gitee

# gitea密钥
Host gitea.sqwfly.top
Port 222
HostName 123.123.123.123      #Gitea仓库所在服务器的ip地址,如果未进行转发也可用域名
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_ed25519_gitea
  • Host
    它涵盖了下面一个段的配置,我们可以通过他来替代将要连接的服务器地址, [email protected] 中的 gitee.com 即为Host
    这里可以使用任意字段或通配符。
    当ssh的时候如果服务器地址能匹配上这里Host指定的值,则Host下面指定的HostName将被作为最终的服务器地址使用,并且将使用该Host字段下面配置的所有自定义配置来覆盖默认的 /etc/ssh/ssh_config 配置信息。

  • Port
    自定义的端口。默认为22,可不配置,但是Gitea使用的是222端口所以需要配置

  • User
    自定义的用户名,默认为git,可不配置

  • HostName
    真正连接的服务器地址

  • PreferredAuthentications
    指定优先使用哪种方式验证,支持密码和秘钥验证方式

  • IdentityFile
    指定本次连接使用的密钥文件位置

之后再进行连接测试,可以看到均连接成功,这样就可以进行git的操作了

一般连接成功之后会在 ~/.ssh 目录下生成 known_hosts 文件

known_hosts:访问过的机器的公钥,第一次SSH其他机器时如果有权限访问,会提示是否保存信息,下次会校验访问该机器的公钥与known_hosts中的是否一致,如果不一致则不能登录过去。如果不能登录,解决方案是删除known_hosts中该条机器的记录,再重试。

如果需要克隆自建代码仓库的某一仓库可以执行,以下两种命令均可以

git clone ssh://[email protected]:222/sqwfly/blog.git

git clone ssh://[email protected]/sqwfly/blog.git

如果报如下错误,很可能是 config 配置问题

3.3 Git配置多个SSH Key

转载自:Git 配置多个 SSH Key

同时使用两个 Gitee 帐号,需要为两个帐号配置不同的 SSH Key:

  • 帐号 A 用于公司;

  • 帐号 B 用于个人。

解决方法

1.生成帐号 A 的 SSH Key,并在帐号 A 的 Gitee 设置页面添加 SSH 公钥:

ssh-keygen -t ed25519 -C "Gitee User A" -f ~/.ssh/gitee_user_a_ed25519

2.生成帐号 B 的 SSH-Key,并在帐号 B 的 Gitee 设置页面添加 SSH 公钥:

ssh-keygen -t ed25519 -C "Gitee User B" -f ~/.ssh/gitee_user_b_ed25519

3.创建或者修改文件 ~/.ssh/config,添加如下内容:

Host gt_a
    User git
    Hostname gitee.com
    Port 22
    IdentityFile ~/.ssh/gitee_user_a_ed25519
Host gt_b
    User git
    Hostname gitee.com
    Port 22
    IdentityFile ~/.ssh/gitee_user_b_ed25519

4.用 ssh 命令分别测试两个 SSH Key:

ssh -T gt_a

Hi Gitee User A! You've successfully authenticated, but GITEE.COM does not provide shell access.

ssh -T gt_b

Hi Gitee User B! You've successfully authenticated, but GITEE.COM does not provide shell access.

5.拉取代码:

[email protected] 替换为 SSH 配置文件中对应的 Host,如原仓库 SSH 链接为:

[email protected]:owner/repo.git

使用帐号 A 推拉仓库时,需要将连接修改为:

gt_a:owner/repo.git

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区