版本管理之Git

news2025/1/17 21:48:04

一.版本控制器的方式

1.1集中式版本控制工具

集中式版本控制工具,版本库是集中存放在中央服务器的,team里每个人work时从中央服务器下载代 码,是必须联网才能工作,局域网或互联网。个人修改后然后提交到中央版本库。

举例:SVN和CVS

1.2分布式版本控制工具

分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样工作的时候就不需要联网了,因为版本库就在你自己的电脑上。多人协作只需要各自的修改推送给对方,就能互相看到对方的 修改了。

举例:Git

二.Git本地仓库操作

1.1设置用户信息

git config --global user.name “111”
git config --global user.email “222”

查看配置信息

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

1.2获取本地仓库

要使用Git对我们的代码进行版本控制,首先需要获得本地仓库

1)在电脑的任意位置创建一个空目录(例如test)作为我们的本地Git仓库

2)进入这个目录中,点击右键打开Git bash窗口

3)执行命令git init

4)如果创建成功后可在文件夹下看到隐藏的.git目录。

1.3基础操作指令

Git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git 的命令而发生变化。

1. git add (工作区-->暂存区)

2. git commit (暂存区--> 本地仓库)

查看状态

  • 作用:查看的修改的状态(暂存区、工作区)

  • 命令形式:git status

添加工作区到暂存区(add)

  • 作用:添加工作区一个或多个文件的修改到暂存区

  • 命令形式:git add 单个文件名|通配符

将所有修改加入暂存区:git add .

git-demo下除了.git之外的都属于工作区

提交暂存区到本地仓库(commit)

  • 作用:提交暂存区内容到本地仓库的当前分支

  • 命令形式:git commit -m '注释内容'

查看提交日志(log)

  • 作用:查看提交记录

  • 命令形式:git log [option]

options:

--all 显示所有分支

--pretty=oneline 将提交信息显示为一行

--abbrev-commit 使得输出的commitId更简短

--graph 以图的形式显示

git log --pretty=oneline --all --graph --abbrev-commit可以让日志看起来更加直观,我们可以给这个指令起别名(git-log)来简化输入

#用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
#用于输出当前目录所有文件及基本信息
alias ll='ls -al'

版本回退

  • 作用:版本切换

  • 命令形式:git reset --hard commitID

commitID 可以使用 git-log(前面自定义的指令) 或 git log 指令查看,并不需要全部,只需要前面几位就够了

查看所有操作记录

