热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我的前端开发工作流代码管理篇

代码管理Git关于GitWorkflow的讨论很多,最著名的当属VincentDriessen的那篇博客AsuccessfulGitbranchingmodel。Vincent的工

代码管理

Git

关于Git Workflow的讨论很多,最著名的当属Vincent Driessen的那篇博客A successful Git branching model。Vincent的工作流的结构很棒,首先有2个主要分支,masterdevelop,分别是主分支和开发分支。然后还有3类次分支,它们可能数量很多,并且不会长时间存在,分别是开发新功能用的feature,发布用的release和修复bug用的hotfix。大致的Git操作可以理解为这样:

# create branch
git checkout -b develop master
git checkout -b feature develop
# commit something
git add widget.js
git commit -m "add a function"
# merge to develop
git checkout develop
git merge --no-ff feature
# delete branch
git branch -d feature

首先创建开发分支 develop ,然后再从开发分支创建一个次分支,接着提交代码并注释提交,合并会开发分支 develop ,最后删除这个临时的次分支。–no-ff的意思是不使用快速合并。其他开发过程中也是大同小异,release分支还有hotfix分支可能需要在确认没问题时合并到develop和master两个分支中然后删除。

不过这个工作流是考虑到团队开发而设计的,很标准简约,但细节不足。而Benjamin Sandofsky的文章Understanding the Git Workflow则更加趋向于对commit的管理,也许不能算做工作流,至少算是一种理念。他强调一定要保留有一个私人的分支只存在于本地,然后在合并到主分支时清除原本的commit log。这里会用到一个 merge 命令的参数 --squash 这样合并后不会带来任何commit log。

# create brach
git checkout -b private master
# commit something
git add widget.js
git commit -m "add a function"
# merge brach but don't commit
git checkout master
git merge --squash private
# commit once
git commit -m "only this commit"

但我认为Git工作流和其他一切工程过程一样,不存在银弹。不过这种合并的方式可以成为一种很好的操作流来完成属于每个人自己的工作流。另外从这两种不同风格的Git工作流中也许能找出一些有趣的点。以下是我的看法:

  • 主分支数由开发流程复杂度决定,而开发流程复杂度应该由项目主管根据项目规模确定,所以项目规模决定了主分支数,除了develop也许还需要test、build等等。
  • 次分支数由人员和实际情况决定,bug数会决定hotfix的数量,也许产品经理会决定feature的数量,多个不同版本的同类产品也可能会增加release的数量。如果项目规模足够大时,几个小组解决一个问题时也会产生多个临时分支。
  • 多人协作以及长时间开发都可能导致日志混乱无法管理,使用squash参数配合临时分支可以清理对别人不必要的commit信息。
  • 应使用–no-ff可以避免快速合并,使每次合并等于一次提交,记录在log中,保持分支健康。

因此,在实际开发的工作流中应该按照实际情况创建分支,但应按照以上规范合并分支。

Github

Github不止是每个Coder的FaceBook,还是一个非常棒的远程Git仓库,有很多小组将正式项目托管在上面。其实Github上和Git没有太多差别,只是多了一个远程仓库Remote的操作,另外相信每个初入Github的新手都为私钥公钥头疼了好久,下文将会讨论Github的仓库创建和日常操作两部分。

首先需要在本地建立与Github帐户的联系,在shell中安装SSH,然后像这样使用SSH安装SSH密钥(帮助文档):

ssh-keygen -t rsa -C "your_email@example.com"
# Creates a new ssh key, using the provided email as a label
# Generating public/private rsa key pair.
# Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]
ssh-add id_rsa

然后会让你输入一个密码,随意输入就可以了,接着就会生成一个公钥一个私钥。在用户文件夹下的 .ssh 文件夹中找到id_rsa.pub,这个文件里就是公钥,复制里面的内容,然后在Github的Account Settings中的SSH Key页面,点击Add SSH Key按钮,输入一个用于说明的title,接着粘贴公钥到Key中就可以了。

然后必须在Github上点击 Create a new repo 按钮来创建一个空项目。当然如果选择适当的选项就可以自动生成README文件、Git忽略文件和版权分享声明文件。之后该项目会有一个仓库的地址,可以使用HTTPS和SSH,甚至还有SVN地址:

https://github.com//.git
git@github.com:/.git
https://github.com//

以我的一个对话框jQ插件为例,首先在项目中初始化git,然后添加一个远程仓库,然后就可以往上面提交代码了。

git remote add myGithub https://github.com/tychio/dialog.git
git push myGithub master

因为我使用的HTTPS方式提交,之后会需要输入用户名和密码,如果使用SSH方式则使用公钥然后会在链接时使用生成密钥时的密码。使用HTTPS纯属为了记住Github的密码,每天都在敲就不会忘记了。

总结

工作流应该是一个人最习惯和熟悉的流程,而不应该是照猫画虎,邯郸学步。还是那句话,不存在银弹,所以不会有万用的工作流,只能从中汲取有用的实践,完善改进自己的工作流,达到提高工作效率的目的。

和学习其他技术一样,应用于工作流之中的工具有无数种,但真正需要和适合的只有自己知道,发现问题,带着问题寻找工具才能真的改进工作流。如果仅仅为了使用前沿的工具而使用,只会使自己的工作效率大打折扣。记得两年前我还在疯狂的,每当我意识到不能再这样下去的时候,工作流就会自己进化,合适的工具近在眼前,工作效率逐渐提升。我发现问题实在是很好的老师,可以让一个人快速的成长,解决它就可以获得一次提升。

永远有人有跟你相同的问题,永远有能解决你当前问题的工具,善于使用问题来选择它们就能打造更完善的工作流。如果遇到没有工具能解决的问题,那说明造轮子的时机到了。

我的前端开发工作流 系列文章:

  • 环境篇
  • 自动化篇
  • 工具篇
  • 代码管理篇

原文博客http://www.tychio.net/tech/2013/09/25/improve-workflow.html


推荐阅读
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 机器学习_机器学习中的线性模型
    本文由编程笔记#小编为大家整理,主要介绍了机器学习中的线性模型相关的知识,希望对你有一定的参考价值。一、基本形式 给定由d个 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • 加密、解密、揭秘
    谈PHP中信息加密技术同样是一道面试答错的问题,面试官问我非对称加密算法中有哪些经典的算法?当时我愣了一下,因为我把非对称加密与单项散列加 ... [详细]
  • 使用gitolite搭建一个私有的git服务器,来管理git仓库。有了它,就可以跟小伙伴们愉快地进行远程协作啦。今天又折腾了一遍,在这里把几个关键的步骤记下来,方便以后查阅。准备工 ... [详细]
  • eclipse_在eclipse上使用github,向github中提交项目
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了在eclipse上使用github,向github中提交项目相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Git GitHub多人协作
    在学校做一个小项目需要多人协作,就用到了gitHub,百度了一下多数写得乱七八糟或者支离破碎,于是总结了一下自己的步骤如下,第一次使用GitHUb,哪里不对望大神指出一.前期准备: ... [详细]
  • 编写一个简单的内核驱动模块时报错 “/lib/modules/3.13.032generic/bulid: 没有那个文件或目录。 停止。”...
    编写一个简单的内核驱动模块1staticinthello_init()2{3printk(“hello,Iaminkernelnow\n”);4return0;5}6voidadd ... [详细]
  • git向远程仓库提交遇到的各种坑
    **码云***gitinit初始化本地仓库gitinit*gitremoteaddorigingitgithub.com:xueqinngchennLocal-agent.git将 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
author-avatar
唯心任
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有