设为首页 收藏本站
查看: 1248|回复: 0

[经验分享] GIT(2)-从文件生命周期看提交流程

[复制链接]

尚未签到

发表于 2018-9-17 09:26:41 | 显示全部楼层 |阅读模式
  GIT的上一篇文章比较枯燥无味,理论性较强,也是难以引起共鸣!所以今天从实在操作方面说一下GIT使用过程中,使用最多的流程-提交到仓库
  开始说明提交流程之前,先看一下上篇提到的GIT整体架构图。
DSC0000.png

  对!还是这张画的比较丑的图![捂脸]!
  本章要说的内容,就是上面这张图的前面部分,如下:
DSC0001.png

  只有提交本地仓库的流程,并没有涉及到远程仓库。关于提交流程,常用的命令:add和commit,add负责提交到暂存区,commit提交到仓库。但并不是只有这两个命令就足够了。下面开始正文。
  
  准备你的环境
  
  操作系统:centos7
  GIT版本:git version 1.8.3.1
  在开始之前,我们先需要做一些初始化工作。
  1. 配置环境
  提交git仓库,需要做两个基本的配置操作:
  $ git config --global user.name poloxue
  $ git config --global user.email peitiang@163.com
DSC0002.png

  配置你的姓名与邮箱地址。关于git配置还有很多内容,本章内容重点不在于此,就不作过多详解。
  
  2. 准备仓库
  首先我们需要一个git仓库,两个命令可以实现: init 和 clone。
  a. git init
  init是通过初始化本地目录的方式创建仓库。
  首先,创建一个测试的文件夹。
  执行初始化操作,查看文件夹变化
DSC0003.png

  此时仓库文件夹下多出了一个.git的文件,上面一节对.git有过简单说明。我们的暂存区和本地仓库就是存在于这个文件下面。
  b. git clone
  clone通过远程克隆方式获取版本库。本人刚开始使用git的时候,以为git像svn一样需要依赖远程,获取仓库首先想到的是去github上面clone。clone使用很简单: git clone 仓库地址。
DSC0004.png

  同样效果,我们拥有了一个可以操作的版本库,你可以修改和进行本地提交
  。
  
  提交流程
  文章标题为从文件生命周期看提交流程,首先一个文件在整个生命周期可能存在哪些状态,如下:
  未追踪 untracked file
  已暂存 staged file
  未更新 no updated file
  已更新 updated file
  还是先动手画个图,如下:
DSC0005.png

  上面的图以文件状态的角度出发,指出了一个文件从创建到提交文件仓库再到脱离仓库追踪的整个过程可能经历的各种状态。
  在开始正文之前先介绍一下GIT查看仓库中文件状态的命令:git status。如果仓库文件有所变化,执行此命令可以查看各个变化文件状态。
  1. 未追踪
  在工作目录下新创建的一个文件初始状态处于未追踪状态。此时,此文件不受版本系统的控制。
  下面在我们之前初始化为git仓库的experiment的工作目录,新建一个README.md。然后随意输入一些内容。使用git status查看一下当前仓库状态,如下:
DSC0006.png

  上面的图以文件状态的角度出发,指出了一个文件从创建到提交文件仓库再到脱离仓库追踪的整个过程可能经历的各种状态。
  在开始正文之前先介绍一下GIT查看仓库中文件状态的命令:git status。如果仓库文件有所变化,执行此命令可以查看各个变化文件状态。
  1. 未追踪
  在工作目录下新创建的一个文件初始状态处于未追踪状态。此时,此文件不受版本系统的控制。
  下面在我们之前初始化为git仓库的experiment的工作目录,新建一个README.md。然后随意输入一些内容。使用git status查看一下当前仓库状态,如下:
DSC0007.png

  此时READM.md为untracked file,下面提示 Use "git add ..." to include in what will be committed,即为使用git add命令去添加将被提交的文件。似乎没有说明怎么追踪文件,继续看,如需要被追踪 use "git add" to track, 意为使用git add追踪文件。
  2. 已更新
  为了下面的内容更方便讲解,先来说说文件的已更新状态。
  啥叫已更新呢?个人总结,上图中把文件的三种情况都归于已更新:编辑更新,冲突更新,删除更新。下面从这三种更新的角度来谈谈,看看这些更新状态如何产生。
  a. 编辑更新
  编译更新就是因我们修改文件而导致的更新。下面看下如何产生一个编辑更新状态的文件。
  首先,快速通过以下三步添加一个新文件modify.php到版本库中。
  $ touch modify.php
  $ git add modify.php
  $ git commit -m "new file modify.php"
  下面我们修改文件modify.php,添加任意内容,修改之后,git status查看状态:
DSC0008.png

  可以看到此时,modify文件处于modified状态。我们使用git时,大多数更新都是属于这种类型。
  b. 冲突更新
  冲突更新是怎么产生的呢?我们知道GIT支持强大的分支功能,前面说明GIT的优点也提到了这个问题。但是分支就会有一个问题,两个分支同时修改同一文件的同一部分内容,冲突就产生了。下面演示这种类型的更新如何产生?
  首先,快速通过以下三步添加一个新文件conflict.php到版本库中。
  $ touch conflict.php
  $ git add conflict.php
  $ git commit -m "new file conflict.php"
  创建两个分支:feature
  $ git branch feature
  在master上conflict.php添加内容: master
  在feature上conflict.php添加内容: feature
  在master执行合并操作:
  $ git merge feature
DSC0009.png

  可以看到,冲突就是这么容易就产生了。团队合作开发时,冲突更新也是我们平时最不喜欢遇到的,如果冲突的内容都是自己的,那还好处理。如果涉及了大量的人员,这其中就会有大量的沟通成本。
  c. 删除更新
  删除也算更新,这个逻辑理解起来有点怪。但删除毕竟改变了文件内容,让文件不存在了,所以也算更新[苦笑不得]。这种更新如何产生呢?
  首先,快速通过以下三步添加一个新文件delete.php到版本库中。
  $ touch delete.php
  $ git add delete.php
  $ git commit -m "new file delete.php"
  提交之后,手动删除delete.php文件
  $ rm delete.php
DSC00010.png

  3. 已暂存
  在上面的1、2两段,关于未追踪和已更新,总结的是工作区文件存在的各种状态。但是在把文件提交到版本之前,还需要中间的一个过渡阶段:暂存区。文件提交到暂存区便是已暂存状态。看上面文件各个状态之间的转化图,我们知道文件可以由未跟踪和已更新两种状态转化而来。
  由之前的操作,现在已经有了各种状态的文件:
  未追踪文件:README.md
  编辑更新文件:modify.php
  冲突更新文件:conflict.php
  删除更新文件:delete.php
  下面如何使用git add将这些文件添加到暂存区:
  git add -A 最省事,所有文件添加到暂存区;
  git add -u 已更新文件添加暂存区,即modify.php conflict.php delete.php;
  git add . 将除删除更新的其他文件加到暂存区,即README.md modify.php conflict.php;
  git add * 会忽略.gitignore规则,把本来应忽略文件添加暂存区,慎用;
  当不确定时,可直接添加某文件git add filepath;
  $ git add modify.php;
  删除更新也可以使用git rm命令,直接将删除文件提交到暂存区同时删除文件,如需删除提交暂存区但工作区文件保留可使用选项--cached:
  $ git rm delete.php
  $ git rm delete.php --cached
  好!下面把所有文件提交到暂存区:
  $ git add -A
  此时,git status查看文件状态:
DSC00011.png

  因为同时存在删除和新建,delete.php被认为rename为README.md,不深究了,正常情况工作区文件状态与暂存区的对应关系如下:
  工作区
  暂存区
  untracked
  new file
  modified
  modified
  both modified
  modified
  deleted
  deleted
  4. 未更新
  怎么让文件转化为未更新状态呢?提交仓库!我们已经把所有内容提交暂存,下面可以借助于commit命令进行仓库提交:
  a. 常用方式
  提交仓库的常用,执行如下命令:
  $ git commit -m "feat: new function"
  再查看文件状态,发现已经没有内容可以提交,此时仓库处于未更新的状态。
  b. 编辑更新直接提交到仓库
  git commit -am "message"可以将编辑更新直接从工作区提交仓库,即跨过暂存区。不支持删除与冲突更新和新文件的提交。
  c. 提交修订
  如提交有误,支持对当前提交进行修订。
  $ git commit --amend
  一是可用来修改提交日志;二是用来提交漏掉文件,仍保持为一个提交。
  本文主要从GIT文件的生命周期来看整个提交流程。为了便于理解,自己总结了编辑更新、删除更新、冲突更新几个新词,希望不会造成误解。当然能影响到文件状态的命令还有一些,后面会在其他专题有所涉及!
  未完待续 ...


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-588102-1-1.html 上篇帖子: GIT(1)-概述与架构 下篇帖子: Windows 下使用git 将代码托管到开源中国-(http://git.oschina.net/)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表