Git的原理和使用(四)

目录

远程操作

理解分布式版本控制系统

远程仓库

新建远程仓库

克隆远程仓库

向远程仓库推送

拉取远程仓库

配置Git

忽略特殊文件

为命令配置别名

标签管理

理解标签

创建标签

操作标签


远程操作

理解分布式版本控制系统

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

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

3、在实际使用分布式版本控制系统时,其实很少在两个人的电脑上推送版本库的修改,因为可能你俩不在同一局域网内,两台电脑互相访问不了,也可能今天你的同时病了,他的电脑根本没开机,因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅说同来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已,而且有了它就不怕本地出什么故障了(硬盘损害,上面的内容丢失之类的)

远程仓库

新建远程仓库

网址:Gitee - 基于 Git 的代码托管和研发协作平台

填写基本信息,创建成功: 

 在管理中找到基本信息,将远程仓库选择为开源:

刚创建的仓库有且只有一个默认master分支:

克隆远程仓库

指令:git clone + 远程仓库链接

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

  • HTTP方式:

  • SSH方式:
  • 用ssh-keygen -t  rsa -C “邮箱”指令将id_rsa.pub文件中的那内容添加到远程仓库

        如果由多人协作开发,Github/Gitee允许添加多个公钥,只要把每个人的电脑上的key都添加到Github/Gitee,就可以在每台电脑上往Github/Gitee上提交推送了。当我们从远程仓库克隆后,实际上Git会自动把本地的master分支和远程的master分支对应起来,远程仓库的默认名称是origin,在本地我们可以使用git remote指令查看远程仓库的信息,-v参数可显示更详细的信息:

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

向远程仓库推送

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

name和email需要和gitee上配置的一致,否则报错,在重置名字时加上--global参数

至此我们已经将内容提交至本地仓库中,接着用git push指令将本地仓库的内容推送到远程仓库,该命令用于将本地的分支版本上传到远程并合并,命令格式如下:

  • git push <远程主机名> <本地分支名>:<远程分支名>
  • git push <远程主机名> <本地分支名>(本地分支名与远程分支名一致可省略冒号)

使用SSH方式推送时不用输入账号密码,使用HTTP方式时需要:

推送成功

拉取远程仓库

在gitee上点击README.md文件并在线修改它:

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

  • git pull <远程主机名> <远程分支名>:<本地分支名>
  • git pull <远程主机名> <远程分支名>(远程分支是与当前分支合并,则冒号后部分可省略)

配置Git

忽略特殊文件

在日常开发中,我们有哪些文件不想或者不应该提交到远端仓库,比如保存了数据库密码的配置文件,那么该如何让Git知道呢?在Git工作区根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件了(.gitignore文件gitee在创建仓库时就可以为我们生成,不过需要我们主动勾选一下)

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

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


#MY configurations:
*.ini //隐藏以.ini和.so结尾的文件
*.so

在.gitignore文件中也可以指定某个确定的文件,最后将该文件提交到远程仓库即可:

        检验.gitignore的标准就是git status命令是不是说working tree clean,如果是则.gitignore文件生效,但是有些时候如果再想添加一个文件到Git,但由于该文件被.gitignore忽略了,根本添加不进去,就可以用-f强制添加:

  • git add -f 文件名

或者是.gitignore写的有问题,需要找出来哪个规则写错了,比如a.so文件是要被添加的而不是忽略的,可以用git check-ignore命令检查:

Git会告诉我们.gitignore的第六行规则忽略了该文件,于是我们就知道应该修订哪个规则,还有些时候当我们编写了规则排除了部分文件时:

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

.*这个规则把.gitignore也排除了,虽然可以用git add -f指令强制添加进去 ,但是最好还是别破坏.gitignore规则,这时可以添加一条例外规则,将指定文件排除在.gitignore规则外的写法就是!+文件名,所以只需把例外文件添加进去即可:

#排除所有.开头的隐藏文件;
.*

#不排除.gitignore
!.gitignore

为命令配置别名

基本概念:有些Git命令太长,为此git支持对命令进行简化

简化指令:git config [选项] alias.别名 原

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

标签管理

