【GIt原理与使用】Git远程仓库

一、理解分布式版本控制系统

我们目前所说的所有内容(工作区,暂存区,版本库等等),都是在本地!也就是在你的笔记本或者计算机上。而我们的 Git 其实是分布式版本控制系统!什么意思呢?

可以简单理解为,我们每个人的电脑上都是⼀个完整的版本库,这样你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有⼀个完整的版本库,那多个⼈如何协作 呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

分布式版本控制系统的安全性要高很多,因为每个人电脑都有完整的版本库,某⼀个人的电脑坏掉 了不要紧,随便从其他⼈那里复制⼀个就可以了。 在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在⼀个局域网内,两台电脑互相访问不了。也可能今天你的同事病了,他的电脑压根没有开机。

因此,分布式版本控制系统通常也有⼀台充当“中央服务器”的电脑,但这个服务器的作作用仅仅是用来方便“交换”大家的修改,没有它大家也⼀样干活,只是交换修改不方便而已。有了这个“中央服务器”的电脑,这样就不怕本地出现什么故障了(比如运气差,硬盘坏了,上面的所有东西全部丢失,包括git的所有内容)

二、远程仓库

远程仓库介绍

Git 是分布式版本控制系统,同一个 Git 仓库可以分布到不同的机器上。最初,只有一台机器拥有一个原始版本库,此后,其他机器可以“克隆”这个原始版本库,而且每台机器的版本库其实都是一样的,并没有主次之分。

你可能会想,至少需要两台机器才能玩远程库不是?但是我只有一台电脑,怎么玩?

其实一台电脑上也是可以克隆多个版本库的,只要不在同一个目录下。不过,在现实生活中没有人会这么傻在一台电脑上搞几个远程库玩,因为一台电脑上搞几个远程库完全没有意义,而且硬盘挂了会导致所有库都挂掉。

实际情况往往是这样:找一台电脑充当服务器的角色,每天24小时开机,其他人从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把自己的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。

完全可以自己搭建一台运行 Git 的服务器,不过现阶段,为了学 Git 先搭个服务器绝对是小题大作。好在这个世界上有个叫 GitHub 的神奇网站,这个网站就是提供 Git 仓库托管服务的,所以,只要注册一个 GitHub 账号,就可以免费获得 Git 远程仓库。不过GitHup是国外的网站在国内访问比较慢,所以我们可以使用他的国内平替款 Gitee 。

向远程仓库推送

本地已经 clone 成功远程仓库后,我们便可以向仓库中提交内容,例如新增⼀个 file.txt 文件:

zyq@iZm5egpp4a85g2tfliaeikZ:~/git-test$ vim file.txt 
zyq@iZm5egpp4a85g2tfliaeikZ:~/git-test$ cat file.txt 
hello
zyq@iZm5egpp4a85g2tfliaeikZ:~/git-test$ git add .
zyq@iZm5egpp4a85g2tfliaeikZ:~/git-test$ git commit -m"push file.txt"
[master 437c7c0] push file.txt1 file changed, 1 insertion(+)create mode 100644 file.txt

提交时要注意,如果我们之前设置过全局的 name 和 e-mail,这两项配置需要和 Gitee 上配置的用户名和邮箱一致,否则会出错。或者从来没有设置过全局的 name 和 e-mail,那么我们第一次提交时也会报错。这就需要我们重新配置,同样要注意需要和 Gitee 上配置的用户名和邮箱一致。如何配置已讲过,在这里就不再赘述。

到这里我们已经将内容提交至本地仓库中。如何将本地仓库的内容推送至远程仓库呢?需要使用 git push 命令,该命令用于将本地的分支版本上传到远程并合并。命令格式如下:

git push <远程主机名> <本地分⽀名>:<远程分⽀名> 
# 如果本地分⽀名与远程分⽀名相同,则可以省略冒号:
git push <远程主机名> <本地分⽀名> 

此时我们要将本地的 master 分支推送到 origin 主机的 master 分支,则可以:

zyq@iZm5egpp4a85g2tfliaeikZ:~/git-test$ git push origin master
Username for 'https://gitee.com': zhang-desai-c
Password for 'https://zhang-desai-c@gitee.com': 
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 2 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 293 bytes | 293.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag ed492686
To https://gitee.com/zhang-desai-c/git-test.git081906a..437c7c0  master -> master

此时远程仓库中已经出现被推送的文件了 

在远程仓库中拉取

 在 gitee 上点击 file.txt 文件并在线修改它,并提交

此时远程仓库中的文件是最新的一次提交,而我们本地仓库中的这个文件还是上一个版本,如果我们在本地仓库中对这个文件进行修改想要推送到远程仓库就会报错,因为两者不是同一个版本,所以为了让本地仓库中的代码与远程仓库中的代码版本一致,就要在本地仓库中拉取远程仓库最新的代码

