生产环境部署与协同开发 Git

目录

一、前言——Git概述

1.1 Git是什么

 1.2 为什么要使用Git

 什么是版本控制系统

1.3 Git和SVN对比

SVN集中式

Git分布式

1.4 Git工作流程

 四个工作区域

工作流程

 1.5 Git下载安装

1.6 环境配置

 设置用户信息

查看配置信息

二、git基础

2.1 本地初始化仓库

​编辑

2.2 文件的两种状态

查看文件状态命令

untracked未跟踪

tracked已跟踪

2.3 文件加入暂存区

文件(文件夹)复制一份放入暂存区命令

 文件从暂存区删除命令

文件夹从暂存区删除命令

查看暂存区所有文件命令

2.4 文件提交与删除

 文件(文件夹)提交命令

查看本地仓库(版本库)中的文件

 删除文件 

修改commit信息

挽救已被删除的文件或目录


 


一、前言——Git概述

1.1 Git是什么

Git是一种代码托管技术。在开发中,Git是一种代码托管技术,很多代码托管平台也是基于Git来实现的。Git可以帮我们做到很多的事情,比如代码的版本控制,分支管理等。

注意:

我们可以把Git理解成是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。正是因为有了Git的存在,现在很多工作才可以变得相对轻松。

 1.2 为什么要使用Git

 什么是版本控制系统

你可以把一个版本控制系统(缩写VCS)理解为一个“数据库”,在需要的时候,它可以帮你完整地保存一个项目的快照。当你需要查看一个之前的快照(称之为“版本” )时,版本控制系统可以显示出当前版本与上一个版本之间的所有改动的细节。

想法:

因为我们怕在原来的基础改错了东西,没法恢复,所以,我们可能会有多个毕业论文的文件。而我们写代码的时候本身就是「多人协作」的,修改是无法避免的,我们不希望有多个文件的产生,又希望能够记录每次更改的内容。“

这个软件用起来就应该像这个样子,能记录每次文件的改动:

版本文件名用户说明日期
1service.doc张三删除了软件服务条款57/12 10:38
2service.doc张三增加了License人数限制7/12 18:09
3service.doc李四财务部门调整了合同金额7/13 9:51
4service.doc张三延长了免费升级周期7/14 15:17

注意:

结束了手动管理多个“版本”的史前时代,进入到版本控制的20世纪。

1.3 Git和SVN对比

SVN集中式

集中式版本控制系统需要找一个服务器作为大本营,所有的代码都需要提交到服务器上进行统一的管理。当你需要对代码进行改动时,需要先从服务器上下载一份拷贝,修改完成之后,还需要上传回服务器。

SVN优缺点

优点:

  1. 管理员也可以轻松掌控每个开发者的权限。
  2. 代码一致性非常高。
  3. 适合开发人数不多的项目开发。

缺点:

  1. 服务器压力太大,数据库容量暴增。
  2. 如果不能连接到服务器上,基本上不可以工作,看上面第二步,如果服务器不能连接上,就不能提交,还原,对比等等。

Git分布式

在分布式版本控制系统中,大家都拥有一个完整的版本库,不需要联网也可以提交修改,所以中心服务器就显得不那么重要了。

注意:

Git记录版本历史只关心文件数据的整体是否发生变化。Git 不保存文件内容前后变化的差异数据。

Git优缺点

优点:

  1. 适合分布式开发,强调个体。
  2. 公共服务器压力和数据量都不会太大。
  3. 速度快、灵活。
  4. 任意两个开发者之间可以很容易的解决冲突。
  5. 离线工作。

缺点:

  1. 学习周期相对而言比较长。
  2. 不符合常规思维。
  3. 易学难精.

1.4 Git工作流程

 四个工作区域

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

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

Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

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

工作流程

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

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

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

  3. 将暂存区域的文件提交到git仓库(本地仓库)。

 1.5 Git下载安装

注意:

在Windows操作系统中安装 Git之前,先从官方网站(Git)下载合适的Git版本。

 鼠标右键桌面出现如图选项的时候表示git安装成功。

