Git--远程操作

文章目录

  • 前言
  • 一、理解分布式版本控制系统
  • 二、远程仓库
    • 1.新建远程仓库
    • 2.克隆远程仓库
    • 3.向远程仓库推送
    • 4.拉取远程仓库
    • 5.配置Git
      • 忽略特殊文件
    • 给命令配置别名
  • 总结


前言


正文开始!!!

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

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

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

在这里插入图片描述

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

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

二、远程仓库

Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上,怎么分布呢?最早肯定只有一台机器有一个原始版本库.此后,别的机器可以"克隆"这个原始版本库,而且每台机器的版本库其实都是一样的,并没有主次之分.

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

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

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

完全可以自己搭建一台运行Git的服务器.不过现阶段我们只为了学Git搭服务器是小题大做.好在这个世界有个叫GitHub的神奇网站,从名字就可以看出,这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库.

GitHub是国外的网站,速度比较慢.所以在学习过程采用Gitee来托管代码.

下面我们从零开始,使用一个Gitee的远程仓库.

1.新建远程仓库

新建远程项目仓库 :
在这里插入图片描述

填写基本信息 :

在这里插入图片描述

创建成功 :

在这里插入图片描述
创建成功后,我们可以对远程仓库进⾏⼀个基本的设置:开源or私有

在这里插入图片描述
在这里插入图片描述
从创建好的远程仓库我们便能看到,之前在本地学习过的分支,也存在于远程仓库中并被管理起来了.刚创建的仓库有且只有一个默认的master分支.
在这里插入图片描述

在这里插入图片描述

2.克隆远程仓库

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

在这里插入图片描述
SSH协议和HTTPS协议是Git最常使用的两种数据传输协议.SSH协议使用了公钥加密和公钥登录机制,体现了其实用性和安全性,使用此协议需要将我们的公钥放在服务器上,由Git服务器进行管理.使用HTTPS方式时,没有要求,可以直接克隆下来.

  • 使用HTTPS方式 :

在这里插入图片描述

  • 使用SSH方式 :

在这里插入图片描述
使用SSH方式克隆仓库,由于我们没有添加公钥到远端仓库中,服务器拒绝了我们的clone链接.需要我们设置一下 :

第一步 : 创建SSH key.在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步.如果没有,需要创建SSH key :

在这里插入图片描述
注意要输入自己的邮箱,然后一路回车,使用默认值即可.
在这里插入图片描述

顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人.
在这里插入图片描述
第二步 添加自己的公钥到远端的仓库.

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
点击确认后,需要对你进⾏认证,输⼊你的账号密码即可。⾄此,我们的准备⼯作全部做完,欢快的
clone吧。

在这里插入图片描述
done,成功!如果有多个人协作开发,GitHub/Gitee允许添加多个公钥,只要把每个人的电脑上的key都添加到GitHub/Gitee,就可以在每台电脑上往GitHub/Gitee上提交推送了.

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

在这里插入图片描述
或者可以使用git remote -v显示更详细的信息:

在这里插入图片描述

上面显示了可以抓取和推送的origin的地址.如果没有推送权限,就看不到push的地址.推送是什么呢?请看下面!

3.向远程仓库推送

在这里插入图片描述
本地已经clone成功远程仓库后,我们便可以向仓库中提交内容,例如新增一个file.txt文件 :
在这里插入图片描述
提交时要注意,如果我们之前设置过全局的name和e-mail,这两项配置需要和gitee上配置的用户名和邮箱一致,否则会出错.或者从来没有设置过全局的name和e-mail,那么我们第一次提交时也会报错.这就需要我们重新配置一下,同样要注意需要和gitee上配置的用户名和邮箱一致.如何配置之前已经讲过,在这里就不再赘述了.

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

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

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

在这里插入图片描述
推送成功!这里由于我们使用的是SSH协议,是不用每一次推送都输入密码的,方便了我们的推送操作.如果你使用的是HTTPS协议,有个麻烦的地方就是每次推送都必须输入口令.

在这里插入图片描述

代码已经被推送至远端了 :
在这里插入图片描述

4.拉取远程仓库

在Gitee上点击file.txt文件并在线修改它 :
在这里插入图片描述
修改内容:
在这里插入图片描述
此时远程仓库是要领先于本地仓库一个版本,为了使本地仓库保持最新的版本,我们需要拉取下远端代码,并合并到本地.Git提供了git pull命令,该命令用于从远程获取代码并合并本地的版本.格式如下 :

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

使用一下 :
在这里插入图片描述
我们发现,拉取成功了!

在这里插入图片描述

5.配置Git

忽略特殊文件

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

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

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

在这里插入图片描述
.gitignore文件中也可以指定某个确定的文件.

最后一步就是把.gitignore也提交到远端,就完成了 :

在这里插入图片描述
接下来我们就来验证一下.gitignore文件的功能,在工作区新增两个文件a.sob.ini :