git reflog 可以查看所有分支的所有操作记录(包括(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录

1.4添加文件至忽略列表

添加文件至忽略列表 一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动 生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以在工作目录 中创建一个名为 .gitignore 的文件(文件名称固定),列出要忽略的文件模式。

Git 忽略规则优先级

在 .gitingore 文件中,每一行指定一个忽略规则,Git 检查忽略规则的时候有多个来源,

它的优先级如下(由高到低):

从命令行中读取可用的忽略规则
当前目录定义的规则
父级目录定义的规则,依次递推
$GIT_DIR/info/exclude 文件中定义的规则
core.excludesfile中定义的全局规则

Git 忽略规则匹配语法

空格不匹配任意文件,可作为分隔符,可用反斜杠转义
开头的文件标识注释,可以使用反斜杠进行转义
! 开头的模式标识否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用 ! 也不会再次被包含。可以使用反斜杠进行转义
/ 结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件
/ 开始的模式匹配项目跟目录
如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录
** 匹配多级目录,可在开始,中间,结束
? 通用匹配单个字符
* 通用匹配零个或多个字符
[] 通用匹配单个字符列表

常用匹配示例

bin/: 忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
/bin: 忽略根目录下的bin文件
/*.c: 忽略 cat.c,不忽略 build/cat.c
debug/*.obj: 忽略 debug/io.obj,不忽略 debug/common/io.obj 和 tools/debug/io.obj
**/foo: 忽略/foo, a/foo, a/b/foo等
a/**/b: 忽略a/b, a/x/b, a/x/y/b等
!/bin/run.sh: 不忽略 bin 目录下的 run.sh 文件
*.log: 忽略所有 .log 文件
config.php: 忽略当前路径的 config.php 文件

.gitignore规则不生效

.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。

解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

如果你想添加一个文件到Git,但发现添加不了,原因是这个文件被.gitignore忽略了:

$ git add App.class
The following paths are ignored by one of your .gitignore files:
App.class
Use -f if you really want to add them.

1.5分支

几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离 开来进行重大的Bug修改、开发新的功能,以免影响开发主线。

三.Git与远程仓库交互

四.Git工作流程图

命令如下:

1. clone(克隆): 从远程仓库中克隆代码到本地仓库

2. checkout (检出):从本地仓库中检出一个仓库分支然后进行修订

3. add(添加): 在提交前先将代码提交到暂存区

4. commit(提交): 提交到本地仓库。本地仓库中保存修改的各个历史版本

5. fetch (抓取) :从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。

6. pull (拉取) :从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于fetch+merge

7. push(推送) : 修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库

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

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

相关文章

巧用回调函数解决微信小程序与后台数据交互出现的异步问题

问题描述 微信小程序端需要发送一个包含文字与图片的表单数据给后端,我一开始的思路是先上传图片得到临时的URL,后执行POST请求将表单数据发送给后端,但后端只能获取到文字,而图片URL却始终获取不到。 问题原因 注意看我上面的思路…

目标检测研究

传统的目标检测流水线 1.候选区域生成 通过滑动窗口选择感兴趣区域Rol;使用多尺寸的输入图像和多尺度的滑动窗口识别多尺度和不同比例的目标。 ⒉特征向量抽取 常用SIFT、 Harr、HOG、SURF。 3.区域分类 常用支持向量机。 结合集成、串联学习、梯度…

3D俯视角色割草游戏模板+视频教程,免费发布 | 一周精品推荐

大家好,我是晓衡。新年开工第一周,我就被热心的开发者们感动得热泪盈眶!今天我冒死推荐几款 Creator 游戏开发资源,希望能对得起这些开发者们,同时也希望你能也有所收获。3D俯视角割草游戏视频源码B 站 UP 主『好巧啊c…

MyBatis 数据查询语句中有关于大于,小于的书写方法 及 查询时相关sql 关键字

前言 提示:这里记录的大概内容: MyBatis 数据查询语句中有关于大于,小于的书写方法 一、MyBatis MyBatis 本是 apache 的一个开源项目 iBatis, 2010 年这个项目由 apache software foundation 迁移到了 google code,并且改名为…

Python封装、继承和多态

Python 语言在设计之初,就定位为一门面向对象的编程语言,“Python 中一切皆对象”。同时,Python 也支持面向对象的三大特征:封装、继承和多态。 一、封装 封装(Encapsulation),即在设计类时&am…

讲师邀请 | 在 DevData Talks,开放务实地聊聊研发效能!

什么是 DevData Talks? DevData Talks 是专注于研发效能实践经验与方法论的系列分享活动。 2022 年,我们既看到外部环境变幻莫测,也看到研发效能领域沉下心来稳步发展,从宏大的概念和价值,转向具体的问题&#xff0c…

若依框架代码自动生成器研究-表查询篇

最近生产环境用了一个开源系统:若依,其中有一个版块很有意思,很能提高生产效率: “代码生成器”。 其功能所处模块菜单为:系统工具->代码生成。我们来研究一下他的代码生成逻辑。 工具使用方法 1、建表 使用代码生成&#…

Python列表中你所不知道的事

1. 引言 目前,Python是世界上使用最广泛、最受欢迎的编程语言之一。Python丰富的功能性使它非常流行,因为我们可以使用它创建任何内容。我将在本博客中与大家分享关于Python列表的几条有趣的花絮。 闲话少说,我们直接开始吧! 2.…

如何高薪入职心仪的公司

序 本文首发自:稀土掘金、思否 我们从几个问题开始入手,来看一下本博客是否适合你: 如果你想要换工作,但是:制作的简历平平无奇如果你想要换工作,但是:投放了的简历总是无法得到 [心仪公司] 的…

SpringBoot+Vue茶叶商城系统

简介:本项目采用了基本的SpringBootVue设计的茶叶商城系统。详情请看主要截图。经测试,本项目正常运行。本项目适用于Java毕业设计、课程设计学习参考等用途。 项目描述 项目名称SpringBootVue茶叶商城系统源码作者LHL项目类型Java EE项目 (…

C#windows彩票信息管理

摘要:近年来,中国彩票行业已经进入市场急速扩张和加速上升的阶段,即开票占整个彩票销量的比率也将急剧上扬。自助售彩终端,这一崭新的售彩模式已被中国彩民接受,爆发点很快来临。到2020年,我国多功能彩票自…

百趣代谢组学文献分享:OnPLS方法在哮喘领域应用研究

百趣代谢组学文献分享,本周分享的文献题目为OnPLS-Based Multi-Block Data Integration: A Multivariate Approach to Interrogating Biological Interactions in Asthma,是由日本前桥群马大学创新研究中心Craig E. Wheelock教授课题组在2018年发表于Ana…

商业智能 BI 人员的六个Level,你到了哪一层?

现在商业智能 BI 行业的从业人员越来越多,但很多人对于自己的职业规划可能并不是特别的清晰,不知道在这个细分领域到底有多大的成长空间,未来大概可以走到哪一个层次。 今天大概介绍下这六个层次,可以是大多数从事商业智能 BI 工…

【计算机程序设计思想与方法】1 什么是计算?

计算是利用计算机解决问题的过程,计算机科学是关于计算的学问。 计算机科学家在用 计算机解决问题时形成了特有的思维方式和解决方法,即计算思维。 1.1 什么是计算? 1.1.1 计算机与计算 计算机是当代最伟大的发明之一。 自从人类制造出第一台电子数字计算机,迄今已近 …

面试题-Java集合常见问题

1 常见集合集合相关类和接口都在java.util中,主要分为三中List(列表)、Map(映射)和Set(集合)其中Collection是集合List、Set的父接口,它主要有两个子接口:List:存储的元素有序,可重复。ArrayList基于数组实现LinkedLis…

STM32开发(二)CubeMX详解构建基本框架

文章目录STM32 CubeMX背景STM32 CubeMX基本配置选择芯片型号新建工程配置系统时钟、调试口、GPIO配置时钟配置配置GPIO (LED为例)GENERATE CODE 生成代码使用工具:CubeMX STM32 CubeMX背景 玩过STM32单片机的朋友都知道,以前的时…

网络协议栈简单设计(udp)

网络协议栈简单设计 操作系统内核中实现了网络协议栈,但今天利用netmap(也可利用dpdk)绕过内核协议栈进行网络数据的收发 netmap 内核协议栈加载数据: 数据从网卡到内核再到内存,需要经过两次拷贝 netmap映射数据&…

List底层源码剖析之List扩容机制

在list集合中有一个add方法: 在众多类中,最长使用的是ArrayList,其中有个方法是add方法 在add方法底层存在 private int size; ensureCapacityInternal(size 1) 其中的size1会对add()方法的调用次数进计数&#x…

Docker系列(常用命令) 02

Docker常用命令总结 docker官方命令文档 一、Docker环境信息命令 docker version # 查看docker版本信息 docker info # 查看docker详细信息二、系统日志信息常用命令 2.1 docker events 作用:从服务器获取实时事件,比如:启动、关闭和创…

九龙证券|美国散户疯狂抄底,嗅到了什么?华尔街最新警告

当地时间周五,美股三大指数低开后经历“过山车”行情,虽然盘中一度转涨,但午后再度回落。截至收盘,道指跌0.38%,报收33926.01点;纳指跌1.59%,收于12006.95点;标普500指数跌1.04%&…