Git理论教程

文章目录

  • 1 什么是Git
    • 1.1 什么是版本控制系统
    • 1.2 为什么需要版本控制系统
    • 1.3 常见的版本控制工具
    • 1.4 版本控制分类
      • 1.4.1 集中版本控制 SVN
      • 1.4.2 分布式版本控制 Git
      • 1.4.3 Git与SVN的主要区别
  • 2 Git环境配置
  • 3 Git基本理论
    • 3.1 Git三个区域
    • 3.2 Git工作流程
    • 3.3 Git项目搭建
      • 3.3.1 本地仓库搭建
  • 4Git文件操作
    • 4.1 文件的四种状态
    • 4.2 查看文件状态
    • 4.3 设置忽略文件
  • 5 Git分支
    • 5.1分支理解
    • 5.2 Git分支中常用指令

1 什么是Git

Git是一个免费、开源的版本控制软件
Git是目前世界上最先进的分布式版本控制系统。

Linux 的缔造者 Linus Torvalds基于使用 BitKeeper 时的经验教训,用两周左右的时间开发出自己的版本系统。 也就是后来的 Git!

1.1 什么是版本控制系统

版本控制是一种记录一个或若干个文件内容变化,以便将来查阅特定版本修订情况,管理多人协同开发项目的技术。

通过版本控制我们可以:

1.实现跨区域多人协同开发
2.追踪和记载一个或者多个文件的历史记录
3.组织和保护你的源代码和文档
4.统计工作量
5.并行开发、提高开发效率
6.跟踪记录整个软件的开发过程
7.减轻开发人员的负担,节省时间,同时降低人为错误

1.2 为什么需要版本控制系统

没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等一系列问题。
在这里插入图片描述
无论是工作还是学习,或者是自己做笔记,都经历过这样一个阶段!我们就迫切需要一个版本控制工具!
多人协同开发就必须要使用版本控制!

1.3 常见的版本控制工具

  1. Git

  2. SVN(Subversion)

  3. CVS(Concurrent Versions System)

  4. VSS(Micorosoft Visual SourceSafe)

  5. TFS(Team Foundation Server)

  6. Visual Studio Online

版本控制产品非常的多(Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault),现在影响力最大且使用最广泛的是Git与SVN

1.4 版本控制分类

1.4.1 集中版本控制 SVN

所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改

在这里插入图片描述

特点:所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。
代表产品:SVN、CVS、VSS

1.4.2 分布式版本控制 Git

所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。

不会因为服务器损坏或者网络问题,造成不能工作的情况!
在这里插入图片描述

1.4.3 Git与SVN的主要区别

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。

Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。Git可以直接看到更新了哪些代码和文件!

Git是目前世界上最先进的分布式版本控制系统。

2 Git环境配置

  1. 先下载Git点击进入下载,下载完毕过后,傻瓜式安装
    在这里插入图片描述
  2. 启动Git
    安装成功后在开始菜单中会有Git项,菜单下有3个程序:任意文件夹下右键也可以看到对应的程序!
    在这里插入图片描述

Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多

Git CMD:Windows风格的命令行

Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令

常用的Linux命令

1)、cd : 改变目录。2)、cd . . 回退到上一个目录,直接cd进入默认目录3)、pwd : 显示当前所在的目录路径。4)、ls(ll):  都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细。5)、touch : 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件。6)、rm:  删除一个文件, rm index.js 就会把index.js文件删除。7)、mkdir:  新建一个目录,就是新建一个文件夹。8)、rm -r :  删除一个文件夹, rm -r src 删除src目录rm -rf / 切勿在Linux中尝试!删除电脑中全部文件!9)、mv 移动文件, mv index.html src index.html 是我们要移动的文件, src 是目标文件夹,当然, 这样写,必须保证文件和目标文件夹在同一目录下。10)、reset 重新初始化终端/清屏。11)、clear 清屏。12)、history 查看命令历史。13)、help 帮助。14)、exit 退出。15)、#表示注释