1.6 环境配置

当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息。 

 设置用户信息

鼠标单击 Git Bash Here执行以下命令:

git config --global user.name "zj"
git config --global user.email "xxxxxxxx@qq.com"

查看配置信息

检查当前设置的用户名和邮箱

git config --list
git config user.name

注意:

通过上面的命令设置的信息会保存在~/.gitconfig文件中。我们也可以通过修改这个文件夹来修改我们的个人信息。


二、git基础

2.1 本地初始化仓库

1、创建一个文件夹temp,目的是为了让git对该文件进行版本控制。

2、在temp文件夹中打开git命令窗口并输入以下指令:

git init   #初始化这个目录让Git对这个目录开始进行版本控制。

 此时会在文件夹中会创建一个隐藏的文件叫.git即表示当前目录是工作区目录。

2.2 文件的两种状态

 版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

注意:

Git不关心文件两个版本之间的具体差别,而是关心文件的整体是否有改变,若文件被改变,在添加提交时就生成文件新版本的快照,而判断文件整体是否改变的方法就是用SHA-1算法计算文件的校验和。

查看文件状态命令

git status

可以使用 -s 参数来获取简短的输出结果,常见的几种状态码如下所示:

状态码描述
A暂存区中新增的文件
D文件被删除
M文件被更改
R文件被重命名
??工作区中未被跟踪的文件

untracked未跟踪

未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged(已跟踪状态),就相当于是将文件放到暂存区中。

tracked已跟踪

被纳入版本控制

  • Staged

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

  • Unmodified

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

  • Modified

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

注意:

这些文件的状态会随着我们执行Git的命令发生变化

2.3 文件加入暂存区

文件(文件夹)复制一份放入暂存区命令

git add 文件名(或者是文件夹名)
git add  .  #表示将该文件下未跟踪的文件(文件夹)全部放到暂存区

 文件从暂存区删除命令

git reset 文件名   #文件从暂存区删除会回到工作区变为未跟踪状态。
git rm 文件名  #将暂存区和工作区的文件都删除

文件夹从暂存区删除命令

git reset 文件夹名   #将文件夹和文件夹中的文件从暂存区放到工作区
git rm -rf 文件夹名   #将暂存区和工作区的文件夹和文件夹中的文件都删除

查看暂存区所有文件命令

git ls-files

2.4 文件提交与删除

如果仅是通过git add命令把移动加到暂存区,还不算是完成整个流程。如果想让暂存区的内容永久保存下来,就要使用git commit命令。

 文件(文件夹)提交命令

git commit -m "提交信息"   #将暂存区中所有的文件复制到本地仓库一份

查看本地仓库(版本库)中的文件

git ls-files --with-tree=HEAD

 删除文件 

git rm 文件名  #删除工作区和暂存区的文件(前提是文件添加到了本地仓库中) git commit -m"删除xxx文件"   #在执行git rm的基础上继续使用该命令会将版本库中的文件删除(前提是版本库中存在该文件)

参数:

  • -m : 本次提交做了什么事,只要简单、清楚的文本说明即可,中英文都可以重点是说清楚,能让自己和别人很快明白就行。

        假设我们在temp文件夹中创建一个文件夹叫aaa,一个文件叫ccc.txt,在aaa文件夹下又创建一个叫bbb.txt的文件。此时这些文件全部都在工作区中是未跟踪状态,我们使用git add . 命令将这些文件一次性全部放到暂存区中,此时这些文件就从未跟踪状态变成了跟踪状态。此时我们使用git ls-files命令可以查看在暂存区中的全部的文件包括文件夹。

       如果我们想把ccc.txt仅从暂存区删除仍保留工作区的ccc.txt文件时可以使用git rm --cached ccc.txt命令将暂存区的文件删除,此时工作区的ccc.txt文件就又变成了未跟踪状态。

       但是如果想把aaa文件夹以及该文件夹下的bbb.txt文件从暂存区删除的话只能使用git rm -rf aaa 命令将文件从暂存区和工作区删除。

       如果想要将暂存区中的aaa文件夹及其子文件bbb.txt和ccc.txt文件添加到本地仓库的话需要使用 git commit -m"提交信息"命令来提交,使用git ls-files --with-tree=HEAD 命令可以查看本地仓库中的全部文件。如果想删除本地仓库中的ccc.txt文件的话需要先使用 git rm ccc.txt  命令删除暂存区工作区中的文件,然后再使用git commit -m"删除ccc.txt" 命令删除本地仓库中的ccc.txt文件。要想删除本地仓库中的aaa文件夹及其子文件夹bbb.txt需要先使用git rm -r aaa 命令将文件从暂存区和工作区删除再使用git commit -m"删除aaa文件" 命令删除本地仓库中的aaa文件和bbb.txt文件。

