git入门指南

news2024/9/28 23:28:16

文章目录

  • Git入门指南
    • 前言
      • 什么是版本控制系统(VCS)
      • 版本控制系统
    • Git
      • 1、概述
      • 2、目前比较流行的Git和SVN,区别是什么
      • 3、Git安装
      • 4、Git的工作区、暂存区、本地仓库、远程仓库
      • 5、git的分支
      • 6、git的标签
      • 7、 实际操作下git常用命令
        • 准备操作
        • git clone
        • git config
        • git branch
        • git checkout
        • git status
        • git add
        • git commit
        • git push
        • git pull
        • git log
        • git tag

Git入门指南

前言

什么是版本控制系统(VCS)

百度是这么介绍的:版本控制系统(version control system),是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

主要作用是帮助开发团队的开发人员协同工作,并存档他们工作的完整历史记录

版本控制系统有两类,一类是集中化版本控制系统(CVCS),一种是分布式版本控制系统(DVCS)

集中化版本控制系统都有一个单一的集中管理的服务器,用来保存所有文件的修订版本。协同工作的人们都通过客户端连接到这台服务器,获取最新的文件或者提交更新。但集中化的缺点就是如果中央服务器出了问题,例如宕机,那么就会出现谁也无法更新的情况,因此无法协同工作,再例如,如果磁盘故障,而备份又不够时,那么就有丢失数据的风险,最坏的情况就是丢失整个项目的记录。

所以,分布式版本控制系统诞生了,

在分布式版本控制系统中客户端不仅仅是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。所以每一次提取的操作,都是对代码仓库的完整备份,因此也就不必担心协同工作用的服务器发生故障。

版本控制系统

最开始的是本地版本控制系统特点是通过加锁将并发执行转换成顺序执行。 一次只能有一个人处理某个文件。例如RCS(Revision Control System,修订控制系统),允许多个用户开发和维护程序代码或文档。

然后出现了集中式版本控制系统(Centralized Version Control Systems,CVCS),常见的有CVSSubversion(也就是SVN),SourceSafe等。
CVS(Concurrent Versions System,并发版本控制系统),十年前最为流行的版本控制系统。然后出现了Subversion(SVN)取代了CVS。
常见的SVN客户端图形化软件有
TortoiseSVN(windows流行)
SnailSVN(macos流行)
Ankhsvn(将subversion的操作集成进了Visual Studio的SVN客户端)
Subclipse(将Subversion的操作集成进Eclipse的SVN客户端软件)
SmartSVN(收费,Mac,windows,Linux都适用)

最后目前流行的就是分布式版本控制系统。例如Git,Mercurial,BitKeeper

Git

1、概述

在 Linux 开源的初期,Linux 开源项目的代码是 linus 本人通过 linux 命令 diff 和 patch 两条命令手动完成。随着 Linux 代码越来越壮大,靠 Linus 一个人来手动合并已经不现实。

2002 年,Linus 选择了一个商业版本控制系统 BitKeeper 作为 Linux 内核的代码管理工具(BitKeeper 的开发商 BitMover 授权 linux 社区免费使用)。但是,免费使用是有很多的限制的,因此 linux 社区的大佬开始破解 BitKeeper。其中,samba 的作者 andrew 破解成功了。但是被 BitMover 公司发现,收回免费使用权。

迫不得已,Linus 选择了自己开发一个分布式版本控制工具以替代 BitKeeper。传说,Linus 闭关一个月,写出了 Git。此后,Git 成功接管了 Linux 社区的版本控制工作。

简单来说,Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件

2、目前比较流行的Git和SVN,区别是什么

