git历史
Git历史
Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众多的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。 到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统 BitKeeper 来管理和维护代码。
到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用 BitKeeper 时的经验教训,开发出自己的版本系统。
他们对新的系统制订了若干目标:
- 速度
- 简单的设计
- 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
- 完全分布式
- 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
git 工作流程
首先看上图,先清楚Workspace:工作区,Index/Stage:暂存区Repository:仓库区(或本地仓库),Remote:远程仓库了解上述概念后。
我们在使用git的时候,如果是使用别人的仓库的话。
第二次及以后,我们首先需要从远程仓库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
如果我们需要克隆到指定的目录,可以使用以下命令格式:
git clone
参数说明:
- 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 |
以列表形式查看指定文件的历史修改记录 |
远程操作
命令 | 说明 |
---|---|
git remote |
远程仓库操作 |
git fetch |
从远程获取代码库 |
git pull |
下载远程代码并合并 |
git push |
上传远程代码并合并 |
git的分支管理
这一个部分是git的重头戏,因为几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
也就意味着git分支减少代码冲突的可能性,实现分支开发后汇总到总文件之中。
如上图所示,假设现在有一个业务环境,我们有两个主要模块。首先我们先做整体架构的设计,然后一个开发小组新建一条分支用于开发第二个的模块。主分支由一个开发小组负责,后面又提出了新的需求就会再开一条分支由其他开发小组进行开发。等开发完成,再进行统一的汇总到主分支之中。
遇到分支冲突的情况,我们需要去查看相关冲突代码然后确定那个是需要写入远程仓库的,然后进行分支合并。如果出错了,应该及时进行版本的回退重新规划。