修改commit信息

身为程序员,难免会遇到一些不太顺心的客户或项目。心情不好的时候,在代码或Commit信息中“发泄”一下情绪也是很常见的,只是这要是让客户看见了总是不好解释。

要改动Commit记录有几种方式。

(1)把.git目录整个删除(不建议)。

(2)使用git rebase命令来改动历史记录。

(3)先把 Commit用git reset命令删除,整理后再重新Commit。

(4)使用--amend参数改动最后一次的Commit的信息。

git log --oneline   #查看进行了哪些commit操作
git commit --amend -m "测试commit2"  #使用amend命令修改最后一次提交的信息

挽救已被删除的文件或目录

“人有失手,马有失蹄”,人总会有不小心或状态不好的时候。不管是有意还是无心 在Git中如果不小心把文件或目录删除了,是可以挽救回来的,这也是使用版本控制系统最主要的原因之一。但是前提是暂存区或者本地仓库中存在该文件。

删除本地文件夹中的文件

 rm -rf 文件名称(或者文件夹名称)  

 注意不是 git rm -rf 文件名,这是将暂存区和工作区中的该文件删除的命令。

将本地删除的文件恢复到本地

git checkout 文件名(或者文件夹名)git checkout .   #将删除的全部文件都恢复

小技巧:

这个技巧不仅可以将删除的文件挽救回来,当改动某个文件后反悔了,也可以用它把文件恢复到上一次Commit的状态。不是所有情况下都能恢复被删除的文件的。因为整个Git的记录都是放在根目录下的 .git目录中,如果这个目录被删除了,也就意味着历史记录也被删除了,那么删除的文件也就不能恢复了。

 文件添加至忽略列

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

touch .gitignore     #在git命令行创建.gitignore文件

注意:

  • #匹配规则和linux文件匹配一样
  • #以斜杠“/”开头表示目录
  • #以星号“*”通配多个字符
  • #以问号“?”通配单个字符
  • #以方括号“[]”包含单个字符的匹配列表
  • #以叹号“!”表示不忽略(跟踪)匹配到的文件或目录