设置用户名与邮箱(用户标识,必要)
当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中:

1. 设置用户名
git config --global user.name "cdh"  #名称2. 设置用户名邮箱
git config --global user.email cdh3408@qq.com   #邮箱

注意:git config –global 参数,有了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然你也可以对某个仓库指定的不同的用户名和邮箱。

  1. 设置完毕后git config -l查看所有Git相关的配置文件
    在这里插入图片描述
    查看不同级别的配置文件:

#查看系统config
git config --system --lis在这里插入图片描述
#查看当前用户(global)配置
git config --global --list
在这里插入图片描述

  1. Git\etc\gitconfig:Git 安装目录下的 gitconfig --system 系统级
    在这里插入图片描述
  1. C:\Users\Administrator\ .gitconfig 只适用于当前登录用户的配置 --global 全局
    在这里插入图片描述

3 Git基本理论

3.1 Git三个区域

Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Staging Area)、本地仓库(Git Directory或Repository)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:

在这里插入图片描述

Workspace:工作区,就是你平时存放项目代码的地方

Staging Area:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

.git directory:本地仓库,就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

3.2 Git工作流程

Git的工作流程一般是这样的:

  1. 在工作目录中添加、修改文件;

  2. 将需要进行版本管理的文件放入暂存区域;

  3. 将暂存区域的文件提交到Git仓库。
    在这里插入图片描述

3.3 Git项目搭建

创建工作目录与常用指令

工作目录(WorkSpace)一般就是你希望Git帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,建议不要有中文。

日常使用只要记住下图6个命令:
在这里插入图片描述

3.3.1 本地仓库搭建

创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。

1、创建全新的仓库,需要用GIT管理的项目的根目录执行:

在当前目录新建一个文件
在这里插入图片描述
在当前目录新建一个Git代码库

$ git init

执行后可以看到,仅仅在项目目录多出了一个.git目录,关于版本等的所有信息都在这个目录里面。
在这里插入图片描述

  1. 克隆远程仓库
    1、另一种方式是克隆远程目录,由于是将远程服务器上的仓库完全镜像一份至本地!

克隆一个项目和它的整个代码历史(版本信息)

$ git clone [url]  # https://gitee.com/night_drift/video_study.git

建立完本地仓库以后就可以继续后续内容啦!!

 git add .                  添加所有文件到暂存区git commit -m "消息内容"    提交暂存区中的内容到本地仓库 -m 提交信息git push        提交到远程仓库

4Git文件操作

4.1 文件的四种状态

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。
在这里插入图片描述
Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add状态变为Staged.

Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件

Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !

Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

4.2 查看文件状态

上面说文件有4种状态,通过如下命令可以查看到文件的状态:

#查看指定文件状态
git status [filename]#查看所有文件状态
git status

4.3 设置忽略文件

应用场景:有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等

