文章目录

  • 一、版本控制
    • 1、版本控制的功能:
      • (1)追踪文件的变更
      • (2)并行开发
    • 2、版本控制的发展历程
      • (1)本地版本控制系统
      • (2)集中化的版本控制系统
      • (3)分布式版本控制系统(Git)
  • 二、Git
    • 1、Git的结构
    • 2、命令行的操作
      • (1)本地库初始化
      • (2)设置签名
      • (3)状态查看(提交前后)
      • (4)查看历史版本记录
      • (5)版本的前进/后退
      • (6)比较文件间差异
    • 3、分支操作
      • 解决分支冲突

一、版本控制

版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。

1、版本控制的功能:

(1)追踪文件的变更

它将什么时候、什么人更改了文件的什么内容等信息忠实地了记录下来。

每一次文件的改变,文件的版本号都将增加。

(2)并行开发

软件开发往往是多人协同作业,版本控制可以有效地解决版本的同步以及不同开发者之间的开发通信问题,提高协同开发的效率。

并行开发中最常见的不同版本软件的错误(Bug)修正问题也可以通过版本控制中分支与合并的方法有效地解决。

2、版本控制的发展历程

(1)本地版本控制系统

本地版本控制系统有很多,大多都是采用某种简单的数据库来记录文件的历次更新差异。其中最流行的一种叫做 RCS ,现今许多计算机系统上都还看得到它的踪影。

RCS 的工作原理:在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容。

(2)集中化的版本控制系统

集中化的版本控制系统解决了本地版本控制系统中不同系统上的开发者无法协同工作的缺点。

集中化的版本控制系统中有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

多年以来,这已成为版本控制系统的标准做法。

各个开发者都是通过同一个集中管理的服务器进行工作,所以在一定程度上每个开发者都可以看到其他人的工作内容,另外,作为项目的管理者也可以轻松掌控每个开发者的权限,这比在各个客户端上维护本地数据库来得轻松容易。

当然因为是单点集中管理,存在较大的缺点:

  1. 中心服务器宕机后,所开发者都无法工作
  2. 中心数据库丢失,所有文件都丢失,每个开发者本地保存的只是部分数据的快照,并不完整。

(3)分布式版本控制系统(Git)

采用分布式版本控制系统的客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录。(过程中对文件的所有操作都是会被完整记录下来的)

这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。

因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

分布式版本控制系统和集中化的版本控制系统的最大区别在于:集中化版本控制系统的部分机器保存的只是部分数据的快照,而分布式版本控制系统保存的是整个代码仓库的镜像。

二、Git

1、Git的结构


2、命令行的操作

(1)本地库初始化

 1. cd +路径  # 打开某文件2. cd ..     # 返回上一级目录3. git init    # 本地库初始化4. ll           #详细罗列当前目录下的文件5. ls -al      #带隐藏文件一并显示
  1. 选定想作为工作区的文件夹
  2. 使用 cd 命令进入该文件夹目录下
  3. git init 初始化(若在该文件夹里出现 .git 文件,则说明初始化成功)

.git 是隐藏目录需要采用 ls -al 命令:

.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改

(2)设置签名

所谓的签名就是设置一个用户名称和一个用户email,此处的签名只看作是一个特定的字符串(email也不需要真实有效),只用来区分不同的开发人员,并不作他用。

这里的签名就是一个标志!

辨析:这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关系。

  1. 项目级别/仓库级别:仅在当前本地库范围内有效
git config user.name + 名字
git config user.email + 邮箱

签名信息保存在 .git 目录下的 config 文件中

2.系统用户级别:登录当前操作系统的用户范围

git config --global user.name 0
git config --global user.email 0@0


信息保存位置:~/.gitconfig (根目录下的 .gitconfig文件中)

对于种签名的优先级如下:

(3)状态查看(提交前后)

查看状态:包括当前所在分支,是否有待添加到缓冲区的内容,是否有待提交到本地库的内容

git status   #状态查看
vim + 文件名  # 采用vim编译器编辑文件

git add + 文件名   #将文件添加到缓存区
git commit [-m "注释" +文件名]    #将文件提交到本地库


(4)查看历史版本记录

git log      # 信息最完整git log --pretty=oneline    #以一行形式展示git log --oneline   #精简一行git reflog

(5)版本的前进/后退

(6)比较文件间差异

3、分支操作

git branch + 分支名        # 创建分支
git branch -v           #查看当前所有分支
git checkout + 分支名 #切换到某个分支上
git merge + 有新内容的分支    #别的分支合并到当前分支

解决分支冲突

当两个分支都修改了同一个地方,而且修改为的内容各不相同,此时执行合并命令的时候就会发生冲突,git本身无法决定应该以哪个分支的修改为准,此时,git会进入人工编辑状态,有用户自行决定!