理解标签

        标签tag可以简单理解为是对某次commit的一个表示,相当于起了一个别名,例如在项目发布某个版本时,针对最后一次commit起一个v1.0这样的标签来标识里程碑的意义。相较于难以记住的commit id,tag可以很好的解决这一问题,因为tag一定要给一个让然容易记住且有意义的名字,当我们需要回退到某个重要版本时,直接使用标签就能很快定位到

创建标签

切换到需要打标签的分支上并为该分支打标签,git log可以查看所有标签:

        默认标签是打在最新提交的commit上的,在指定的commit上打标签可以通过找到历史提交的commit id然后打上标签即可:

注意,标签不是按时间顺序列出,而是按字母排序的,可以用git show [tagname]查看标签信息:

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

git tag -a [name] -m "xxx" [commit_id]

打完标签后可以使用tree .git指令查看本地库的变化: 

操作标签

如果标签打错了,也可以用git tag -d [标签] 指令删除:

因为创建标签都只存储在本地,不会自动推送到远程,所以打错的标签可以在本地安全删除,如果要推送某个标签到远程,使用git push origin <tagname>指令即可:

此时,查看远程仓库,看到标签已经被更新:

如果本地标签很多,可以用git push origin --tags指令一次性全部推送到远端:

如果标签已经推送到远端,要删除远程标签就麻烦一点,要先从本地删除,然后再从远程删除,删除命令也是push,但是格式不一样:

删除成功:

~over~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

批量重命名文件名,批量管理文件,复制后轻松删除原文件

在现代工作中&#xff0c;我们经常需要处理大量的文件&#xff0c;无论是工作文档、图片还是视频资料。对于很多人来说&#xff0c;文件管理是一项繁琐且耗时的任务。不过&#xff0c;现在有一种高效的文件管理方法&#xff0c;可以帮助你轻松复制文件后删除原文件夹&#xff0…

2024.03.24 exam

2024.03.24 exam 据说是事业单位考试例题&#xff0c;娱乐一下脑子

zabbix安装及使用(错误及解决方案)

安装zabbix 常见错误&#xff1a; Zabbix下载错误 6.0与5.0版本冲突 解决方法 yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-get --skip-broken zabbix6.0-web 自己有数据库&#xff0c;使用以下命令 pid找不到 /var/log/zabbix/zabbix_server.log 错误&a…

Docker Command

小试牛刀 # 查看docker版本 docker -v docker --version # 查看帮助 docker --help # 永远的Hello World docker run hello-world镜像操作 查看本地已有的镜像 docker images -a :列出本地所有的镜像&#xff08;含中间映像层&#xff09; -q :只显示镜像ID --digests :显示…

尝试Docker Dev Environments

无法从本地目录创建容器环境 创建的容器环境无法在VS Code打开 从官方仓库打开 结果vscode报错。fine&#xff0c;告辞。老老实实用本地环境开发。

为什么LLM都在卷上下文长度?不是其他卷不起,而是上下文更有性价比!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

深度学习pytorch——2D函数优化实例(持续更新)

课程&#xff1a;课时46 优化问题实战_哔哩哔哩_bilibili 这就是我们今天要求的2D函数&#xff1a; 下图是使用python绘制出来的图像&#xff1a; 但是可以看出有4个最小值&#xff0c;但是还是不够直观&#xff0c;还是看课程里面给的比较好&#xff0c;蓝色是最低点位置&am…

哲学♂家带你用动态内存函数实现二维数组

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、思路分析 二、实现 总结 前言 最近在做题的时候发现一个比较考验技术的问题&#xff0c;用内存函数模拟实现二维数组&#xff0c;接下来给大家演示一下我的做…

20240318-2-推荐算法Graph_Embedding

Graph Embedding 在许多推荐场景下&#xff0c;可以用网络结构数据来刻画对象&#xff08;用户、商品等&#xff09;之间的关系。例如&#xff1a;可以将用户和商品作为网络中的结点&#xff0c;用户和商品之间的边代表购买关系。 Graph Embedding 是一种将网络中对象之间的关…

python项目格式代码风格

Visual Studio Code 选择使用 black 作为代码格式化工具&#xff0c;保证提交代码风格的统一 1. Install black pip install black2. Install black and isort extension for vscode: 3. 设定black及isort的格式化配置 3.1. ctrl , 打开配置面板 3.2. 在弹出的json配置中添…

