【Git】远程操作 -- 详解

news2024/11/27 17:52:54

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

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

上面这段话是什么意思呢?

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

分布式版本控制系统的安全性要高很多,因为每个人的电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,再从其他人那里复制一个就可以了。

在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你俩不在一个局域网内,两台电脑互相访问不了,也可能今天同事的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当 “中央服务器” 的电脑,但这个服务器的作用仅仅是用来方便 “交换” 大家的修改,没有它大家也一样干活,只是交换修改不方便而已。有了这个 “中央服务器” 的电脑,这样就不怕本地出现什么故障了(比如运气差,硬盘坏了,上面的所有东西全部丢失,包括 git 的所有内容)。


二、远程仓库

Git 分布式版本控制系统同一个 Git 仓库,可以分布到不同的机器上

怎么分布呢?最早肯定只有一台机器有⼀个原始版本库,然后别的机器可以 “克隆” 这个原始版本库,而且每台机器的版本库其实都是一样的,并没有主次之分。那是不是至少需要两台机器才能玩远程库呢?其实一台电脑上也是可以克隆多个版本库的,只要不在同⼀个目录下。不过,现实生活中是不会有人在一台电脑上搞几个远程库玩,因为一台电脑上搞几个远程库完全没有意义,而且硬盘挂了会导致所有库都挂掉。实际情况往往是这样,找一台电脑充当服务器的角色,每天 24 小时开机,其他每个人都从这个 “服务器” 仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。那就完全可以自己搭建⼀台运行 Git 的服务器,不过现阶段为了学 Git 先搭个服务器绝对是小题大做。

好在这个世界上有个叫 GitHub 的神奇的网站,从名字就可以看出,这个网站就是提供 Git 仓库托管服务的。所以,只要注册一个 GitHub 账号,就可以免费获得 Git 远程仓库。GitHub: Let’s build from here · GitHub是国外的网站,速度比较慢,可以采用Gitee - 基于 Git 的代码托管和研发协作平台来托管代码。


三、新建远程仓库

1、新建远程项目仓库


2、填写基本信息


3、创建成功

创建成功后,可以对远程仓库进行一个基本的设置:开源 / 私有。

从创建好的远程仓库中便能看到,之前在本地学习过的分支,也存在于远程仓库中并被管理起来了。刚创建的仓库有且只有一个默认的 master 分支:


四、克隆远程仓库

克隆/下载远端仓库到本地,需要使用 git clone 命令,后面跟上我们的远端仓库的链接,远端仓库的链接可以从仓库中找到:选择 “克隆/下载” 获取远程仓库链接:

SSH 协议HTTPS 协议是 Git 最常使用的两种数据传输协议。

  • SSH 协议使用了公钥加密和公钥登陆机制,体现了其实用性和安全性,使用此协议需要将我们的公钥放上服务器,由 Git 服务器进行管理。
  • 使用 HTTPS 方式时,没有要求,可以直接克隆下来。

1、使用 HTTPS 方式


2、使用 SSH 方式

使用 SSH 方式克隆仓库,由于我们没有添加公钥到远端库中,服务器拒绝了我们的 clone 链接。需要设置一下:

(1)创建 SSH Key

在用户主目录下看看有没有 .ssh 目录,如果有,就再看看这个目录下有没有 id_rsa 和 id_rsa.pub 这两个文件,如果已经有了,可以直接跳到下⼀步。如果没有,需要创建 SSH Key

注意要输入自己的邮箱,然后一直回车,使用默认值即可:

顺利的话可以在用户主目录里找到 .ssh 目录,里面有 id_rsa id_rsa.pub 两个文件,这两个就是 SSH Key 的秘钥对,id_rsa 是私钥,不能泄露出去,id_rsa.pub 是公钥,可以放心地告诉任何人。


(2)添加自己的公钥到远端仓库

点击 ssh 公钥选项进行设置:

点击确认后,需要对你进行认证,输入账号密码即可。至此,准备工作全部做完。


当我们从远程仓库克隆后,实际上 Git 会自动把本地的 master 分支和远程的 master 分支对应起来,并且远程仓库的默认名称是 origin 。在本地我们可以使用 git remote 命令,来查看远程库的信息,如:

或者使用命令:git remote -v 显示更详细的信息:

上面显示了可以抓取和推送的 origin 的地址。如果没有推送权限,就看不到 push 的地址。


五、向远程仓库推送

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

  • 新建文件

  • 提交文件

提交时要注意,如果之前设置过全局的 name 和 e-mail,这两项配置需要和 gitee 上配置的用户名和邮箱一致,否则会出错。如果从来没有设置过全局的 name 和 e-mail,那么第一次提交时也会报错。这就需要我们重新配置下了,同样要注意需要和 gitee 上配置的用户名和邮箱一致。

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

git push <远程主机名> <本地分⽀名>:<远程分⽀名>

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

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

推送成功。

注意:这里由于使用的是 SSH 协议,所以是不需要每一次推送都输入密码的,方便了推送操 作。如果使用的是 HTTPS 协议,那么每次推送都必须输入口令。

