Git入门详细教程

一、Git概述🎇

git

Git官网

Git是一个开源的分布式版本控制系统,用于跟踪文件的变化和协作开发。它允许多个开发者在同一项目中共同工作,并能够有效地管理代码的版本和历史记录。Git可以帮助开发团队更好地协作,追踪代码变更,并且可以在需要时轻松地回滚到之前的版本。

1.1 什么是版本控制

版本控制是一种管理文件变化的系统,它可以跟踪文件的修改、添加和删除,并记录这些变化的历史。版本控制系统可以帮助团队协作开发,确保每个人都在同一个代码基础上工作,并且可以轻松地查看和恢复文件的不同版本。它还可以提供分支和合并功能,允许多个开发者并行地修改代码,并将这些修改合并到一个共同的代码库中。版本控制系统可以提高开发效率,减少错误,并且有助于保持代码库的整洁和可维护性。

1.2 版本控制工具

一些常见的版本控制工具包括:

  1. Git(GPT-3.5)
  2. Subversion(SVN)
  3. Mercurial
  4. Perforce
  5. CVS(Concurrent Versions System)
  6. Bazaar

版本控制工具又分为集中式版本控制工具分布式版本控制工具

集中式版本控制工具

集中化的版本控制系统诸如CVS、SVN等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。

这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。

事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作

分布式版本控制工具

像Git这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。

分布式的版木控制系统山现之后,解决了集中式版木控制系统的缺陷:

  1. 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)

  2. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)

1.3 Git简史

Git是由Linus Torvalds于2005年创立的分布式版本控制系统。Git的历史可以追溯到Linux内核开发过程中对版本控制系统的需求。在此之前,Linux内核的开发使用BitKeeper作为版本控制工具,但随着一些争议的出现,Linux社区需要一个开源的替代方案。

因此,Linus Torvalds开发了Git,并于2005年发布了首个版本。Git的设计目标是速度、数据完整性和分布式架构。它的发展得到了全球开发者社区的广泛支持,成为了目前最流行的版本控制系统之一。

Git的发展历程中,不断得到改进和扩展,吸引了全球开发者的参与,形成了一个庞大的生态系统。今天,Git已经成为了许多开源项目和商业项目的首选版本控制工具。

1.4 Git工作机制

git工作流程

工作区指的是存放代码的磁盘位置

1.5 Git和代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。

局域网:

  1. GitLab

互联网:

  1. GitHub
  2. Gitee

二、Git安装🎊

根据自己的电脑选择合适的Git版本,本机为windows10 64位,基本上无脑下一步安装就行

image-20240115155031570

选Vim就行,Notepad++也行

image-20240115155230368

其它的不用改,直接下一步,然后安装,安装完成后,鼠标右键会有Git

image-20240115155814038

git --version #查看git版本信息

image-20240115155855691

三、Git常用命令🎃

命令名称作用
git config --global user.name 用户名设置用户签名
git config --global user.email 邮箱设置用户签名
git init初始化本地库
git status查看本地库状态
git add 文件名添加到暂存区
git commit -m"日志信息" 文件名提交到本地库
git reflog查看历史记录
git reset–hard 版本号版本号版本穿梭

3.1 设置签名

右键打开Git Bash输入

git config --global user.name "笑的像个child"git config --global user.email "xxxxx@qq.com(自己的邮箱)"

image-20240115160719860

3.2 初始化本地库

创建一个git-demo文件夹(后面的实验都基于这个文件夹),并右键进入git bash,并输入初始化命令

git init

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以看到当前目录存在.git文件夹(看不到是因为它默认是隐藏的)

image-20240116112145948

3.3 查看本地库状态

git status

image-20240116112436811

新增文件

在git-demo下创建一个hello.txt文件,并在其中写入一行hello git,关闭并保存

再次查看本地库的状态,此时文件还只存在于工作区,并未添加至暂存区。

image-20240116112820932

3.4 添加暂存区

将文件添加至暂存区,输入命令

git add hello.txt 

也可以使用

git add .  # .的意思是添加所有文件至暂存区。

添加完成后,再次查看本地库状态

image-20240116113404046

此时,git已经追踪到了文件,此时如果你不想保存一个历史版本,是可以删除掉的。

git rm --cached hello.txt #将文件从暂存区删除(此时还没有记录历史版本,只有commit时才会有历史版本)

image-20240116113551401

此处只是做实验,测试删除暂存区的文件,删除后,重新添加至暂存区,为后面的实验做准备

