Git远程仓库

article/2025/8/19 2:45:06

三、远程仓库

分布式版本管理系统,可以是在多台主机上共同管理同一个版本库,而且各台主机上的版本库都是一致的,没有主次之分。

在实际工作中,往往使用一台服务器充当版本库的载体,这台服务器24小时开机,其他用户从服务器的版本库克隆一份到自己的电脑上,并且将各自的提交推送到服务器仓库中,也从仓库中拉去别人的提交。但自己搭建Git的服务器也不是很方便,也没有必要。我们往往使用一些第三方机构提供的Git仓库托管服务,例如Github、Gitee,(相当于使用别人的Git服务器),在下面的测试中,均使用国产的码云托管平台-Gitee。

首先一个问题,本地仓库如何与远程仓库进行数据的传输呢?答案是SSH协议。

3.0 SSH

3.0.1 SSH简介

SSH(Secure Shell的缩写)是一种网络协议,用于加密两台计算机之间的通信,并且支持各种身份验证机制。在实际使用中,它主要用于保证远程登录和远程通信的安全,任何网络服务都可以用这个协议来加密。

SSH起源于1995芬兰赫尔辛基工业大学的研究员Tatu Ylönen 设计的SSH协议的第一个版本(SSH 1)

芬兰赫尔辛基真是个好地方,前有Linux Torvalds,后有Tatu Ylönen,不过两人对于产品开源的态度是截然相反的。

1995年12月,由于客服需求越来越大,Tatu Ylönen 就成立了一家公司 SCS,专门销售和开发 SSH。这个软件的后续版本,逐渐从免费软件变成了专有的商业软件。

现在绝大多数人使用的均是OpenBSD的开发人员在1999年启动的OpenSSH项目。目前,Linux的所有发行版几乎都自带OpenSSH。

SSH采用非对称加密的方式,即用户需要在本地主机上通过加密算法生成一组密钥对,分为公钥(public key)和私钥(private key)。其中私钥保存在自己的主机上,不能泄露(除非你想让别人拥有访问权限),公钥则是放在服务器上,可以公开,公钥和私钥是一一对应的。

如果数据使用公钥进行加密,则只有使用对应的私钥才能解密;若使用私钥进行加密,则只有使用对应的公钥进行解密,后一过程称为”签名“

SSH 密钥登录分为以下的步骤。

预备步骤,客户端通过ssh-keygen生成自己的公钥和私钥。

第一步,手动将客户端的公钥放入远程服务器的指定位置。

第二步,客户端向服务器发起 SSH 登录的请求。

第三步,服务器收到用户 SSH 登录的请求,发送一些随机数据给用户,要求用户证明自己的身份。

第四步,客户端收到服务器发来的数据,使用私钥对数据进行签名,然后再发还给服务器。

第五步,服务器收到客户端发来的加密签名后,使用对应的公钥解密,然后跟原始数据比较。如果一致,就允许用户登录。

3.0.2 Gitee配置SSH用户账户公钥

首先明确一个概念,Gitee上的Key分为仓库的SSH Key和账户的SSH Key。Gitee上的解释是这样的。

和仓库"只读"权限的 SSH Key 相比,账户的 SSH Key 同时具备推送/拉取的权限,对用户创建/参与的仓库均能使用,使用起来更加方便。

仓库的 sshkey 只针对仓库,且我们仅对仓库提供了部署公钥,即仓库下的公钥仅能拉取仓库,这通常用于生产服务器拉取仓库的代码。
而用户的 key 则是针对用户的,用户添加了 key 就对用户名下的仓库和用户参加了的仓库具有权限,一般而言,用户的key具有推送和拉取的权限,而仓库的 key 则只具有拉取权限。

下面介绍具体的方法:

  1. 在本机git命令行中使用ssh-keygen -t ed25519 -C "xxxx@xx.com",后面替换为自己的邮箱。

    (1)-t

    -t参数用于指定生成密钥的加密算法,一般dsarsa

    (2)-C:

    -C参数可以为密钥文件指定新的注释,推荐格式为username@host

    这里我采用的加密算法是Gitee官方文档中示例的ed25519,在输入命令后,系统会要你确认三处,第一是密钥保存地址;第二是设置密钥的保护密码(passphrase),即使入侵者拿到秘钥,依然要输入保护密码才能使用;第三是确认保护密码。

    sshkeygen.png

  2. 上传公钥

ssh push.png