git pull <远程主机名> <远程分⽀名>:<本地分⽀名> 
# 如果远程分⽀是与当前分⽀合并,则冒号后⾯的部分可以省略。
git pull <远程主机名> <远程分⽀名> 

我们拉取一下试试:

zyq@iZm5egpp4a85g2tfliaeikZ:~/git-test$ git pull origin master 
Username for 'https://gitee.com': zhang-desai-c 
Password for 'https://zhang-desai-c@gitee.com': 
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 978 bytes | 978.00 KiB/s, done.
From https://gitee.com/zhang-desai-c/git-test* branch            master     -> FETCH_HEAD437c7c0..55ca04a  master     -> origin/master
Updating 437c7c0..55ca04a
Fast-forwardfile.txt | 1 +1 file changed, 1 insertion(+)
zyq@iZm5egpp4a85g2tfliaeikZ:~/git-test$ cat file.txt 
hello
aaaa
忽略特殊文件

在日常开发中,我们有些文件不想或者不应该提交到远端,比如保存了数据库密码的配置文件。那么怎么让 Git 知道呢?在 Git 工作区的根目录下创建一个特殊的 .gitignore 文件,然后把要忽略的文件名填进去,Git 就会自动忽略这些文件了。

不需要从头写 .gitignore 文件,Gitee 在创建仓库时就可以为我们生成,不过需要我们主动勾选一下。

如果当时没有选择这个选项,在工作区创建一个 .gitignore 文件也是可以的。无论哪种方式,最终都可以得到一个完整的 .gitignore 文件。

# 省略选择模本的内容 
...
# My configurations:
*.ini
*.so

在 .gitignore 文件中也可以指定某个确定的文件,最后⼀步就是把 .gitignore 也提交到远端,就完成好了

但有时候,你就是想添加一个文件到 Git,但由于这个文件被 .gitignore 忽略了,根本添加不了。那么可以用 -f 强制添加:

git add -f <文件路径>

或者你发现,可能是 .gitignore 写得有问题,需要找出来到底哪个规则写错了,比如说 a.so 文件 是要被添加的,可以用 git check-ignore 命令检查:

zyq@iZm5egpp4a85g2tfliaeikZ:~/git-test$ git check-ignore -v a.so
.gitignore:3:*.so a.so

Git 会告诉我们, .gitignore 的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。

还有些时候,当我们编写了规则排除了部分文件时,例如:

# 排除所有.开头的隐藏⽂件: 
.*

但是我们发现 .* 这个规则把 .gitignore 也排除了。虽然可以用 git add -f 强制添加进去, 但还是希望不要破坏 .gitignore 规则,这个时候,可以添加⼀条例外规则:

# 排除所有.开头的隐藏⽂件: 
.*
# 不排除.gitignore 
!.gitignore

把指定文件排除在 .gitignore 规则外的写法就是 ! +文件名,所以,只需把例外⽂件添加进去即 可。

三、给命令配置别名

在我们使用 Git 期间,有些命令敲的时候着实让人头疼(太长了)。幸运的是,Git 支持对命令进行简化!你可以通过设置别名来缩短常用的 Git 命令,从而提高工作效率。

举个例子,将 git status 简化为 git st ,对应的命令为:

git config --global alias.st status

--global 参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。如果不加,那只 针对当前的仓库起作用。

四、标签管理

理解标签

标签(tag)可以简单地理解为是对某次 commit 的一个标识,相当于起了一个别名。例如,在项目发布某个版本的时候,针对最后一次 commit 起一个 v1.0 这样的标签来标识里程碑的意义。

这有什么用呢?相较于难以记住的 commit id,tag 很好地解决了这个问题,因为 tag 一定要给一个让人容易记住且有意义的名字。当我们需要回退到某个重要版本时,直接使用标签就能很快定位到。

创建标签

在Git中打标签非常简单,首先,切换到需要打标签的分支上:

zyq@iZm5egpp4a85g2tfliaeikZ:~/git-test$ git branch
* master
zyq@iZm5egpp4a85g2tfliaeikZ:~/git-test$ git tag v1.0 //打标签
zyq@iZm5egpp4a85g2tfliaeikZ:~/git-test$ git tag   //查看本地仓库的分支信息
v1.0

默认情况下,标签是打在最新提交的 commit 上的。如果想要在指定的 commit 上打标签,方法是找到历史提交的 commit ID,然后在这个特定的提交上创建标签。

Git 还提供可以创建带有说明的标签,用 -a 指定标签名,-m 指定说明文字,格式为:

git tag -a [name] -m "XXX" [commit_id]
操作标签

如果标签打错了,也可以删除:

zyq@iZm5egpp4a85g2tfliaeikZ:~/git-test$ git tag v2.0
zyq@iZm5egpp4a85g2tfliaeikZ:~/git-test$ git tag -d v2.0
Deleted tag 'v2.0' (was 55ca04a)
zyq@iZm5egpp4a85g2tfliaeikZ:~/git-test$ git tag
v1.0

因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

如果要推送某个标签到远程,使用命令 :

git push origin

例如要把v1.0的标签提交到远程仓库 

zyq@iZm5egpp4a85g2tfliaeikZ:~/git-test$ git push origin v1.0 
Username for 'https://gitee.com': zhang-desai-c
Password for 'https://zhang-desai-c@gitee.com': 
Total 0 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 694fddb1
To https://gitee.com/zhang-desai-c/git-test.git* [new tag]         v1.0 -> v1.0

当然,如果你本地有很多标签,也可以⼀次性的全部推送到远端:

git push origin --tags

如果标签已经推送到远程,要删除远程标签就麻烦⼀点,先从本地删除:

zyq@iZm5egpp4a85g2tfliaeikZ:~/git-test$ git tag -d v1.0 
Deleted tag 'v1.0' (was 55ca04a)

然后,从远程删除。删除命令也是push,但是格式如下: 

git push origin :refs/tags/v1.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/66660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣-数组-88 合并两个有序数组

解析 分别维护指向两个数组的指针&#xff0c;不断往后增加指针即可&#xff0c;主要是边界&#xff0c;然后时间复杂度是。 代码 class Solution { public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {vector <int> new…

家用万兆网络实践:紧凑型家用服务器静音化改造(二)

大家好&#xff0c;这篇文章我们继续分享家里网络设备的万兆升级和静音改造经验&#xff0c;希望对有类似需求的朋友有所帮助。 写在前面 在上一篇《家用网络升级实践&#xff1a;低成本实现局部万兆&#xff08;一&#xff09;》中&#xff0c;我们留下了一些待解决的问题。…

小程序组件 —— 29 组件案例 - 字体图标的使用

这一节主要是完善公司信息区域&#xff0c;我们需要在文本之前添加一些字体图标&#xff0c;这一节我们学习如何在微信小程序中使用字体图标&#xff1b; 在项目中&#xff0c;我们使用的小图标&#xff0c;一般由公司设计师进行设计&#xff0c;设计好之后上传到阿里巴巴矢量…

RK3562编译Android13 ROOT固件教程,触觉智能开发板演示

本文介绍编译Android13 ROOT权限固件的方法&#xff0c;触觉智能RK3562开发板演示&#xff0c;搭载4核A53处理器&#xff0c;主频高达2.0GHz&#xff1b;内置独立1Tops算力NPU&#xff0c;可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。 关闭seli…

STM32-ADC模数转换

目录 1.0 逐次逼近型ADC 2.0 ADC触发 3.0 ADC时钟 4.0 转换模式 5.0 转换时间 6.0 校准 7.0 硬件电路 8.0 数据手册 9.0 程序实现 9.0.1 时钟初始化 9.0.2 GPIO结构体初始化 9.0.3 ADC结构体初始化 9.0.4 ADC转换 9.0.5 AD初始化 9.0.6 获取ADC值 9.0.7 ADC头文…

数据结构:LinkedList与链表—面试题(三)

目录 1、移除链表元素 2、反转链表 3、链表的中间结点 4、返回倒数第k个结点 5、合并两个有序链表 1、移除链表元素 习题链接https://leetcode.cn/problems/remove-linked-list-elements/description/ 描述&#xff1a;给你一个链表的头节点 head 和一个整数 val &#xff…

使用 SQL 和表格数据进行问答和 RAG(1)—数据库准备

一. 从 .sql/csv/xlsx 文件创建 sqlite 数据库。 要从.sql文件准备 SQL DB&#xff0c;这里会将创建数据库的代码放到了&#xff0c;将文件复制到data/sql目录中&#xff0c;然后在终端中的项目文件夹中执行&#xff1a; pip install sqlite3现在创建一个名为sqldb的数据库&a…

案例研究:UML用例图中的结账系统

在软件工程和系统分析中&#xff0c;统一建模语言&#xff08;UML&#xff09;用例图是一种强有力的工具&#xff0c;用于描述系统与其用户之间的交互。本文将通过一个具体的案例研究&#xff0c;详细解释UML用例图的关键概念&#xff0c;并说明其在设计结账系统中的应用。 用…

EasyExcel上传校验文件错误信息放到文件里以Base64 返回给前端