3.5 提交本地库

git commit -m "第一次提交" hello.txt

image-20240116114211643

提交完成后,再次查看本地库状态,暂存区已经没有文件了

查看历史版本信息,

git reflog #查看历史版本git log #可以查看更详细的提交日志

image-20240116114625484

3.6 修改文件

修改hello.txt中的内容(只在第一行新增了一段字符串),再查看本地库状态,提示文件被修改

image-20240116124618995

追踪修改添加至暂存区

image-20240116124718407

提交本地库,并查看历史版本详细日志

image-20240116124833514

提交文件后,提示一个文件被修改,一行新增,一行删除,是因为git中通过行来维护文件,修改一行,它无法表示,它是把修改之前的那一行删掉,再把修改之后的一行的内容新增进来。

3.7 历史版本

查看历史版本

git reflog #查看版本信息git log #查看版本详细信息

image-20240116125452092

版本穿梭

穿梭回第一个版本,并查看文件,已经回到第一个版本

git reset --hard "历史版本号"

image-20240116125736332

穿梭回第二次提交的版本

image-20240116130224775

四、Git分支操作🎄

命令名称作用
git branch 分支名创建分支
git branch -v查看分支
git checkout 分支名切换分支
git merge 分支名把指定的分支合并到当前分支上

4.1 分支概述

Git分支是在Git版本控制系统中用于并行开发和管理不同功能或版本的代码的重要概念。分支可以让开发者在不影响主线代码的情况下,独立地进行开发、测试和修改。在Git中,主要的分支是master(或main)分支,它包含了项目的主要代码。除了主分支外,开发者可以创建其他分支,比如feature分支用于开发新功能,bugfix分支用于修复bug,release分支用于发布版本等。

分支的优势在于它能够提供一种安全的方式来进行并行开发,避免了直接在主分支上进行修改可能带来的风险。同时,分支也可以帮助团队协作,每个成员可以在自己的分支上进行开发,最后合并到主分支上。

在Git中,创建、切换、合并、删除分支都是非常简单的操作,开发者可以根据需要随时创建新的分支,并在不同分支之间切换,以便进行不同的工作。因此,合理地使用分支可以帮助开发团队更高效地进行代码管理和开发工作。

git分支

4.2 查看分支

git branch -v #查看当前存在的的分支

image-20240117215916227

4.3 创建分支

创建hot-fix分支后,再查看当存在的分支(当前还是在master分支)

git branch "分支名"

image-20240117220021130

4.4 切换分支

从master分支切换到hot-fix分支上

git checkout hot-fix

image-20240117220513565

分支已从master分支切换到hot-fix分支

4.5 修改分支

当前在hot-fix分支上,修改hello.txt文件,并将其提交本地库

image-20240117222538139

4.6 分支合并

正常合并

git merge hot-fix

image-20240117223126458

冲突合并

**冲突产生的原因:**合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git无法替我们决定使用哪一个。必须人为决定新代码内容

先在master分支下修改文件,然后切换到hot-fix分支下,然后再在同一行修改文件(修改内容可以随意),然后切换回master分支合并hot-fix分支

image-20240117224336490

查看本地库状态

image-20240117224417306

此时需要手动合并代码

查看hello.txt文件

image-20240117225014849

解决冲突

image-20240117225505733

将特殊符号删除,然后保留需要的片段,此处两段同时保留

重新提交文件

image-20240117225652121

此时commit不能带文件名!!!不能带文件名!!!不能带文件名!!!

五、团队协作🎎

5.1 团队协作机制

团队内协作

git团队协作

简述:A和B是同一团队的成员,A将代码push至代码远程仓库,B可以将其clone下来然后修改,再push到远程仓库,A就可以pull下B修改的部分代码。

跨团队协作

git跨团队协作

A和C是同一开源项目的团队成员,B并不是,B觉得A的团队写的代码不够好,然后就fork了一份完整的代码(整个库),然后clone至本地,B将其修改优化后又push到他的远程仓库,然后发起pull request,开源团队进行审核,觉得B写的很好,就将他的代码进行merge,然后开源团队又将自己的代码进行更新。

六、Gitee操作🎨

6.1 推送本地库到远程库

GitHub这两天打开的实在是太慢了,我梯子又过期了,在此就使用Gitee进行演示了,都大差不差。

进入Gitee的个人主页点击创建

image-20240118151512128

填写仓库基本信息,然后创建

image-20240118151557839

设置别名

git remote add "别名" "链接"

image-20240118152059052

推送至远程仓库

git push git-test master

image-20240118152323515

在本地修改了文件后还是先将其提交暂存区,本地库,然后再push一下就可以了

查看gitee仓库存在推送的文件

image-20240118152349429

6.2 拉取远程库到本地

此时远程库的文件内容和本地的是不一致的

image-20240118153732210

在git-demo中打开git,输入拉取的命令

git pull "远程仓库的别名或链接" "分支名"

image-20240118153933792

此时,本地的hello.txt文件已经更新和远程库的文件内容一致

6.3 克隆远程库到本地库

拉取远程库

image-20240118152854021

先在自己电脑上随意找一个没有文件的位置,然后打开git

git clone "复制的链接"

image-20240118153110084

仓库,文件都克隆成功

image-20240118153216201

其它的项目都是这样,复制链接然后clone

七、自建GitLab代码托管平台🌭

gitlab

GitLab官网

GitLab的历史可以追溯到2011年,当时由荷兰的程序员Sytske Sijbrandij和Dmitriy Zaporozhets共同创建了GitLab。最初,GitLab是作为一个开源项目发布的,旨在提供一个基于Web的Git仓库管理工具,以及一系列的协作工具,例如问题跟踪、持续集成和部署等。

随着时间的推移,GitLab逐渐获得了越来越多的用户和开发者的支持。2013年,GitLab发布了第一个企业版,为企业用户提供了更多的高级功能和支持服务。2015年,GitLab发布了自托管版本,使用户可以在自己的服务器上部署和运行GitLab。

GitLab持续不断地进行更新和改进,增加了许多新的功能和工具,如持续集成、持续部署、代码审查等,使其成为一个功能强大的代码管理平台。2017年,GitLab完成了一轮高达2000万美元的融资,进一步加速了其发展。

至今,GitLab已经成为了全球范围内广受欢迎的代码托管和协作工具,拥有庞大的用户群和开发者社区。它的开源版本和企业版都得到了广泛的应用,为软件开发团队提供了全面的解决方案。GitLab的发展历程充分展示了其不断创新和改进的精神,以及对用户需求的不断关注和满足。

7.1 服务器安装GitLab

GitLab下载安装_GitLab最新中文官网免费版下载-极狐GitLab

本人使用的是一台Centos7的服务器

下载/安装极狐GitLab

curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash

image-20240118165812674

开始安装

EXTERNAL_URL="http://gitlab.example.com" yum install -y gitlab-jh

此处"http://gitlab.example.com"修改为服务器的地址并指定端口号

建议大家使用内存大一点的服务器,我的已经挂了,后续演示放在下一篇文章😅😅😅

image-20240118181444550

参考资料

01_尚硅谷_Git_课程介绍_哔哩哔哩_bilibili

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

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

相关文章

什么是比特币?