# / 表示当前文件所在的目录# 忽略public下的所有目录及文件
/public/*#不忽略/public/assets,就是特例的意思,assets文件不忽略
!/public/assets# 忽略具体的文件
index.class# 忽略所有的class
*.class# 忽略 a.class b.class
[ab].class

2.5 日志记录操作

git log   #查看日志

参数:

  • --graph : 查看分支合并图
  • --oneline : 标记把每一个提交压缩到了一行中
git reflog   #获取执行过的命令

2.6 比较文件差异

diff是指的是两个事物的不同。例如在Linux系统中,diff命令会逐行比较两个文本的差异然后显示出来。

git diff [--cached]

三、Git远程仓库

 码云(地址: https://gitee.com/)是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快。

3.1 注册码云和创建远程仓库

 3.2 远程仓库操作

添加远程仓库

git remote add <shortname><url>

注意:

  • shortname :远程仓库的名字(可以随意取名)
  • url : 远程仓库地址

查看远程仓库

git remote

克隆远程仓库

就是将gitee上的代码拉取到本地

git clone 远程仓库地址url

移除无效的远程仓库

git remote rm  远程仓库名字

3.3 推送和拉取

推送

当你想分享你的代码时,可以将其推送到远程仓库。

git push [远程仓库的名字][分支名称]

注意第一次提交会让你输入username(你注册的手机号码)和password(你设置的密码)

拉取

git pull  #从远程仓库获取最新版本到本地仓库

3.4 多人协作冲突问题

为什么会出现冲突问题

  1. 不同分支下的合并
  2. 同一个分支下的pull后者push

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

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

相关文章

分段三次hermit插值

保形三次hermit插值 一、算法实现 一、插值函数建立 设函数 y F ( x ) yF(x) yF(x)在区间 [ a , b ] [a,b] [a,b]上有定义&#xff0c;且已知在离散点 a x 0 < x 1 < . . . < x n b ax_0<x_1<...<x_n b ax0​<x1​<...<xn​b上的值 y 0 , y…

Linux 查看当前文件夹下的文件大小

1.直接查看: ll 或者 ls -la #查看文件大小&#xff0c;以kb为单位 ll#查看文件大小&#xff0c;包含隐藏的文件&#xff0c;以kb为单位 ls -la2.以 M 或者 G 为单位查看&#xff0c;根据文件实际大小进行合适的单位展示 du -sh *

k8s集群搭建

文章目录 前言一、前置准备1.1 虚拟机准备1.2 关闭swap分区1.3 将桥接的IPv4流量传递到iptables链1.4 开启ipvs 二、容器化环境和组件安装2.1 docker安装2.2 设置docker加速镜像器2.4 设置yum镜像源2.5 安装kubeadm、kubelet和kubectl 三、集群搭建3.1 安装k8s所需镜像3.2 在ha…

LAMP 配置与应用

LAMP 架构的组成 LAM(M)P&#xff1a; L&#xff1a;linux A&#xff1a;apache (httpd) M&#xff1a;mysql, mariadb P&#xff1a;php, perl, python apache的功能&#xff1a; 第一&#xff1a;处理http的请求、构建响应报文等自身服务&#xff1b; 第二&#xff1a…

【C#学习笔记】数据类中常用委托及接口——以List<T>为例

文章目录 List\<T\>/LinkedList \<T\>为什么是神&#xff1f;&#xff08;泛型为什么是神&#xff09;一些常见&#xff0c;通用的委托和接口ComparisonEnumerator List<T>/LinkedList <T>为什么是神&#xff1f;&#xff08;泛型为什么是神&#xff0…

数据结构(Java实现)-栈和队列

栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 先进后出 栈的使用 栈的模拟实现 上述的主要代码 public class MyStack {private int[] elem;private int usedSize;public MyStack() {this.elem new int[5];}Overridepublic …

-9501 MAL系统没有配置或者服务器不是企业版(dm8达梦数据库)

dm8达梦数据库 -9501 MAL系统没有配置或者服务器不是企业版&#xff09; 环境介绍1 环境检查2 问题原因 环境介绍 搭建主备集群时&#xff0c;遇到报错-9501 MAL系统没有配置或者服务器不是企业版 1 环境检查 检查dmmal.ini配置文件权限正确 dmdba:dinstall&#xff0c;内容正…

3.RabbitMQ 架构以及 通信方式

一、RabbitMQ的架构 RabbitMQ的架构可以查看官方地址 可以看出RabbitMQ中主要分为三个角色&#xff1a; Publisher&#xff1a;消息的发布者&#xff0c;将消息发布到RabbitMQ中的ExchangeRabbitMQ服务&#xff1a;Exchange接收Publisher的消息&#xff0c;并且根据Routes策…

安装虚拟机

软硬件准备 软件&#xff1a;推荐使用VMwear&#xff0c;我用的是VMwear 12 镜像&#xff1a;CentOS7 ,如果没有镜像可以在官网下载 &#xff1a;http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1804.iso 硬件&#xff1a;因为是在宿主机上运行虚拟…

Android屏幕显示 android:screenOrientation configChanges 处理配置变更

显示相关 屏幕朝向 https://developer.android.com/reference/android/content/res/Configuration.html#orientation 具体区别如下&#xff1a; activity.getResources().getConfiguration().orientation获取的是当前设备的实际屏幕方向值&#xff0c;可以动态地根据设备的旋…

Maven之hibernate-validator 高版本问题

hibernate-validator 高版本问题 hibernate-validator 的高版本&#xff08;邮箱注解&#xff09;依赖于高版本的 el-api&#xff0c;tomcat 8 的 el-api 是 3.0&#xff0c;满足需要。但是 tomcat 7 的 el-api 只有 2.2&#xff0c;不满足其要求。 解决办法有 2 种&#xff…

RocketMQ mqadmin java springboot python 调用笔记

命令 mqadmin命令列表 yeqiangyeqiang-MS-7B23:/opt/rocketmq-all-5.1.3-bin-release$ sh bin/mqadmin The most commonly used mqadmin commands are:updateTopic Update or create topicdeleteTopic Delete topic from broker and NameServer.…

【深度学习_TensorFlow】过拟合

写在前面 过拟合与欠拟合 欠拟合&#xff1a; 是指在模型学习能力较弱&#xff0c;而数据复杂度较高的情况下&#xff0c;模型无法学习到数据集中的“一般规律”&#xff0c;因而导致泛化能力弱。此时&#xff0c;算法在训练集上表现一般&#xff0c;但在测试集上表现较差&…

亿发浙江生产工厂信息化建设管理平台,实现生产智能化、数字化

在全球化、科技深刻变革的时代&#xff0c;浙江省信息化建设正迎来新的发展机遇。以物联网、人工智能大数据、为代表的新技术应用&#xff0c;为人类社会带来了智能、便捷&#xff0c;也标志着新一代信息化浪潮已经到来。特别是在生产型企业中&#xff0c;智能制造是生产型企业…

运用Python解析HTML页面获取资料

在网络爬虫的应用中&#xff0c;我们经常需要从HTML页面中提取图片、音频和文字资源。本文将介绍如何使用Python的requests库和BeautifulSoup解析HTML页面&#xff0c;获取这些资源。 一、环境准备 首先&#xff0c;确保您已经安装了Python环境。接下来&#xff0c;我们需要安…

HUT23级训练赛

目录 A - tmn学长的字符串1 B - 帮帮神君先生 C - z学长的猫 D - 这题用来防ak E - 这题考察FFT卷积 F - 这题考察二进制 G - 这题考察高精度 H - 这题考察签到 I - 爱派克斯&#xff0c;启动! J - tmn学长的字符串2 K - 秋奕来买瓜 A - tmn学长的字符串1 思路&#x…

CSS中如何实现背景图片的平铺和定位?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 平铺背景图片⭐ 背景图片定位⭐ 同时设置平铺和定位⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是…

3D点云处理:基于2D边缘提取的方法提取3D点云边缘(占位待补充)

文章目录 0. 实现效果 微信&#xff1a;dhlddx B站演示视频 0. 实现效果

1.1 数据库系统简介

思维导图&#xff1a; 1.1.数据库系统简介 前言&#xff1a; 数据库系统是一个软件系统&#xff0c;用于管理和操作数据库。它提供了一个组织良好、高效并能够方便存取的数据存储机制&#xff0c;并且能够支持各种数据操作、事务管理、并发控制和恢复功能。以下是数据库系统的…

基于PIC单片机温度-脉搏-DS18B20温度-液晶12864显示(proteus仿真+源程序)

一、系统方案 1、上电初始化液晶第一行显示脉搏&#xff0c;第二行显示温度&#xff0c;第三行显示模式&#xff0c;第四行显示强度&#xff1b;按下K1按键可以选择模式&#xff0c;催眼模式或治疗模式。 2、治疗模块下&#xff0c;可以通过K2、K3修改强度。 二、硬件设计 原理…