69

开发经验漫谈 – Git在开发流程中的运用

 5 years ago
source link: http://blog.7rule.com/2018/06/30/dev-exp-gitflow.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

这几期和大家分享下我自己在开发时的一些经验,这次来说说关于Git在开发流程中的运用。

目的

  1. 保持提交历史整洁,俗称的一条线提交。
  2. 让项目代码有迹可循,提供清晰的开发历程,亦称:取其精华,去其糟粕。
  3. 帮助大家养成好的代码开发习惯,即:如何更好地和他人合作。
  4. 提供一个思路,让大家更深刻的理解git。

请先花时间阅读

  1. 如果你没有接触过git,请先阅读:http://git-scm.com/book/zh/v2
  2. 必读:https://www.atlassian.com/git/tutorials/merging-vs-rebasing

示例系统

我们使用一个简单的项目作为示例来进行说明。

nmqIFbi.png!web

该系统由用户管理模块和角色管理模块组成,该项目已经完成了角色模块的开发,现在在开发用户模块。

开发流程

第一步:获取项目代码

ligang@vm-xubuntu ~/devspace $ git clone /home/ligang/repository/gitflow.git
Cloning into gitflow...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (6/6), done.

当前的提交历史如下:

jUZBBvB.png!web

创建远程合作分支

我们把这个分支命名为user_admin

ligang@vm-xubuntu ~/devspace/gitflow $ git push -u origin user_admin
Total 0 (delta 0), reused 0 (delta 0)
To /home/ligang/repository/gitflow.git
 * [new branch]      user_admin -> user_admin
Branch user_admin set up to track remote branch user_admin from origin.

操作完成后,提交历史如下:

z6nMZja.png!web

说明:合作开发user_admin模块的同学,会在这个分支上合并彼此的代码。

第三步:创建个人分支(真正的开发工作在这里进行)

我们把这个分支命名为:user_admin_ligang

ligang@vm-xubuntu ~/devspace/gitflow $ git push -u origin user_admin_ligang
Total 0 (delta 0), reused 0 (delta 0)
To /home/ligang/repository/gitflow.git
 * [new branch]      user_admin_ligang -> user_admin_ligang
Branch user_admin_ligang set up to track remote branch user_admin_ligang from origin.

rAvmU3q.png!web

请注意:

  1. 此分支是在远程合作分支(user_admin)的基础上创建的。
  2. 此分支只可合并远程合作分支,不可以直接合并master。

分支合并流程

假设在user_admin_ligang的个人分支中已经完成了开发,现在需要把这部分代码提交给被人使用,那么请按照如下方式操作:

假设开发完成后的提交历史如下:

7FJj6jN.png!web

第一步:整理个人开发分支中待合并的提交,去掉无用的,仅保留有用的

切到user_admin_ligang分支

ligang@vm-xubuntu  ~/devspace/gitflow $ git checkout user_admin_ligang
ligang@vm-xubuntu  ~/devspace/gitflow $ git branch
  master
  user_admin
* user_admin_ligang
ligang@vm-xubuntu  ~/devspace/gitflow $

查找newbase

在这个清理过程中,我需要清理掉tmp1和tmp2这2个临时提交,所以newbase就是init,这里获得它的版本号:

uQnmeyB.png!web

执行清理

这一步是不可逆的,请谨慎操作,亦可先备份。

Yfuu2yj.png!web

这里按照提示,我们编辑rebase信息:

VJbimya.png!web

保存退出,由于上面我们告诉rebase我们要重新编辑提交信息(r,reword),这里会进入提交信息编辑界面,我们修改最终提交信息如下:

iIZvEzB.png!web

保存退出,清理过程结束,这里再次查看提交历史:

7Bbaymm.png!web

这里可以看到,tmp1和tmp2已经被清理掉了,最终的done2是一个全新的提交。

第二步:合并个人分支到远程合作分支

请确保此时只有你一个人操作远程合作分支

更新本地远程合作分支到最新

ligang@vm-xubuntu ~/devspace/gitflow $ git checkout user_admin
Switched to branch 'user_admin'
ligang@vm-xubuntu ~/devspace/gitflow $ git pull origin user_admin
From /home/ligang/repository/gitflow
 * branch            user_admin -> FETCH_HEAD
Already up to date.

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK