专栏名称: Linux爱好者
伯乐在线旗下账号,「Linux爱好者」专注分享 Linux/Unix 相关内容,包括:工具资源、使用技巧、课程书籍等。
目录
相关文章推荐
Linux就该这么学  ·  微软旗下 LinkedIn ... ·  昨天  
Linux就该这么学  ·  小米全球总部 “15元员工餐” ... ·  3 天前  
Linux就该这么学  ·  更适合中国程序员体质的春联,对对扎心,总有一 ... ·  3 天前  
Linux就该这么学  ·  漏洞扫描工具 -- SBScan ·  4 天前  
Linux就该这么学  ·  DeepSeek ... ·  5 天前  
51好读  ›  专栏  ›  Linux爱好者

Git 版本控制与工作流

Linux爱好者  · 公众号  · linux  · 2017-04-04 20:14

正文

(点击上方蓝字 ,快速关注我们)


来源:伯乐在线专栏作者 - SamLau

如有好文章投稿,请点击 → 这里了解详情



Git Version Control


这篇文章是针对git版本控制和工作流的总结,如果有些朋友之前还没使用过git,对git的基本概念和命令不是很熟悉,可以从以下基本教程入手:


  • 专为设计师而写的GitHub快速入门教程

  • git – 简明指南

  • 学习Git的在线互动教程


基本概念


Git是什么?


Git是分布式版本控制系统,与SVN类似的集中化版本控制系统相比,集中化版本控制系统虽然能够令多个团队成员一起协作开发,但有时如果中央服务器宕机的话,谁也无法在宕机期间提交更新和协同开发。甚至有时,中央服务器磁盘故障,恰巧又没有做备份或备份没及时,那就可能有丢失数据的风险。


但Git是分布式的版本控制系统,客户端不只是提取最新版本的快照,而且将整个代码仓库镜像复制下来。如果任何协同工作用的服务器发生故障了,也可以用任何一个代码仓库来恢复。而且在协作服务器宕机期间,你也可以提交代码到本地仓库,当协作服务器正常工作后,你再将本地仓库同步到远程仓库。


为什么要使用Git


  • 能够对文件版本控制和多人协作开发

  • 拥有强大的分支特性,所以能够灵活地以不同的工作流协同开发

  • 分布式版本控制系统,即使协作服务器宕机,也能继续提交代码或文件到本地仓库,当协作服务器恢复正常工作时,再将本地仓库同步到远程仓库。

  • 当团队中某个成员完成某个功能时,通过pull request操作来通知其他团队成员,其他团队成员能够review code后再合并代码。


Git有哪些特性


  • 文件三种状态(modified, staged, committed)

  • 直接记录快照,而非差异比较

  • 多数操作仅添加操作

  • 近乎所有操作都是本地执行

  • 时刻保持数据完整性

有关以上特性的详细解释,请查看Pro git的git基础章节


Git基本工作流程


  1. 在git版本控制的目录下修改某个文件

  2. 使用git add命令对修改后的文件快照,保存到暂存区域

  3. 使用git commit命令提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中


Git基本技巧


  • 自动补全

  • Git 命令别名

关于具体如何使用自动补全和命名别名技巧,请查看Pro git的技巧和窍门


Git版本控制


创建仓库

  • git init

  • git clone

  • git config


保存修改


git add

git commit


查看仓库


  • git status

  • git log –oneline


撤销修改


查看之前的commit


  • git checkout

  • git checkout

  • git checkout


撤销公共修改


  • git revert


撤销本地修改


  • git reset

  • git clean


重写Git历史记录


  • git commit –amend

  • git rebase

  • git reflog


Git协作开发


分支


  • git branch

  • git checkout

  • git merge


仓库同步


  • git remote

  • git fetch

  • git pull

  • git push


Git工作流


由于git拥有强大的分支特性,它的工作流比较灵活而缺乏约束,于是参考Atlassian Git Tutorial的Comparing Workflows章节提供四种Git工作流:


  • Centralized Workflow

  • Feature Branch Workflow

  • Gitflow Workflow

  • Forking Workflow


以上工作流只是参考指南,而不是具体规则。你可以根据自己实际情况来选择适合自己的工作流或微调来满足自己的需要。


Centralized Workflow


过渡到分布式版本控制系统看起来像一个艰巨的任务,但如果你充分利用好git的话,你不必改变你既有的工作流,你的团队可以采用与之前使用SVN一样的方式来开发项目。


如何工作


Centralized Workflow


  1. 从远程仓库(central repository)克隆工程到本地仓库(local repository) — git clone

  2. 在本地仓库编辑文件和提交更新 — git add和git commit

  3. fetch远程仓库已更新的commit到本地仓库和rebase到已更新的commit的上面 —git fetch和git rebase 或 git pull --rebase

  4. push本地主分支(master branch)到远程仓库 — git push


管理冲突




File Conflicts


  • 何时发生冲突:在开发者发布它们功能之前,他们需要fetch远程仓库已更新的commit到本地仓库和rebase到已更新的commit的上面。有时,本地提交与远程提交会发生冲突,git会暂停rebase过程来让你手动解决冲突。

  • 如何解决冲突:你可以使用git status和git add来手动解决合并时冲突。


Feature Branch Workflow


Feature Branch Workflow的主要思想就是在开发每个功能时都应该创建一个独立的分支而不只是使用主分支。由于每个分支是独立且互不影响,这就意味着主分支不会包含broken code,对持续集成环境是很有帮助的。


如何工作



Feature Branch Workflow


  1. 仍然使用远程仓库(central repository)和主分支(master branch)仍记录官方工程的历史

  2. 开发者每次开发新功能时都创建一个新分支 — git checkout -b

  3. Feature branches应该推送到远程仓库(central repository) — git push

  4. 发送pull request来请求管理员能否合并到主分支(master branch)

  5. 发布新功能到远程仓库(central repository)


Pull Request


Pull request是一种当开发者完成一个新功能后向其他团队成员发送通知的机制。它的使用过程如下:


开发者可以通过Github或Bitbucket发送pull request



Pull request on Github


  • 其他的团队成员审查、讨论和修改代码

  • 项目维护者合并新增功能分支到主分支(master branch),然后关闭pull request


Gitflow Workflow


Feature Branch Workflow是一种非常灵活的开发方式。对于一些规模比较大的团队,最好就是给特定的分支赋予不同的角色。除了功能分支(feature branch),Gitflow Workflow还使用独立的分支来准备发布(preparing),维护(maintaining), 和记录版本(recording releases)。下面我会逐个介绍这个几个分支:Historical Branches、Feature Branches、Release Branches和Maintenance Branches。


Historical Branches


Historical Branches


  • master分支保存官方发布历史

  • develop分支衍生出各个feature分支


Feature Branches


Feature Branches








请到「今天看啥」查看全文