【Git版本控制】——保姆级教程相关推荐

  1. Git仓库 保姆级教程

    Gitee的使用教程 一.Git仓库介绍 1.概念 2.Git 文件的三种状态&工作模式 二.Git 的安装 1.Git下载 2.Git安装 三.Git的使用 1.创建账户 2.Git的基础指 ...

  2. git、github保姆级教程(手把手交)以及如何在github上提交pr,参与开源项目

    git.github保姆级教程(手把手交)以及如何在github上提交pr,参与开源项目 一.git的安装 直接参考 git官方网站:https://git-scm.com/ 二.git的使用(从新手 ...

  3. 保姆级教程:手把手教你搭建个人网站

    保姆级教程:手把手教你搭建个人网站 前言 准备与搭建 1.Git管理工具的下载与安装 2.nodejs环境安装 3.hexo博客框架下载 npm换国内源 使用npm下载hexo博客框架 初始化mybl ...

  4. AI绘图–Disco Diffusion使用指南+本地化保姆级教程

    文章封面为个人AI绘图训练结果 项目传送门:传送门 (谷歌警告) 该项目为免费使用的AI绘图项目,并且可以在本地搭建部署环境. AI绘图对于人脸处理仍处于较为实现困难的阶段,因此该项目更适合用于各类场 ...

  5. ACME网站证书自动化保姆级教程

    更好的阅读体验和更多文章请移步Blog: https://blog.zhou.icu/archives/acme网站证书自动化保姆级教程 本文参考(复制)自:使用 GitHub Actions 自动申 ...

  6. 【宇麦科技】群晖NAS套件之Drive的安装与使用(一),保姆级教程来喽!

    Synology Drvie 随时存取,不限平台 可从浏览器.桌面客户端,和移动设备上随时存取数据. 同步和备份 通过实时同步.备份和计划备份重要文件夹,保护您的数据,并避免数据因误删或勒索软件威胁而 ...

  7. 保姆级教程!将 Vim 打造一个 IDE (Python 篇)

    从上周开始我就开始折腾 ,搞了一下 Vim IDE for Python & Go,我将整个搭建的过程整理成本篇文章分享出来,本篇是 Python 版本的保姆级教程,实际上我还写了 Go 版本 ...

  8. github博客自动同步到gitee(保姆级教程)

    github博客自动同步到gitee(保姆级教程) 前言: 由于国内网访问github实在太慢!虽然在公司可以连接外网访问还算可以,但是回学校想看看博客或者分享给别人的时候经常会崩掉!于是我想可不可以 ...

  9. 50000字,数仓建设保姆级教程,离线和实时一网打尽(理论+实战) 下

    文档大纲: 本文上半部分之前已经发过了,传送门:50000字,数仓建设保姆级教程,离线和实时一网打尽(理论+实战) 上 此篇文章是整个文档的下半部分,将接着上半部分从第五章开始. 五.实时数仓建设核心 ...

  10. 万字长文:Stable Diffusion 保姆级教程

    万字长文:Stable Diffusion 保姆级教程 2022年绝对是人工智能爆发的元年,前有 stability.ai 开源 Stable Diffusion 模型,后有 Open AI 发布 C ...

最新文章

  1. 微信公众平台开发中-SAE不支持XStream框架的解决方案
  2. MatLab基础设置
  3. 环形链表解法一:快追慢
  4. 如何把自己github博客配置到一个腾讯云购买的自定义域名上
  5. 二狗叫你制作千M网线的线序及方法
  6. jwt令牌_jwt-cli:用于解码JSON Web令牌(JWT令牌)的Shell库
  7. 大型程序是如何开发的_大型小程序如何研发提效
  8. 在XIB里面关于@property,@synthesize,release,dealloc的怪现象
  9. Android ConstraintLayout 最新使用小结
  10. Go语言实战 (William,Kennedy 等著)
  11. Java进阶:SpringMVC数据请求全局过滤器
  12. 《Python金融大数据风控建模实战》第4章 数据清洗与预处理
  13. JAVA注释 关键字 标识符 常量 变量 数据类型 大小 类型转换 字符类型 (算术 赋值 自增自减 比较 逻辑短路现象 位移 三元) 运算符
  14. uva 10041 - Vito's Family
  15. java 句柄无效_Java开发网 - java.io.IOException: 句柄无效???
  16. \t\t盐城范围内野外钓鱼好去处(不是塘钓哟)
  17. 【BP靶场portswigger-服务端1】SQL注入-17个实验(全)
  18. 【Android】Android中如何取消调转界面后EditText默认获取聚焦问题
  19. Single Variable Calculus 总结
  20. 多功能电子密码锁的设计与制作

热门文章

  1. kettle的下载安装以及问题点
  2. Eclipse IDE 使用技巧和Android App 开发环境搭建和配置
  3. usb驱动的基本结构和函数简介
  4. C++Qt开发-错误退出,退出代码2
  5. 第26讲-项目一-投票表决器
  6. OPENWRT 文本(shell) 配置支持oray的花生壳DDNS,Web也可以配置
  7. Linux下编译so文件
  8. office 2010安装
  9. VC2012下MFC程序各控件的常用方法
  10. Illustrator教程之 在 Ai 2022中创建一个新文档