域名防红源码-再次启用已经红掉拦截的域名-提示跳转浏览器打开

比如说你的域名已经红掉了被拦截了&#xff0c;还想继续在使用&#xff0c;那么你用这个系统后呢&#xff0c;他就会提示跳转浏览器打开。以此达到再次启用的效果。 假如你的域名是A&#xff0c;已经红掉的&#xff1b;使用此方法新加一个域名B&#xff1b;之后你每次发域名B或…

【理解机器学习算法】之Clustering算法(K-Means)

实现 K-means 聚类从零开始涉及几个关键步骤&#xff1a;初始化质心、将点分配给最近的质心、根据分配更新质心&#xff0c;以及重复这个过程直到收敛。这里是一个基本的 Python 实现&#xff1a; K-means 算法步骤&#xff1a; 初始化质心&#xff1a;从数据点中随机选择 k …

docker推拉时的数据交换详解

前言 docker用了这么久了, 有没有想过, 在执行docker push 和 docker pull命令的时候, 数据是如何传递的呢? 换句话说, 如果要实现一个镜像仓库, 针对推拉的服务, 如何实现接口呢? 根据OCI 分发规范文档 的描述, 已经对整个推拉过程中要调用的接口有描述了. 但是, 纸上学来…

何为布控球?布控球的分类对比

主要的分类有&#xff1a; 根据内部的主控板卡的系统分类&#xff0c;典型的是基于海思芯片的嵌入式LINUX系统的&#xff0c;一般出国标GB28181&#xff0c;另外一种是剑走偏锋的安卓系统的&#xff0c;需要把球机的输出YUV转换为UVC接入安卓主板&#xff0c;作为外接USB摄像头…

Java进阶—GC回收(垃圾回收)

1. 什么是垃圾回收 垃圾回收(Garbage Collection&#xff0c;GC)是Java虚拟机(JVM)的一项重要功能&#xff0c;用于自动管理程序中不再使用的内存。在Java中&#xff0c;程序员不需要手动释放内存&#xff0c;因为GC会自动检测并回收不再使用的对象&#xff0c;从而减少内存泄…

param参数

param参数介绍及使用 在 Web 开发中&#xff0c;param 是指路由中的参数&#xff0c;用于捕获 URL 中的动态部分&#xff0c;并将其作为参数传递给路由处理函数。当定义包含参数的路由时&#xff0c;可以使用 param 方法来捕获 URL 中的动态部分&#xff0c;并将其传递给路由处…

用户多部门切换部门,MySQL根据多个部门id递归获取所有上级(祖级)、获取部门的全路径(全结构名称)

背景 之前做过的项目&#xff0c;都是一个用户就一个部门的&#xff0c;现在碰到个一个用户在多个部门的需求&#xff0c;而且需要可以切换不同部门查看不同数据。 就比如说一个大公司下面有多个子公司&#xff0c;每个子公司有好多部门、子部门等等&#xff0c;然后有部分用…

chrome浏览器插件extension开发中content内容脚本和background脚本通讯

有时候我们想监听页面中的数据变化&#xff0c;然后将监听到的数据传递给background脚本处理&#xff0c;比如根据不同的数据&#xff0c;来处理不同的业务逻辑&#xff0c;存储到服务器&#xff1f;或者控制浏览器显示效果&#xff1f;都可以&#xff0c;问题的重点是怎么让co…

口袋条件下的Lead优化几何深度模型-Delete 评测

Delete (Deep lead optimization enveloped in protein pocket) 是一个基于口袋的&#xff0c;3D分子生成的&#xff0c;应用于lead优化过程中侧链修饰、骨架跃迁&#xff0c;linker设计&#xff0c;片段生长的几何深度学习模型。 一、模型介绍 Delete 模型是浙江大学侯廷军老…

第一篇:概述、 目录、适用范围及术语 --- IAB/MRC《增强现实(AR)广告(效果)测量指南1.0 》

第一篇&#xff1a;概述、目录、适用范围及术语 - IAB与MRC及《增强现实广告效果测量指南1.0》 --- 我为什么要翻译美国IAB科技公司系列标准 ​​​​​​​​​​​​​​ 翻译计划 第一篇概述—IAB与MRC及《增强现实广告效果测量指南》之目录、适用范围及术语第二篇广告效…