接下来,看看码云远端:

代码已经被推送至远端了:


六、拉取远程仓库

在 gitee 上点击 file.txt 文件并在线修改它:

修改内容:

此时,远程仓库是要领先于本地仓库一个版本,为了使本地仓库保持最新的版本,我们需要拉取下远端代码,并合并到本地。Git 提供了 git pull 命令,该命令用于从远程获取代码并合并本地的版本,格式如下:

git pull <远程主机名> <远程分⽀名>:<本地分⽀名>

# 如果远程分⽀是与当前分⽀合并,则冒号后⾯的部分可以省略。
git pull <远程主机名> <远程分⽀名>
  • 拉取远程分支,并与当前分支进行合并

拉取成功了。


七、配置 Git

1、忽略特殊文件

在日常开发中,我们有些文件不想或者不应该提交到远端,比如保存了数据库密码的配置文件,那怎么让 Git 知道呢?

在 Git 工作区的根目录下创建一个特殊的 .gitignore ⽂件,然后把要忽略的文件名填进去,Git 就会自动忽略这些文件了。

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

如果当时没有选择这个选择,在工作区创建一个也是可以的。无论哪种方式,最终都可以得到一个完整的 .gitignore 文件,例如我们想忽略以 .so .ini 结尾所有文件,.gitignore 的内容如下:

# 省略选择模本的内容
...

# My configurations:
*.ini
*.so

在工作区新增一个文件 a.so:

检验 .gitignore 的标准就是 git status 命令是不是说 working tree clean 。发现 Git 并没有提示在工作区中有文件新增,果然 .gitignore 生效了。但有些时候就是想添加一个文件到 Git,但由于这个文件被 .gitignore 忽略了,根本添加不了,那么可以用 -f 强制添加:

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

由此得知,.gitignore 的第 3 行规则忽略了该文件,于是就可以知道应该修订哪个规则了。

可以发现 .* 这个规则会把 c.so 排除了。虽然可以用 git add -f 强制添加进去,但最好还是不要破坏 .gitignore 规则,这个时候可以添加一条例外规则:

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


2、给命令配置别名

在我们使用 Git 期间,有些命令太长了,还好 git 支持对命令进行简化

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

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

再来配置⼀个 git log --pretty=oneline --abbrev-commit,让其显示简短的 commit id:

不过,还是不推荐在学习阶段去使用他,可以在工作时再去做简化,提高工作效率。

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

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

相关文章

模型 SCAMPER创新法则

说明&#xff1a;系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。激发创新的七步思维法。 1 SCAMPER创新法则的应用 1.1 SCAMPER应用之改进自行车设计 一家自行车制造商希望改进其自行车设计&#xff0c;以吸引更多的消费者并提高市场份额。他们决…

【小白专用24.6.8】C# 异步任务Task和异步方法async/await详解

一、什么是异步 同步和异步主要用于修饰方法。当一个方法被调用时&#xff0c;调用者需要等待该方法执行完毕并返回才能继续执行&#xff0c;我们称这个方法是同步方法&#xff1b;当一个方法被调用时立即返回&#xff0c;并获取一个线程执行该方法内部的业务&#xff0c;调用…

最值,反转数组——跟之前的差不多

文章目录 数组最值感悟改进 反转数组问题 代码改进 数组最值 package com.zhang; /*求数组最大最小值*/ public class test_arr1 {public static void main(String[] args) {int[] arr {10,66,42,8,999,1};max(arr);min(arr);}public static int max(int[] arr){int max arr…

【云原生_K8S系列】Kubernetes 控制器之 Deployment

在 Kubernetes 中&#xff0c;Deployment 是一种高级控制器&#xff0c;负责管理应用的部署和生命周期。它提供了一种声明性的方式来定义应用的期望状态&#xff0c;并确保实际状态与期望状态保持一致。Deployment 可以自动处理应用的滚动更新、扩展和回滚等任务&#xff0c;是…

GPU风扇不旋转:为什么会发生这种情况以及如何修复

GPU在处理数百万像素时往往会发热,因此冷却风扇静音可能会令人担忧,这是可以理解的!如果你注意到你的GPU风扇没有旋转,下面是如何评估是否存在真正的问题,以及如何解决问题。 风扇停止旋转可能是一个功能,而不是一个Bug 如果GPU没有用于密集任务或没有达到高温,则可以…

Java 环境配置 -- Java 语言的安装、配置、编译与运行

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 002 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…

vs - vs2015编译gtest-v1.12.1

文章目录 vs - vs2015编译gtest-v1.12.1概述点评笔记将工程迁出到本地后&#xff0c;如果已经编译过工程&#xff0c;将工程Revert, Clean up 干净。编译用的CMake, 优先用VS2019自带的打开VS2015X64本地命令行编译gtest工程测试安装自己写个测试工程&#xff0c;看看编译出来的…

《精通ChatGPT:从入门到大师的Prompt指南》第10章:案例分析

第10章&#xff1a;案例分析 10.1 优秀Prompt案例解析 在深入探讨如何精通ChatGPT的使用之前&#xff0c;理解并分析一些优秀的Prompt案例是至关重要的。这不仅有助于更好地掌握Prompt的构建技巧&#xff0c;还能提高与AI交互的效果。在这一节中&#xff0c;我们将详细解析一…

STM32F103C8T6 HAL库 printf重定向 USART1 DMA方式发送数据

前言&#xff1a; 在上一篇文章里&#xff0c;我采用printf重定向为usart1&#xff0c;但是这样发送&#xff0c;对于MPU的负载比较大&#xff0c;所以本篇文章采用DMA方式&#xff0c;解放MPU资源&#xff0c;去做其他的事情&#xff0c;这里仅做为自己的记录。 正文开始&…

LDA初步了解

LDA简析 最明显的特征是能够将若干文档自动编码分类为一定数量的主题&#xff08;注意&#xff1a;主题的数量需要人为指定&#xff09;。设定好主题数量之后&#xff0c;运行LDA模型就会得到每个主题下边词语的发布概率以及文档对应的主题概率。 LDA原理 LDA的工作原理 可把…

【刷题篇】分治-归并排序

文章目录 1、排序数组2、交易逆序对的总数3、计算右侧小于当前元素的个数4、翻转对 1、排序数组 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 class Solution { public:vector<int> tmp;void mergeSort(vector<int>& nums,int left,int right){…

Web学习_sqli-labs_1~10关

less1-GET-Error based - Single quotes - String &#xff08;基于错误的GET单引号字符型注入&#xff09; 我每次操作都会在Hackbar中&#xff0c;代码都在Hackbar框中&#xff0c;可放大看 有题目知道了是字符型注入&#xff0c;我们先判断表格有几列&#xff0c;可以发现…

详细分析Mysql临时变量的基本知识(附Demo)

目录 前言1. 用户变量2. 会话变量 前言 临时变量主要分为用户变量和会话变量 1. 用户变量 用户变量是特定于会话的&#xff0c;在单个会话内可以在多个语句中共享 以 符号开头在 SQL 语句中使用 SET 语句或直接在查询中赋值 声明和赋值 SET var_name value; -- 或者 SE…

如何在恢复出厂设置后从 Android 恢复照片

在某些情况下&#xff0c;您可能会考虑将 Android 设备恢复出厂设置。需要注意的是&#xff0c;恢复出厂设置后&#xff0c;所有设置、用户数据甚至应用程序数据都将被清除。因此&#xff0c;如果您将 Android 设备恢复出厂设置&#xff0c;甚至在里面留下了一些珍贵的照片&…

宝塔面板和 LNMP 环境下反代 HFish 蜜罐平台的正确方法

最近明月在热心站长好友的支持下搭建了安全、简单、有效并永久免费的蜜罐平台 HFish,因为 HFish 默认是以 https://IP:端口 的 Web 链接形式提供访问的,这会暴露蜜罐平台的真实服务器 IP 不说,还非常不便于快速的访问(反正明月是记不住 IP 的),所以就需要给部署好的 HFis…

扫地机器人:卷价格,不如卷技术

扫地机器人内卷的终点是技术和价值&#xff0c;价格只是附属品。 一路上涨的价格&#xff0c;一路下跌的销量 从价格飙升&#xff0c;到重新卷回价格&#xff0c;尴尬的背后是扫地机器人在骨感现实下的无奈抉择。 根据数据显示&#xff0c;2020中国扫地机器人线上市场零售均价…

经典文献阅读之--P2O-Calib(利用点对空间遮挡关系的相机-激光雷达标定)

Tip: 如果你在进行深度学习、自动驾驶、模型推理、微调或AI绘画出图等任务&#xff0c;并且需要GPU资源&#xff0c;可以考虑使用UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU&#xff0c;按时收费每卡2.6元&#xff0c;月卡只需要1.7元每小时&…

C#操作MySQL从入门到精通(19)——插入数据

前言: 谈到数据库,大家最容易脱口而出的就是增删改查,在本篇文章之前一直都是说的各种查询,本文就是说的增删改查中的增,所谓增也就是增加数据的意思,插入数据就是增加数据。 本文测试使用的数据库如下: 1、插入完整行 所谓插入完整行就是一行所有列的数据都是自己插…

hustoj二开

目录 1、路径问题2、开发问题&#xff08;1&#xff09;、mysql&#xff08;2&#xff09;、php 啊啊啊啊&#xff01;&#xff01;&#xff01;难崩&#xff1a; 路径问题搞了好长时间才明白了该项目的路径如何设置的 >_< ,&#xff0c;本文就路径问题&#xff0c;前端页…

Redis 单线程问题 BigKey问题

前言 简单的redis基础类型以及常用操作我们都也已经介绍过了 现在今天我们来谈谈redis对于单线程是需要怎么理解的 以及redis假设遇见大key我们需要怎么去查询和删除呢??? redis单线程 假设有个人现在问你一个问题:redis是单线程的还是多线程的 这个问题本身就不严谨 就像问…