比特币 比特币 (英语:Bitcoin,缩写:BTC )是一种基于 去中心化,采用 点对点网络,开放源代码,以 区块链 作为底层技术的 加密货币。比特币由 中本聪(Satoshi Nakamoto&…

Nginx前后端分离部署springboot和vue项目

Nginx前后端分离部署springboot和vue项目,其实用的比较多,有的小伙伴对其原理和配置还一知半解,现在就科普一下: 1、准备后端项目 后端工程无论是微服务还是单体,一般最终都是jar启动,关键点就是把后端服…

go mock模拟接口的实现

简介 mock翻译过来是‘模拟’的意思,也就是模拟接口返回的信息,用已有的信息替换接口返回的信息,从而提供仿真环境,实现模拟数据下的功能测试; 在多人合作编码时,你写的一个函数func DoSth(People)用到了别…

【备战蓝桥杯】图论重点 敲黑板啦!

蓝桥杯备赛 | 洛谷做题打卡day11 文章目录 蓝桥杯备赛 | 洛谷做题打卡day11杂务题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 题解代码我的一些话 杂务 题目描述 John 的农场在给奶牛挤奶前有很多杂务要完成,每一项杂务都需要一定的时间来完成它。比如&a…

c#让三个线程按照顺序执行

现实的例子 三个线程都是while(true)的循环体 A线程:采集数据 B线程:画曲线 C线程:存数据库 AutoResetEvent类 AutoResetEvent 是一个线程同步的类,它提供了一种机制,允许一个或多个线程等待直…

Unity之四元数

欧拉角 万向节死锁 四元数是什么 Unity中四元数的初始化 四元数和欧拉角的互相转换 补充 四元数相乘代表旋转四元数

Linux Shell脚本入门

目录 介绍 编写格式与执行方式 Shell脚本文件编写规范 脚本文件后缀名规范 首行格式规范 注释格式 shell脚本HelloWord入门案例 需求 效果 实现步骤 脚本文件的常用执行三种方式 介绍 3种方式的区别 小结 多命令处理 Shell变量 环境变量 目标 Shell变量的介绍 变量类型 系统环境…

计算机毕业设计 基于SpringBoot的红色革命文物征集管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

学习JavaEE的日子 day12 构造方法 类的制作

Day12 需求:创建人类的对象,并操作对象 分析: 人类 - Person 属性:name、sex、age 方法:eat、sleep 场景:创建多个对象,去操作对象 //测试类:该类中有main方法,测试我们写…

F - Digital Roots HUOJ

题目 The digital root of a positive integer is found by summing the digits of the integer. If the resulting value is a single digit then that digit is the digital root. If the resulting value contains two or more digits, those digits are summed and the pro…

让你的Pandas代码快得离谱的两个技巧

如果你曾经使用过Pandas处理表格数据,你可能会熟悉导入数据、清洗和转换的过程,然后将其用作模型的输入。然而,当你需要扩展和将代码投入生产时,你的Pandas管道很可能开始崩溃并运行缓慢。在这篇文章中,笔者将分享2个技…

项目管理十大知识领域之项目质量管理

一、项目质量管理概述 项目质量管理是指通过计划、组织、控制和监督项目过程,以确保项目满足特定的质量要求的一系列活动。项目质量管理是整个项目管理体系中不可或缺的一部分,它涉及到对项目所涉及的产品或服务的质量进行规划、控制和保证的过程。在项…

【面试】测试/测开(ING3)

190. 栈和堆在内存管理上的区别 栈 1) 栈是由系统自动分配和回收的内存。 2)栈的存储地址是由高地址向低地址扩展的。 3)栈是一个先进后出的结构。 4)栈的空间大小是一个在编译时确定常数,即栈的大小是有限制的&#x…

Kubernetes的minikube

文章目录 环境概述准备安装启动和集群交互dashboard创建deployment创建service启用addon清理参考 环境 RHEL 9.3Docker Community 24.0.7miniKube v1.32.0 概述 minikube可以快速的在macOS、Linux和Windows上搭建本地的Kubernetes集群,帮助Kubernetes小白快速上手…

鲁大师2023年牛角尖颁奖盛典揭晓,年度最强产品诞生

1月18日,鲁大师2023年度牛角尖颁奖典礼在四川省内江市威远县船石湖豪生温泉度假酒店完美落幕。 本届鲁大师牛角尖颁奖盛典举办地选在了威远县可谓是深有其意,其名称的由来最早可追溯到隋朝,取“威名远震”之意。而这也与鲁大师牛角尖奖项的设…

用通俗易懂的方式讲解:使用Llama-2、PgVector和LlamaIndex,构建大模型 RAG 全流程

近年来,大型语言模型(LLM)取得了显著的进步,然而大模型缺点之一是幻觉问题,即“一本正经的胡说八道”。其中RAG(Retrieval Augmented Generation,检索增强生成)是解决幻觉比较有效的…

自建呼叫中心还是使用云呼叫中心?

随着云呼叫技术的逐渐普及,云呼叫中心在全国的推广,越来越多中小企业开始使用云呼叫中心开展企业外呼及电话客服业务。但还是有很多企业坚持使用传统的自建呼叫中心。那么云呼叫中心跟自建呼叫中心有什么区别呢?企业又该作何选择?…

百德朗王晓明:用差异化创新,解决智能楼控项目深层痛点

近年来,国家对物联网产业的支持政策不断释放,《“十四五”数字经济发展规划》明确提出了要加速空间信息基础设施升级。作为AIoT控制系统核心技术引领者是如何看待物联网时代下的智慧楼宇与能源应用发展的呢?近日,百德朗联合创始人…

回归预测 | Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测

回归预测 | Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测 目录 回归预测 | Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现GA-APSO-MBP、GA-MBP、MBP、BP多输入单输出回归预测&…

Redis持久化方案RDB和AOF

Redis两种持久化方案 RDB持久化AOF持久化 RDB持久化 RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文…