Git基本概念及工作流介绍

未分类

git介绍

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Torvalds 开始着手开发 Git 来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。例如 很多 Freedesktop 的项目迁移到了 Git 上。

Git基础

Git首先需要掌握的概念

  • 工作区:就是在电脑里能看到的目录
  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库,版本库里面存了很多东西,其中最重要的就是暂存区(stage或index),Git为我们自动创建的第一个分支master,以及指向master分支的一个指针叫做HEAD
  • 远程库(中央仓库)

结构如下所示:

未分类

工作区内修改的代码提交到远程库需要三步:

  • git add把代码文件添加到暂存区
  • git commit把暂存区的内容提交到当前分支
  • git push把代码推到远程库

Git工作流

掌握工作流能更好的实现团队间通过远程库进行协作。

中心化的工作流

中心化的工作流需要远程库存在一个master分支即可

未分类

A和B同时对项目修改,A和B的本地都有了各自的历史,A先提交代码到远程库,不会发生问题,B再提交的时候就会产生冲突
远程库在这里作为中央仓库代表官方项目,因此它的提交历史应该被视作神圣不可更改的。如果开发者的本地提交和中央仓库分叉,Git会拒绝将他们的修改推送上去,因为这会覆盖官方提交
冲突解决办法:先将代码拉到本地,再执行rebase操作

完整命令

git pull --rebase origin master

合并过程如有冲突,需手动进行修改,可以用git status查看当前工作区状态
合并完成后

git push origin master

Feature分支的工作流

未分类

团队成员在不同的分支上修改不同功能,等待功能模块完成后再合并到主分支。隔离功能开发后,通过pull request合并代码,也可以和其他成员沟通,其他成员对代码查看和提问。

我们项目组中使用这种工作流

GitFlow工作流

GitFlow工作流围绕项目发布定义了一个严格的分支模型,方便管理大型项目。和功能分支相比,这种工作流没有增加任何新的概念或命令。除了功能分支之外,它还为准备发布、维护发布、记录发布分别是用了单独的分支。
它有两个分支来记录项目历史。master分支存储官方发布历史,develop分支整合功能分支,这两个分支不直接交互。
开发分支:如果develop分支的新功能足够发布,可以从develop分支fork一个发布分支,只有和发布相关的任务应该在这个分支进行,如修复bug、生成文档等。完成发布后,发布分支合并会master和develop分支

维护分支,通常有以下约定:

  • 从develop创建
  • 合并进master分支
  • 命名规范release-*

Fork工作流

未分类

Fork工作流与其他工作流不同的是,每个开发者都有一个远程代码库和本地代码库,Fork工作流的主要优点在于贡献可以轻易地整合进项目,而不需要每个人都推送到单一的远程库,开发者将代码推到个人仓库后在告知中央仓库需要合并代码
项目管理员执行合并操作时可以有两步:

直接检查PullRequest中检查代码
将代码拉取到本地仓库然后手动合并

以上对Git使用做了大致总结,欢迎补充。

鲁大师问:Git最常用和最不常用的5个命令分别是什么?
我答:
最常用的

git status
git log --oneline
git commit
git fetch
git merge

最不常用的

git pull
git add
git rebase
git clone
git reflog