在主目录下建立".gitignore"文件,此文件有如下5个规则:

  1. 忽略文件中的空行或以井号(#)开始的行将会被忽略。

  2. 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。

  3. 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。

  4. 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。

  5. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。

#为注释
*.txt        #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
!lib.txt     #仅lib.txt除外
/temp        #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/       #忽略build/目录下的所有文件
doc/*.txt    #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

5 Git分支

5.1分支理解

分支可以理解想象为科幻电影里面的平行宇宙,如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,我们就需要处理一些问题了!

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

5.2 Git分支中常用指令

# 列出所有本地分支
git branch# 列出所有远程分支
git branch -r# 新建一个分支,但依然停留在当前分支
git branch [branch-name]# 新建一个分支,并切换到该分支
git checkout -b [branch]# 合并指定分支到当前分支
$ git merge [branch]# 删除分支
$ git branch -d [branch-name]# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]

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

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

相关文章

Science | 再创生命奇迹!日本科学家造出了不需要“父亲”的大鼠及小鼠

来源:【iNature】iNature从多能干细胞 (PSC) 体外生成生殖细胞可以对未来的生殖医学和动物育种产生重大影响。十年前,在小鼠中建立了体外配子发生。然而,在任何其他物种中尚未实现诱导原始生殖细胞样细胞(PGCLCs)产生配…

总结Vue中index.html、main.js、App.vue、index.js之间关系以及Vue项目加载流程

总结Vue中index.html、main.js、App.vue、index.js之间关系以及Vue项目加载流程 文章目录总结Vue中index.html、main.js、App.vue、index.js之间关系以及Vue项目加载流程1 vue中index.html、main.js、App.vue、index.js关系简介1.1 项目的运行入口index.html1.2 入口文件main.j…

ACM 杰出会员姬水旺:量子化学和物理的深度学习

整理:汪浩文校对:维克多量子技术和人工智能都是当前最先进的科学技术,前者被寄希望于拥有超强的计算能力,后者已经在各行各业“大杀四方”。当两者相遇会碰撞出什么样的火花?人工智能又能在哪些方面助力量子技术&#…

1 操作系统第一章 操作系统概念、功能、四大特征、操作系统发展与分类

文章目录1.1 操作系统概念1.2 操作系统功能1.3 操作系统四大特征1.3.1 并发1.3.2 共享1.3.3 并发性和共享区别及对应关系:1.3.4 虚拟1.3.5 异步1.4 操作系统的发展与分类1.4.1 手工操作阶段1.4.2 批处理阶段——单道批处理系统1.4.3 批处理阶段——多道批处理系统1.…

不能头脑一热,就布局颠覆性技术、上马未来产业

来源:财经国家周刊作者:曹方 何颖 姬少宇 张鹏近年来,布局、规划及培育人工智能与机器人、先进材料、新能源、生命科学、云计算和量子计算、混合现实等颠覆性技术、未来产业,成为不少地方政府推动当地产业结构调整、助力经济高质量…

2 操作系统第一章 操作系统体系结构、中断和异常、系统调用

文章目录1.1 指令概念及其分类1.2 操作系统体系结构:1.2.1操作系统内核概念1.3 中断和异常1.3.1 中断的诞生1.3.2 中断分类1.3.3 外中断的处理过程1.3.4 中断小结1.4 系统调用1.4.1 系统调用介绍1.4.2 系统调用功能1.4.3 系统调用小结1.1 指令概念及其分类 指令就是…

百年诺奖的那些争议与放弃

来源:数学与通识自1901年首届诺贝尔奖颁发以来,它已成为人们心中最崇高、最向往的奖项之一。可能没有人想要去拒绝它,因为它不仅仅是奖金的问题,还是莫大的荣誉和骄傲,其追求真理、造福社会、为人类文明创造价值的初心…

3 操作系统第二章 进程管理 进程定义、特征、组织、状态与转换

文章目录1 进程的定义和特征2 进程的组织3 进程的状态与转换3.1 进程的状态3.2 进程状态转换1 进程的定义和特征 引入进程的原因 为了使程序能够并发执行,并且可以对并发执行的程序加以描述和控制 进程定义 进程是进程实体的运行过程,是系统进行资源分配…

数学家、中科院院士张景中:数学实力影响国家实力是近代以来的共识

本文转自:长江日报-长江网转载自公众号 和乐数学长江日报-长江网讯(记者周劼)最近一段时间,关于“数学”的热点新闻接连不断,从华为爆料有700名数学家,到中国重夺国际奥数冠军,从丘成桐区别数学家和数学工程师&#xf…

4 操作系统第二章 进程管理 进程控制、通信

文章目录1 进程控制1.1 进程控制1.2 进程控制实现1.3 进程创建1.4 进程终止1.5 进程阻塞与唤醒1.6 进程切换1.7 进程控制小结2 进程通信2.1 共享通信2.2 管道通信2.3 消息传递2.4 进程通信小结1 进程控制 1.1 进程控制 进程控制的主要功能是对系统中的所有进程实施有效的管理&…

《Science》日本科学家利用干细胞诱导成功了大鼠生殖细胞

来源:生物通日本科学家利用干细胞来诱导生殖细胞,从而产生健康且可生育的后代。不久前,日本京都大学(Kyoto University)的研究人员在《细胞干细胞》(Cell Stem Cell)杂志上发表了一篇研究论文,称他们利用小鼠多能干细胞在试管中逐…

5 操作系统第二章 进程管理 线程介绍

文章目录1 什么是线程1.1 为什么要引入线程:1.2 线程定义1.3 线程与进程的比较1.4 线程的属性1.5 线程实现方式1.5.1 用户级线程(ULT)1.5.2 内核级线程(KLT,又称“内核支持的线程”)1.5.2 用户级线程、内核级线程二者组…

6 操作系统第二章 进程管理 处理机调度

文章目录1 处理机调度1.1 处理机调度概念1.2 处理机调度三大层次1.3 处理机三层调度的联系、对比1.4 处理机调度小结2 进程调度2.1 进程调度、进程切换时机2.2 进程调度方式2.3 进程的切换与过程2.4 进程切换与调度小结3 典型的调度算法3.1 先来先服务 FCFS3.2 短作业优先 SJF3…

如何通向“广义人工智能”?LSTM 提出者之一Sepp Hochreiter:将符号 AI 与神经 AI 相结合...

来源:AI科技评论作者:Sepp Hochreiter解读:Antonio编辑:陈彩娴人类包含意识、认知、决策等等在内的智慧能力,似乎从人类有记录的那一刻起,就吸引着无数哲学家的思索。与之类似,从AI诞生的那一刻…

德勤预判:2022技术七大趋势

来源:综合德勤公开平台公开发布信息整理编辑:邱峰、罗兵,张钦煜审核:张祥、吴斌、数字理政研究院、中通协大数据分会1、数据跨界共享更便捷:诸多新技术致力于在保护隐私的同时,简化组织内和组织间的数据共享…

7 操作系统第二章 进程管理 进程同步与互斥

文章目录1 进程同步与互斥1.1 进程同步1.2 进程互斥1.3 进程同步机制遵循的原则1.3 进程同步、互斥小结2 进程互斥实现方法2.1 互斥的软件实现方法2.1.1 单标志法2.1.2 双标志法先检查2.1.3 双标志法后检查2.1.4 Peterson算法2.1.5 互斥的软件实现方法小结2.2 互斥的硬件实现方…

8 操作系统第二章 进程管理 信号量 PV操作 用信号量机制实现 进程互斥、同 步、前驱关系

文章目录1 信号量机制1.1 整形信号量1.2 记录形信号量1.3 信号量机制小结2 用信号量机制实现进程互斥、同 步、前驱关系2.1 信号量机制实现进程互斥2.2 信号量机制实现进程同步2.3 信号量机制实现前驱关系2.4 信号量机制实现进程互斥、同 步、前驱关系小结1 信号量机制 用户进程…

一文掌握深度学习、神经网络和学习过程的历史

来源:算法与数学之美本质上,深度学习是一个新兴的时髦名称,衍生于一个已经存在了相当长一段时间的主题——神经网络。从20世纪40年代开始,深度学习发展迅速,直到现在。该领域取得了巨大的成功,深度学习广泛…

2022年后人工智能/深度学习八大应用方向

来源:电子工程专辑 人工智能、机器学习、深度学习已经成为当下最热门的前端科技之一。这三者其实是子-子集的关系。随着技术发展和应用的深入,深度学习越来越重要,成为AI的金字塔。本文总结了人工智能领域在2022年及以后数年内最热门的八大应…

多生产者-多消费者问题

文章目录1 问题描述2 问题分析3 代码实现4 分析总结1 问题描述 桌子上有一只盘子,每次只能向其中放入一个水果。爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,儿子专等着吃盘子中的橘子,女儿专等着吃盘子中的苹果。只有盘子空时&am…