在这里插入图片描述
检验.gitignore的标准就是git status命令是不是说working tree clean.我们发现Git并没有提示在工作区中有文件新增,果然.gitignore生效了!

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

git add -f [文件名]

或者你发现,可能是.gitignore写得有问题,需要找出来到底那个规则写错了,比如说a.so文件是要被添加的,可以用git check-ignore -v a.so命令检查 :
在这里插入图片描述
Git会告诉我们,.gitignore的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则.

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

.*

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

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

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

给命令配置别名

在我们使用Git期间,有些命令敲的时候着实让人太头疼了,幸运的是git支持对命令行进行简化!

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

git config --global alias.st status

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

接下来我们看看效果 :

在这里插入图片描述
再来配置一个log --pretty=oneline -abbrev-commit,显示日志信息

在这里插入图片描述
不过,我个⼈还是不推荐⼤家现在去使⽤它,等大家对命令很熟悉了,再去简化⾃⼰的⼯作吧,尽快适应 Git。


总结

(本章完!)

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

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

相关文章

数据库-SQL-DML语句

文章目录 DML语句添加数据修改数据DML-删除数据 DML语句 添加数据 表的结构 修改数据 DML-删除数据 DML-总结&#xff1a;

【Redis】2、Redis 的 Java 客户端(Jedis 和 SpringDataRedis)

目录 零、Redis 的 Java 客户端有哪些&#xff1f;二、Jedis 客户端(1) 引依赖(2) 连接 Redis 服务并测试(3) Redis 连接池 三、SpringDataRedis 介绍四、SpringBoot 中集成 SpringDataRedis(1) 引入依赖(2) 配置文件中书写相关配置(3) RedisTemplate 的默认序列化方式(4) 自定…

Qt保存代码

补全保存代码 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//字体按钮对应的槽函数 void Widget::on_fontBtn_clicked() {…

TCP 协议报文

TCP 提供面向连接的通信传输&#xff0c;面向连接是指在传送数据之前必须先建立连接&#xff0c;数据传送完成后要释放连接。无论哪一方向另一方发送数据之前&#xff0c;都必须先在双方之间建立一条连接。在TCP/IP协议中&#xff0c;TCP协议提供可靠的连接服务&#xff0c;连接…

Adobe中修改注释签名

控制面板-> 系统和安全-> 管理工具-> 计算机管理-> 打开“计算机管理”对话框-> 在左边栏的系统工具下选择本地用户和组-> 点击“用户”->选择要改的用户名->右键重命名 打开Adobe Acrobat->点击"编辑"->首选项->注释 ->把 “登…

交叉导轨的结构与特长

在交叉导轨中&#xff0c;精密滚柱互相直交地组合在一起的滚柱保持架与设置在专用轨道上的90V形沟槽滚动面组合起来使用。通过将2列滚子导轨平行地装配&#xff0c;使导轨系统能承受4个方向的负荷。而且&#xff0c;因能向交叉滚子导轨施加预压&#xff0c;从而能获得无间隙且高…

七、VPN技术之密码学基础(密码体制、对称加密算法、非对称加密算法)

更多网络基础内容可见: 网络基础学习目录及各章节指引 7.1 密码学基础 7.1.1 基础概念 密码:对文本进行编码,使偷窥者无法识别的算法。是一套编码方案,一种特殊的报文编码和相应的解码方式的结合体。 加密之前的原始报文称为明文,使用密码之后的报文叫密文。一个简单的例…

23.07.09

完善对话框功能 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);// this->setWindowOpacity(0); } Widget::~Widget() {delete ui; } //字体对应的槽 voi…

【Git原理与使用】-- 标签管理

目录 理解标签 创建标签 操作标签 删除 推送 理解标签 标签 tag &#xff0c;可以简单的理解为是对某次 commit 的⼀个标识&#xff0c;相当于起了⼀个别名。例如&#xff1a;在项目发布某个版本的时候&#xff0c;针对最后⼀次 commit 起⼀个 v1.0 这样的标签来标识里程碑…

LeetCode-每日一题【2095.删除链表的中间节点】

题目 给你一个链表的头节点 head 。删除 链表的 中间节点 &#xff0c;并返回修改后的链表的头节点 head 。 长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点&#xff08;下标从 0 开始&#xff09;&#xff0c;其中 ⌊x⌋ 表示小于或等于 x 的最大整数。 对于 n 1、…

【C++】-vector的具体使用(迭代器失效问题)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

ipa上架App Store【uniapp-ios】

前置条件&#xff1a;已获取到.mobileprovision描述文件、.p12证书并打包生成ipa包 &#xff08;如果还没获取证书、描述文件等可以去看我前两篇博客&#xff1a;uniapp-ios打包步骤 、uniapp-ios打包安装测试。一篇是已经付费了即已经注册了Apple Developer Program&#xf…