1、Git是分布式的,SVN是集中式的
2、GIt把内容按元数据方式存储,而SVN是按文件(所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里)。
3、Git 分支和 SVN 分支有区别,git分支是指针指向某次提交,而svn分支是拷贝的目录;git又本地分支,而svn没有本地分支
4、Git 没有一个全局的版本号,而 SVN 有
5、Git的内容完整性要优于SVN(Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性确保在遇到磁盘故障和网络问题时降低对版本库的破坏

3、Git安装

具体可以看菜鸟教程【Git的安装】
安装git之后,右键电脑桌面,可以看到多了下面两个玩意
在这里插入图片描述
git Gui是git的图形化界面,git自带的命令行窗口
在这里插入图片描述
在这里插入图片描述

4、Git的工作区、暂存区、本地仓库、远程仓库

1、工作区workspace。电脑中存项目文件的目录。

工作区中的每一个文件可能有4种状态,这四种状态共分为两大类:

  • 未跟踪(Untracked)
    • 不被Git所管理的文件
  • 已被 Git 所管理的文件
    • 未修改(Unmodified):工作区中文件的内容和 Git 仓库中文件的内容保持一致
    • 已修改(Modified):工作区中文件的内容和 Git 仓库中文件的内容不一致
    • 已暂存(Staged):工作区中被修改的文件已被放到暂存区,准备将修改后的文件保存到Git仓库中

工作区的状态可以通过git status命令查看

2、暂存区stage或者index。一般存放在.git目录下的index文件中(目录为.git/index),所以有时把暂存区叫做索引(index)

3、本地仓库local repository。工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

工作区、暂存区和本地仓库的关系如下:
在这里插入图片描述
(1)master是git自动为我们创建的第一个分支,也叫主分支,其他分支开发完成后都要合并到master分支上。具体看第四节。

不过目前好像git把master分支重新命名为main分支了

(2)HEAD是一个指针,指向当前分支的最新提交。
(3)图中的Objects标识的区域为Git的对象库,实际位于“.git/objects”目录下,里面包含了创建的各种对象和内容。
(4)当对工作区修改的文件执行git add命令时,暂存区的目录树被更新同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中而该对象的ID被记录在暂存区的文件索引中
(5)当执行提交操作时(git commit)时暂存区的目录树写到版本库中,master分支会做相应的更新,即master指向的目录树就是提交时暂存区的目录树。
(6)当执行git reset HEAD命令时,暂存区的目录树会被重写被master分支指向的目录树所替代,但是工作区不受影响
(7)当执行git rm --cached <file>命令时,会直接从暂存区删除文件工作区则不做出改变
(8)当执行 git checkout . 或者 git checkout -- <file> 命令时,会用暂存区全部或指定的文件替换工作区的文件这个操作很危险,会清除工作区中未添加到暂存区中的改动
(9)当执行 git checkout HEAD. 或者 git checkout HEAD <file> 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。1

4、远程仓库remote repository。指的是git服务器上所对应的仓库。

在本地开发完成之后,将本地仓库的提交复制到远程仓库

5、git的分支

几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作,分支最终会和主线合并,达成一致。

有一个叫做 master 的主要分支,当你执行 git init 的时候,默认情况下 Git 就会为你创建 master 分支,主分支的作用是:用来保存和记录整个项目已完成的功能代码,因此,不允许程序员直接在 main 分支上修改代码,因为这样做的风险太高,容易导致整个项目崩溃。

由此,就出现了功能分支:功能分支指的是专门用来开发新功能的分支,它是临时从 main 主分支上分叉出来的,当新功能开发且测试完毕后,最终需要合并到 main 主分支上。

如下:
在这里插入图片描述

6、git的标签

标签是用于标记特定的点或提交的历史,通常会用来标记发布版本的名称或版本号,虽然标签有点像分支,但打上标签的提交时固定的,不能随意改动。

发布一个版本时,通常先在版本库中打一个标(tag),这样就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来

所以,标签也是版本库的一个快照

7、 实际操作下git常用命令

准备操作

注册个github账号,怎么操作可以看这【github操作指南】
创建个远程仓库,命名为gitTest,按操作指南做好之后,打开仓库复制地址仓库地址,例如https://github.com/dxf-keniula/gitTest.git

git clone

从服务器拉取代码

打开终端,输入如下命令

git clone https://github.com/dxf-keniula/gitTest.git

如果拉取太慢,可以搭个梯子,或者像这篇文章写的这么做【github拉取项目速度慢可以这么做】

git config

配置当前仓库开发者用户名和邮箱的信息,也可以用来切换用户名和邮箱

git config user.name jack
git config user.email 223456789@qq.com

每次提交代码的时候都会生成一条提交记录,其中会包含当前仓库配置的用户名和邮箱。

git branch

创建、重命名、查看、删除项目分支,通过git做项目开发时,一般都是在开发分支中进行,开发完成后合并分支到主分支上

# 创建名为func1的分支
git branch func1

# 重命名分支
git branch -m func1 newFunc1

# 查看当前项目分支列表
git branch

# 如果分支完成使命,则可以删除
git branch -d newFunc1

git checkout

切换分支

# 切换到fun2分支
git checkout func2

git status

查看文件变动状态

例如,拉去下来的仓库中有一个README.md文件,我们对其做任何一点改动,并通过这个命令进行监视改动,结果如下:
在这里插入图片描述
分支fun1监视到README.md的改变,通过这个命令就差看到了发生改变的文件

git add

添加文件变动到暂存区

git add README.md

在这里插入图片描述

添加工作区所有文件到暂存区

git add *

git commit

提交文件变动到版本库

git commit -m "这里是提交原因"

在这里插入图片描述

git push

将本地的代码改动推送到服务器

git push origin func1

origin指的是当前的git服务器地址,这行命令的意思是将func1分支推送到服务器,当看到命令行返回如下字符表示成功了
在这里插入图片描述
接下里打开github网站,可以看到这个仓库的func1分支进行了更新
在这里插入图片描述

git pull

将服务器上的最新代码拉取到本地

git pull origin func1

如果想租成员对项目做了改动并推送到了服务器,那么我就需要将最新的改动拉取下来更新到本地

git log

查看版本提交记录

git log

在这里插入图片描述

git tag

给项目做标记

git tag publish/0.0.1

当我们完成某个功能需求发布上线时,应该将此次完整项目的代码做个标记,并将这个标记好的版本发布到线上,例如,看到如下内容则表示发布成功了
在这里插入图片描述

好了,以上就是一些常用命令的介绍,如果还想了解其他一些命令可以看我这常用命令汇总

git常用命令大全

感谢阅读!

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

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

相关文章

Kafka Cluster 扩容 添加副本 重分配分区

Kafka Cluster 扩容 针对kafka集群&#xff0c;可以通过向群集添加新节点来扩展群集。新节点将仅服务于新主题或新分区&#xff0c;现有分区将不会自动重新平衡以使用新节点。如果需要对现有的TOPIC进行重新分配分区&#xff0c;需要运维人员手动进行干预。今天学习下如何对已…

CAPL学习之路-测试功能集函数(故障注入函数)

TestDisableMsg 禁止发送消息,除非调用函数TestSetMsgEvent 使用TestEnableMsg重新启用消息。此函数影响分配CANoe交互层或CANopen仿真的仿真节点 这个函数可以在测试用例中控制Simulation Setup界面仿真节点报文的发送与停止 testcase TCExample() {testDisableMsg(LightSt…

Linux模块代码、编译、加载、卸载一条龙

最近要写一个Linux的内核模块&#xff0c;记录一下内核模块的代码编写、编译、加载和卸载的基本流程&#xff0c;以作备忘&#xff0c;也希望能帮到有需要的同学。 模块代码 //代码来自https://yangkuncn.cn/kernel_INIT_WORK.html //init_works.c #include <linux/kernel…

Docker-compose快速部署PostgreSQL

Docker-compose快速部署PostgreSQL&#xff1a; 利用docker-compose编排工具部署&#xff1a; docker-compose.yml 文件 version: "3.1" services:postgresql:image: postgres:12-alpinecontainer_name: postgresqlenvironment:POSTGRES_DB: postgresPOSTGRES_USE…

Python--数据容器总结

一、数据容器的分类 数据容器可以从一下视角进行简单的分类&#xff1a; 是否支持下标索引 支持&#xff1a;列表、元组、字符串 --序列类型不支持&#xff1a;集合、字典 --非序列类型是否支持重复元素 支持&#xff1a;列表、元组、字符串 --序列类型不支持&#xff1a;集…

自动生成单测代码插件Squaretest

今天来介绍一款工具Squaretest&#xff0c;它是一款自动生成单元测试的插件&#xff0c;会用到它也是因为最近公司上了代码质量管控的指标&#xff0c;会考评各个项目的单元测试覆盖率&#xff0c;以及sonar扫描出来的各种问题。 很多老项目老代码&#xff0c;或者着急交付的项…

第十八讲:神州三层交换机DHCP中继服务的配置

当DHCP客户机和DHCP服务器不在同一个网段时&#xff0c;由DHCP中继传递DHCP报文。增加DHCP中继功能的好处是不必为每个网段都设置DHCP服务器&#xff0c;同一个DHCP服务器可以为很多个子网的客户机提供网络配置参数&#xff0c;即节约了成本又方便了管理。这就是DHCP中继的功能…

vue经历从2.0到3.0更新

​编辑vue专栏收录该内容 9 篇文章2 订阅 订阅专栏 vue经历从2.0到3.0更新之后&#xff0c;简⽽⾔之就是变得更轻&#xff0c;更快&#xff0c;使⽤起来更加⽅便&#xff0c;每⼀次的版本迭代都是对上⼀个版本的升级优化&#xff0c;不管 是对于我们开发者还是对于⽤户体验都…

铁威马NAS教程之使用CloudSync应用轻松同步备份网盘数据

铁威马在TOS 5系统中&#xff0c;将各种云盘的同步集合到了一个应用——CloudSync&#xff0c;更方便用户使用。只需要下载安装CloudSync&#xff0c;就可以在TNAS和各种云盘之间&#xff0c;实现快速安全的数据同步、分享文件。 1.TOS应用中心下载CloudSync应用&#xff1b; …

中国霍尔效应电流传感器市场规模达到了192.71百万美元?

霍尔效应&#xff0c;是指有小电流通过的一个半导体薄片置于磁场中&#xff0c;受到磁场作用影响电流发生偏转&#xff0c;在控制电流的垂直方向上的半导体两侧形成了电压差&#xff0c;该电势差就是霍尔电压。霍尔电压的大小&#xff0c;与磁场强度和半导体内通过的控制电流成…

JSP ssh 在线英语学习平台myeclipse开发oracle数据库MVC模式java编程计算机网页设计

一、源码特点 JSP ssh在线英语学习平台是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S 模式开发。开发环境为TOMCAT7.0…

【MySQL从入门到精通】【高级篇】(三十)记一次mysql5.7的新特性derived_merge的坑

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…

深度学习 Day23——利用RNN实现天气预测

深度学习 Day23——利用RNN实现天气预测 文章目录深度学习 Day23——利用RNN实现天气预测一、前言二、我的环境三、前期工作1、导入依赖项2、导入数据3、查看数据基本信息4、查看各列数据的数据类型5、转换数据集中有关时间数据转换为时间格式6、删除Date标签列7、查看所有列的…

多版本并发控制(MVCC)

MVCC机制概述 MVCC&#xff08;Multi-Version Concurrency Control&#xff09;&#xff0c;中文是多版本并发控制&#xff0c;是指在使用READ COMMITTED、REPEATABLE READ这两种隔离级别的事务在执行SELECT操作时访问记录的版本链的过程&#xff0c;从而在不加锁的前提下使不…

基于LSTM三分类的文本情感分析,采用LSTM模型,训练一个能够识别文本postive, neutral, negative三种

基于LSTM三分类的文本情感分析&#xff0c;采用LSTM模型&#xff0c;训练一个能够识别文本postive, neutral, negative三种 &#xff0c;含数据集可直接运行 完整代码下载地址&#xff1a;基于LSTM三分类的文本情感分析 基于LSTM三分类的文本情感分析 背景介绍 文本情感分析…

Comic Life - 超棒的漫画制作工具,拥有多种动画模版,创作属于自己的漫画

Comic Life - 超棒的漫画制作工具&#xff0c;拥有多种动画模版&#xff0c;创作属于自己的漫画 Comic Life是一个照片编辑器&#xff0c;能够添加各种效果&#xff0c;并基于它们创建漫画。该工具包包括各种各样的模板&#xff0c;可以很容易地将照片放置在工作表上&#xff0…

CKEditor 为你的Flask项目添加一个富文本编辑器

人家高高在上的CKEditor是有个官网的&#xff01;&#xff01; WYSIWYG HTML Editor with Collaborative Rich Text EditingRock-solid, Free WYSIWYG Editor with Collaborative Editing, 200 features, Full Documentation and Support. Trusted by 20k companies.https://c…

SBM模型分析全流程

数据包络分析DEA时&#xff0c;其研究投入产出效率情况&#xff0c;并且其假定投入和产出之间存在单调线性关系&#xff0c;其为一种线性规划技术来确定DMU相对效率的方法。但有时候会多出下‘非期望产出’&#xff0c;就是不希望有它产出&#xff0c;比如资金投入、教育投入换…

【Unity3D日常开发】Unity3D拓展开发:UI界面控制,UI界面的显示和隐藏实现

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客QQ群&#xff1a;1040082875 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在开发中&#xff0c;可能遇到管理…

2022最后一天盘点

今天是今年最后的一天工作日&#xff0c;对于我来说就是今年的最后一天&#xff0c;因为放假了我就不需要思考了&#xff08;当然公司后端程序员要保持24小时oncall&#xff09; 1 阳完之后 还是有些 咳嗽&#xff0c;公司此起彼伏的咳嗽声&#xff0c;不知道什么时候所有人都…