git的实战应用 | 青训营

62 阅读4分钟

git历史

Git历史 Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众多的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。 到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。 到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标:

  • 速度
  • 简单的设计
  • 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
  • 完全分布式
  • 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

git 工作流程

image.png 首先看上图,先清楚Workspace:工作区,Index/Stage:暂存区Repository:仓库区(或本地仓库),Remote:远程仓库了解上述概念后。

我们在使用git的时候,如果是使用别人的仓库的话。

  1. 首先我们会将remote使用fetch/clone命令将别人代码放入到自己本地仓库。
  2. 然后经过checkout将代码放入我们的工作区之中。 第二次及以后,我们首先需要从远程仓库pull更新后的代码进入我们的工作区。

那我们如果需要进行将本地代码推向远程仓库,该怎么办呢? 首先我们将更改后的代码add到index,然后简单介绍修改的原因和内容然后commit进入本地仓库。最后push到远程仓库。

git相关命令

初始化仓库

随便打开一个文件夹,然后我们在git base页面中输入这段命令git init后,打开隐藏文件夹就会发现有一个.git文件存在,但是这个本地目录还没有关联到远程仓库。

git add *.c
git add README
git commit -m '初始化项目版本'

以上命令将目录下以 .c 结尾及 README 文件提交到仓库中。

克隆git仓库

我们使用 git clone 从现有 Git 仓库中拷贝项目。

克隆仓库的命令格式为:

git clone <repo>

如果我们需要克隆到指定的目录,可以使用以下命令格式:

git clone <repo> <directory>

参数说明:

  • repo: Git 仓库。
  • directory: 本地目录。

创建仓库命令

下表列出了 git 创建仓库的命令:

命令说明
git init初始化仓库
git clone拷贝一份远程仓库,也就是下载一个项目。

提交与修改

git add添加文件到暂存区
git status查看仓库当前的状态,显示有变更的文件。
git diff比较文件的不同,即暂存区和工作区的差异。
git commit提交暂存区到本地仓库。
git reset回退版本。
git rm将文件从暂存区和工作区中删除。
git mv移动或重命名工作区文件。

熟悉linux命令可以发现,这里大部命令和Linux的命令都是相像的。

提交日志

命令说明
git log查看历史提交记录
git blame <file>以列表形式查看指定文件的历史修改记录

远程操作

命令说明
git remote远程仓库操作
git fetch从远程获取代码库
git pull下载远程代码并合并
git push上传远程代码并合并

git的分支管理

这一个部分是git的重头戏,因为几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

也就意味着git分支减少代码冲突的可能性,实现分支开发后汇总到总文件之中。

image.png

如上图所示,假设现在有一个业务环境,我们有两个主要模块。首先我们先做整体架构的设计,然后一个开发小组新建一条分支用于开发第二个的模块。主分支由一个开发小组负责,后面又提出了新的需求就会再开一条分支由其他开发小组进行开发。等开发完成,再进行统一的汇总到主分支之中。

遇到分支冲突的情况,我们需要去查看相关冲突代码然后确定那个是需要写入远程仓库的,然后进行分支合并。如果出错了,应该及时进行版本的回退重新规划。