产品需求&#xff1a; 前端上传个csv 或 excel 文件&#xff0c;文件共4列&#xff0c;验证文件大小&#xff0c;类型&#xff0c;文件名长度&#xff0c;文件内容&#xff0c;如果某行某个单元格数据验证不通过&#xff0c;就把错误信息放到这行第五列&#xff0c;然后把带有…

机器学习免费使用的数据集及网站链接

机器学习领域存在许多可以免费使用的数据集&#xff0c;这些数据集来自于学习、研究、比赛等目的。 一、综合性数据集平台 1.Kaggle 网址&#xff1a;Kaggle 数据集https://www.kaggle.com/datasets Kaggle是一个数据科学竞赛和社区平台&#xff0c;提供了大量的数据集供用…

Nacos 3.0 Alpha 发布,在安全、泛用、云原生更进一步

自 2021 年发布以来&#xff0c;Nacos 2.0 在社区的支持下已走过近三年&#xff0c;期间取得了诸多成就。在高性能与易扩展性方面&#xff0c;Nacos 2.0 取得了显著进展&#xff0c;同时在易用性和安全性上也不断提升。想了解更多详细信息&#xff0c;欢迎阅读我们之前发布的回…

IP查询于访问控制保护你我安全

IP地址查询 查询方法&#xff1a; 命令行工具&#xff1a; ①在Windows系统中&#xff0c;我们可以使用命令提示符&#xff08;WINR&#xff09;查询IP地址&#xff0c;在弹窗中输入“ipconfig”命令查看本地网络适配器的IP地址等配置信息&#xff1b; ②在Linux系统中&…

解决 ssh connect to host github.com port 22 Connection timed out

一、问题描述 本地 pull/push 推送代码到 github 项目报 22 端口连接超时&#xff0c;测试连接也是 22 端口连接超时 ssh 密钥没问题、也开了 Watt Toolkit 网络是通的&#xff0c;因此可以强制将端口切换为 443 二、解决方案 1、测试连接 ssh -T gitgithub.com意味着无法通…

如何在Windows 11 WSL2 Ubuntu 环境下安装和配置perf性能分析工具?

在Windows 11 WSL2 Ubuntu 环境下完整安装和配置perf性能分析工具 一、背景二、准备工作三、获取并编译Linux内核源码四、安装和配置perf五、测试perf六、总结 一、背景 由于WSL2使用的是微软定制的内核&#xff0c;并非标准的Ubuntu内核&#xff0c;因此直接使用apt安装linux…

NOVA:AutoRegressive Video Generation Without Vector Quantization——自回归视频生成无需向量量化

这篇文章介绍了一种名为NOVA的新型自回归模型&#xff0c;用于高效的文本到图像和文本到视频生成。以下是文章的主要内容总结&#xff1a; 1. 研究背景与问题 自回归大语言模型&#xff08;LLMs&#xff09;在自然语言处理&#xff08;NLP&#xff09;中表现出色&#xff0c;但…

eNSP之家——路由器--入门实例详解

eNSP路由器配置&#xff1a;IP、DHCP与DNS详解-CSDN博客 练习1&#xff1a;两个路由器配置ip地址&#xff0c;并用ping命令测试连通性。 打开ensp&#xff0c;拉进来两个路由器AR2220,再用auto连接两个路由器。 选中两个路由器&#xff0c;右键启动&#xff0c;等待半分钟路由…

Spring 设计模式:经典设计模式

Spring 设计模式&#xff1a;经典设计模式 引言 Spring 框架广泛使用了经典设计模式。 这些模式在 Spring 内部发挥着重要作用。 通过理解这些设计模式在 Spring 中的应用&#xff0c;开发者可以更深入地掌握 Spring 框架的设计哲学和实现细节。 经典设计模式 控制反转&am…

【HarmonyOS NEXT】鸿蒙应用点9图的处理(draw9patch)

【HarmonyOS NEXT】鸿蒙应用点9图的处理&#xff08;draw9patch&#xff09; 一、前言&#xff1a; 首先在鸿蒙中是不支持安卓 .9图的图片直接使用。只有类似拉伸的处理方案&#xff0c;鸿蒙提供的Image组件有与点九图相同功能的API设置。 可以通过设置resizable属性来设置R…

STM32-笔记39-SPI-W25Q128

一、什么是SPI&#xff1f; SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且 在芯片的管脚上只占用四根线&#xff0c;节约了芯片的管脚&#xff0c;同时为…

【微服务】8、分布式事务 ( XA 和 AT )

文章目录 利用Seata解决分布式事务问题&#xff08;XA模式&#xff09;AT模式1. AT模式原理引入2. AT模式执行流程与XA模式对比3. AT模式性能优势及潜在问题4. AT模式数据一致性解决方案5. AT模式一阶段操作总结6. AT模式二阶段操作分析7. AT模式整体特点8. AT模式与XA模式对比…