Git 进阶(一):版本控制与工作流程

在日常工作中,经常会用到Git操作。但是对于Git很多概念和操作都很知其然,不知其所以然。博主接下来将好好整理Git的基本原理,常用的一些命令等知识分享在这里。本文主要介绍Git的四大工作区与工作流程。持续更新,详见:风尘博客

一、Git 版本控制

1、什么是版本控制?

版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。一句话就是用于管理多人协同开发项目的技术。

优点:

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

2、常用术语

1)、仓库(Repository)

受版本控制的所有文件修订历史的共享数据库

2)、工作空间(Workspace)

本地硬盘或 Unix 用户帐户上编辑的文件副本

3)、工作树/区(Working tree)

工作区中包含了仓库的工作文件。您可以修改的内容和提交更改作为新的提交到仓库。

4)、暂存区(Staging area)

暂存区是工作区用来提交更改(commit)前可以暂存工作区的变化。

5)、索引(Index)

索引是暂存区的另一种术语。

6)、签入(Checkin)

将新版本复制回仓库

7)、签出(Checkout)

从仓库中将文件的最新修订版本复制到工作空间

8)、提交(Commit)

对各自文件的工作副本做了更改,并将这些更改提交到仓库

9)、冲突(Conflict)

多人对同一文件的工作副本进行更改,并将这些更改提交到仓库

10)、合并(Merge)

将某分支上的更改联接到此主干或同为主干的另一个分支

11)、分支(Branch)

从主线上分离开的副本,默认分支叫 master

12)、锁(Lock)

获得修改文件的专有权限。

13)、头(HEAD)

头是一个象征性的参考,最常用以指向当前选择的分支。

14)、修订(Revision)

表示代码的一个版本状态。Git 通过用 SHA1 hash 算法表示的 ID 来标识不同的版本。

15)、标记(Tags)

标记指的是某个分支某个特定时间点的状态。通过标记,可以很方便的切换到标记时的状态。

3、Git 与 SVN 最主要区别

SVN

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

Git

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

二、Git 工作流程

Git 总结一:Git 版本控制与工作流程

1、四个区域介绍

Workspace:工作区

程序员进行开发改动的地方,是你当前看到的,也是最新的。

平常我们开发就是拷贝远程仓库中的一个分支,基于该分支进行开发。在开发过程中就是对工作区的操作。

Index / Stage: 暂存区

.git 目录下的 index 文件, 暂存区会记录git add添加文件的相关信息(文件名、大小、timestamp...),不保存文件实体, 通过 id 指向每个文件实体。可以使用git status查看暂存区的状态。暂存区标记了你当前工作区中,哪些内容是被 git 管理的。

当你完成某个需求或功能后需要提交到远程仓库,那么第一步就是通过git add先提交到暂存区,被 git 管理。

Repository:本地仓库

保存了对象被提交 过的各个版本,比起工作区和暂存区的内容,它要更旧一些。

git commit后同步 index 的目录树到本地仓库,方便从下一步通过git push同步本地仓库与远程仓库的同步。

Remote:远程仓库

远程仓库的内容可能被分布在多个地点的处于协作关系的本地仓库修改,因此它可能与本地仓库同步,也可能不同步,但是它的内容是最旧的。

2、四个区域的关系

总结:

  1. 任何对象都是在工作区中诞生和被修改;
  2. 任何修改都是从进入 index 区才开始被版本控制;
  3. 只有把修改提交到本地仓库,该修改才能在仓库中留下痕迹;
  4. 与协作者分享本地的修改,可以把它们 push 到远程仓库来共享。

未完待续!


猜你喜欢

转载自blog.csdn.net/qq_41690817/article/details/80465882