当然,你可以上传多个公钥,这样就可以在不同设备上使用同

3.1 添加远程库

第一种情况:本地已有仓库,想要将本地仓库推送到远程仓库然后多人协作。

3.1.1 Gitee新建仓库

create git repository.png

在码云的创建仓库界面中,首先输入仓库名称(中英文均可,但推荐中文),随后路径一栏会自动匹配你的仓库名;仓库介绍非必填;开源和私有根据个人要求设置,开源的话所有人都可以看见,如果是公司内部项目可以不开源(私有项目有5人成员上限,更多人需要花钱)。

3.1.2 本地仓库关联远程Gitee仓库

git remote add origin git@gitee.com:time_and_space_ferry/learngit.git
git push -u origin master

这里add origin后的地址是由Gitee默认生成提供的,在创建仓库后的界面就展示了,我们只需复制粘贴即可。origin指的是远程仓库的名称,origin为默认习惯命名。

git push -u使用后,可以在后续推送/拉取相同主机的相同分支时直接使用git push/git pull。关与-u参数的参考资料

默认情况下,添加远程仓库不返回信息,推送返回信息如下

git push origin master.png

推送后,Gitee上的远程仓库已经更新。

3.1.3 从远程仓库克隆

更常见的开发模式是,先在第三方托管平台创建一个仓库,其他协作开发人员克隆远程仓库到本地。

gitee clone.png

从已有远程仓库克隆到本地有多种方式,最常用的还是通过SSH协议的克隆,推荐使用SSH的方式。

使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https

git clone git@gitee.com:xxxx/xxx.git

参考文章:

[ssh-tutorial](https://gitee.com/mirrors_trending/ssh-tutorial/blob/main/docs/key.md)

廖雪峰的Git


http://chatgpt.dhexx.cn/article/oNKkQS4y.shtml

相关文章

08_Git远程仓库

教程目录 01_版本控制概述 02_Git概述 03_Git下载和安装 04_Git底层原理解析 05_Git命令详解 - CRUD 06_Git命令详解 - 分支 07_Git命令详解 - 后悔药 08_Git远程仓库 一、远程仓库概念 什么是远程仓库 为了能在任意 Git项目上团队协作,你需要知道如何管理…

Git入门使用到远程仓库全指南

简介 本文是面向零基础者的Git入门教程,内容较为基础简单,主要来源于各种资料整合以及个人使用经验,仅作基本了解性介绍。内容基本涵盖Git常用操作,以各种命令为中心,逐一解释其用法和注意事项。另附在VScode利用其辅…

【Git】远程仓库

1 远程仓库的使用 1.1 查看远程仓库 在 Gitee 上创建一个新的仓库git_demo_04,并配置SSH免密登录。SSH可参考 生成SSH秘钥,Gitee 相关使用可参考 Gitee 帮助中心 使用git clone命令克隆git_demo_04仓库到本地,该令会自动将其添加为远程仓库…

取整函数的性质

1、定义:取整函数是一类将实数映射到相近的整数的函数。 2、分类:常用的取整函数有两个,分别是下取整函数和上取整函数。 3、形式: 下取整函数在数学中一般记作,在计算机科学中一般记作 floor(x); 上…

取整函数

一、函数说明 对 double 而言,取整、取余的相关函数和运算符请参考下表: VB6.0C C# 说 明Int(x)floor(x)Math.Floor(x)floor表示地板,也就是将向下取整数,即返回最大的整数使得 Math.Floor(1.9) 返回 1 Math.Floor(1…

php 除法,php中如何除法取整

php中除法取整的方法:1、使用【round()】函数对浮点数进行四舍五入;2、使用【ceil()】函数向上舍入为最接近的整数;3、使用【floor()】函数向下舍入为最接近的整数。 php中除法取整的方法: 1. round:四舍五入 round()函…

Excel如何使用取整函数

如下图B列为随机录入的数据,现在想要将B列数据四舍五入保留两位小数 在C2单元格输入公式ROUND(B2,2) 将C2单元格下拉到底即可完成四舍五入保留两位小数。 如果想要保留整数,只需要将C2单元格公式改为ROUND(B2,0),并下拉到底即可完成。 下面跟…

取整函数及其性质

1、取整函数定义及分类 取整函数是一类将实数映射到相近的整数的函数。 常用的取整函数有两个,分别是下取整函数和上取整函数。 下取整函数在数学中一般记作,在计算机科学中一般记作 floor(x); 上取整函数在数学中一般记作,在…

mysql 向上取整_mysql的取整函数

一、ROUND()函数用法 ROUND(X) -- 表示将值 X 四舍五入为整数,无小数位 ROUND(X,D) -- 表示将值 X 四舍五入为小数点后 D 位的数值,D为小数点后小数位数。若要保留 X 值小数点左边的 D 位,可将 D 设为负值。 SELECT ROUND(123.456) 123 SELEC…

Mysql取整函数

Mysql取整函数 1.round 四舍五入取整 round(s,n):对s四舍五入保留n位小数,n取值可为正、负、零. 如四舍五入到整数位,则n取零. 2.ceil 向上取整 ceil(s):返回比s大的最小整数 3.floor 向下取整 floor(s):返回比s小的最大整数 案…

使用grep关键字出现次数进行计数统计

使用grep关键字出现次数进行计数统计 模糊匹配 grep -o "keyword" filename |wc -l精确匹配(以整个word 匹配) grep -wo "keyword" filename |wc -l包含关键字的行数(一行存在多个关键字,计数为1&#xff…

c语言面试笔试题及答案,C语言面试题(含答案)

1、某32位系统下, C程序void *p malloc( 100 ); sizeof (p) ? A.1 B.4 C.100 D.400 2、在一个10阶的B-树上,每个树根结点中所含的关键字数目多允许为( )个,少允许为( )个。 A.10,5 B.9,4 C.8,3 D.7,6 3、以下程序段执行后结果是() #include void main…

grep sed awk详解

1、基本正则 基本正则解释实例^以什么开头grep ‘^1’ id.txt 匹配以1开头 cat -A$以什么结尾grep ‘448$’ id.txt^$空行 这一行没有任何内容(空格也是)grep -n ‘^KaTeX parse error: Expected group after ^ at position 94: … grep -v ^̲’ id.txt…

linux命令四grep

文章目录 NAME名称SYNOPSIS概要DESCRIPTION描述OPTIONS选项Generic Program Information通用程序信息Matcher Selection匹配器的选择创建测试环境匹配正则测试只匹配字符串(包含特殊字符) Matching Control匹配控制匹配多个正则表达式从文件读取多个匹配样式匹配忽略大小写选择…

C语言基础

01 — Liunx相关命令 1.1 mv:移动,剪切命令 命令格式:mv 源文件 目标文件 作用:剪切成新文件mv 源文件 目标目录下 作用:剪切到制定目录里面去mv 源目录 目标目录 作用:剪切成新目录mv 源目录 目标目录下作用&#…

c语言三个标准流文件格式,标准C语言day02

标准C语言day02 复习: 1、常用的Linux命令 ls、cd、pwd clear touch cp mv rm cat/more/head/tail mkdir rmdir chmod find grep ifconfig ping whoami man sudo ftp telnet ssh tar 2、vim文本编辑器 vi是系统自带的文本编辑器,vim是它的增强版本。 三大…

cf1579

A. Casimir’s String Solitaire 给定一个只存在ABC的字符串&#xff0c;一次操作可以同时删除任意位置的‘A’和‘B’或‘B’和‘C’&#xff0c;问能否删完。 只需判断B的数量是否等于AC的数量。 #include<bits/stdc.h> using namespace std;#define read(a) scanf(&q…

CF 817 C

原题链接&#xff1a; Problem - C - Codeforces 题意&#xff1a; 问从 1 ~ n 有多少个数能使&#xff0c;它减去它的数字和 s。 解法&#xff1a; 可以发现&#xff0c;如果 num 满足条件&#xff0c;那么 num 1 一定也满足条件&#xff0c;所以就有单调性&#xff0c…

CF1837 A-D

A题 题目链接&#xff1a;https://codeforces.com/problemset/problem/1837/A 基本思路&#xff1a; 要求计算蚂蚱到达位置 x最少需要多少次跳跃&#xff0c;并输出蚂蚱的跳跃方案。因为每次可以向左或向右跳跃一定距离&#xff08;距离必须为整数&#xff09;&#xff0c;但是…

npm不是内部命令或外部命令

如上&#xff0c;看到npm -v 或者安装软件时&#xff0c;经常跳出的问题。npm需要加入环境变量中。 如上图片&#xff0c;新建两个文件 node_global\npm&#xff0c;并加入环境变量中。 D:nodejs\node_modules\npm路径下找到.npmrc文件&#xff0c;将其内容改为 prefixD:\node…