本文作者: SamLau 转载自:http://blog.jobbole.com/87410/
看公众号发现的好文,鉴于我不经常用伯乐网,就直接摘过来了,感谢巨巨的辛勤劳动成果!
Git Version Control
这篇文章是针对git版本控制和工作流的总结,如果有些朋友之前还没使用过git,对git的基本概念和命令不是很熟悉,可以从以下基本教程入手:
Git是什么?
Git是分布式版本控制系统,与SVN类似的集中化版本控制系统相比,集中化版本控制系统虽然能够令多个团队成员一起协作开发,但有时如果中央服务器宕机的话,谁也无法在宕机期间提交更新和协同开发。甚至有时,中央服务器磁盘故障,恰巧又没有做备份或备份没及时,那就可能有丢失数据的风险。
但Git是分布式的版本控制系统,客户端不只是提取最新版本的快照,而且将整个代码仓库镜像复制下来。如果任何协同工作用的服务器发生故障了,也可以用任何一个代码仓库来恢复。而且在协作服务器宕机期间,你也可以提交代码到本地仓库,当协作服务器正常工作后,你再将本地仓库同步到远程仓库。
为什么要使用Git
Git有哪些特性
有关以上特性的详细解释,请查看Pro git的git基础章节
Git基本工作流程
Git基本技巧
关于具体如何使用自动补全和命名别名技巧,请查看Pro git的技巧和窍门
查看之前的commit
撤销公共修改
撤销本地修改
由于git拥有强大的分支特性,它的工作流比较灵活而缺乏约束,于是参考Atlassian Git Tutorial的Comparing Workflows章节提供四种Git工作流:
以上工作流只是参考指南,而不是具体规则。你可以根据自己实际情况来选择适合自己的工作流或微调来满足自己的需要。
过渡到分布式版本控制系统看起来像一个艰巨的任务,但如果你充分利用好git的话,你不必改变你既有的工作流,你的团队可以采用与之前使用SVN一样的方式来开发项目。
如何工作
Centralized Workflow
管理冲突
File Conflicts
Feature Branch Workflow的主要思想就是在开发每个功能时都应该创建一个独立的分支而不只是使用主分支。由于每个分支是独立且互不影响,这就意味着主分支不会包含broken code,对持续集成环境是很有帮助的。
Feature Branch Workflow
Pull request是一种当开发者完成一个新功能后向其他团队成员发送通知的机制。它的使用过程如下:
Pull request on Github
Feature Branch Workflow是一种非常灵活的开发方式。对于一些规模比较大的团队,最好就是给特定的分支赋予不同的角色。除了功能分支(feature branch),Gitflow Workflow还使用独立的分支来准备发布(preparing),维护(maintaining), 和记录版本(recording releases)。下面我会逐个介绍这个几个分支:Historical Branches、Feature Branches、Release Branches和Maintenance Branches。
Historical Branches
Historical Branches
Feature Branches
Feature Branches
Release Branches
Release Branches
Maintenance Branches
Maintenance Branches.png
标记Tags
使用两个命令来给master分支标记版本号:
Forking Workflow与以上讨论的工作流很不同,一个很重要的区别就是它不只是多个开发共享一个远程仓库(central repository),而是每个开发者都拥有一个独立的服务端仓库。也就是说每个contributor都有两个仓库:本地私有的仓库和远程共享的仓库。
Forking Workflow
Forking Workflow这种工作流主要好处就是每个开发者都拥有自己的远程仓库,可以将提交的commits推送到自己的远程仓库,但只有工程维护者才有权限push提交的commits到官方的仓库,其他开发者在没有授权的情况下不能push。Github很多开源项目都是采用Forking Workflow工作流。
如何工作
3. 当开发者准备好发布本地的commit时,他们push commit到他们自己的公共仓库
4. 在自己的公共仓库发送一个pull request到官方仓库
5. 维护者pull贡献者的commit到他自己的本地仓库
6. 审查代码确保它不会破坏工程,合并它到本地仓库的master分支
7. push master分支到服务器上的官方仓库
8. 其他开发者应该同步官方仓库。
一个是没有对输入的数据进行过滤(过滤输入),还有一个是没有对发送到数据库的数据进行转义(转义输出)。这两个重要的步骤缺一不可,需要同时加以特别关注以减少程序错误。对于攻击者来说,进行SQL注入攻击需要思考和试验,对数据库方案进行有根有据的推理非常有必要(当然假设攻击者看不到你的源程序和数据库方案),考虑以下简单的登录表单:复制代码 代码如下:Username: Passwo
下面我来介绍几个非常有益的c/c++数学计算库,他们基本上都是开源的,你完全不必担心版权问题,他们都是一些自由软件,你要做的仅仅是仔细阅读他们的授权协议确保不要滥用就可以了: 计算几何算法库 CGALCGAL ,计算几何算法库,是一个大型C + +库的几何数据结构和算法,如Delaunay三角网,网格生成,布尔运算的多边形,以及各种几何处理算法。 CGAL是用来在各个领域:计算机图形学
putty连接树莓派获取IP地址需要三样东西:笔记本电脑+一根网线+树莓派。首先利用网线,将树莓派和电脑连接起来,打开电脑的网络共享中心,将Internet连接共享勾选,如下图:接下来打开cmd输入arp -a查看树莓派的ip地址,注意利用putty连接的这个ip地址和路由器分配给树莓派上网的ip地址不同。先上一个图我再进行分析:这里动态分配给了树莓派192.168.137.15,...
前言Performance 一个在前端开发领域中,无法被忽视的存在,如果我们的开发是一个满足需求就可以的产品,那么可能就用不到它;但是如果我们想对我们的这个产品,做一个极致的优化,那么 Performance 是一个很好的选择,也是一个不容忽视的选择。Performance 工具 和 api 的优缺点Performance 工具 优点:可视化图形界面每毫秒做的事情文件的执行加载的顺序...
在使用electron-vue写自动化测试软件的时候,遇到了一些关于使用selenium-webdriver的坑,来记录一下一、环境配置由于vue并没有实际运行在node的运行时中,所以,在vue中引入selenium-webdriver会引发 no such module 的报错,这个错误当时困扰了我很久,因为确实没有意识到是不同运行时环境的问题。所以,基于这一点,我选择了在本地起一个node服务,通过访问node,来对selenium进行操作const app = require('express
在windows XP系统下编译和使用ffmpeg
Ubuntu18.04+RTX3070+driver460.67在base安装cuda11.2首先找GPU对应的cuda版本。查询本机的驱动版本: nvidia-smi nvidia-smi -a查询本机驱动对应的cuda版本:https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html下载对应的cuda,由于我的系统已经安装驱动且使用.run文件会报driver not selection的错
原文地址:http://mysqlserverteam.com/upgrading-directly-from-mysql-5-0-to-5-7-using-an-in-place-upgrade/作者:Susan Koerner这篇文章是关于mysql升级系列的第二部分。第一篇文章,使用mysqldump 直接从5.0升级至5.7,讨论了使用mysqldump程序进行升级。...
px 即像素,一般国内人使用较多,默认大小是16px;pt 印刷行业常用单位em 相对单位,相对父元素属性的单位 ,一般用于移动端布局rem 结合相对定位和绝对定位的优势,相对根元素html,想要修改字体大小,只要修改html的大小就可以了转换公式:pt=px乘以3/4倍数em=倍数x16px注意:1em=16px。那么12px=0.75em,1
很多时候我们会在下拉菜单中绑定一个值,但是 Spinner本身不提供这样的服务.首先要定义一个Item类,有以下要注意的: 要重写它的.Tostring()函数,因为适配器在显示数据的时候,如果传入适配器的对象不是字符串的情况下,直接就使用对象.toString() public class CItem { private int ID; private String
<script> const app = new Vue({ el: "#app", data: { data: {}, pageIndex: 1 }, created: function() { let me = this; this.utils.muiAjax( config.httpKin...
我们程序员经常迷茫于有太多东西要学,有些找不到方向、不知所措。很多程序员都愿意说,我想变得更好,但是更好是什么却很模糊,同时我们又不知道该怎么样去做。我们的生命如此短暂,作为程序员的职业生涯可能会更短。所以我们更加需要充分利用工作,工作间隙,晚上,周末的时间进行学习。接下来我们看一份腾讯课堂提供的一份一线互联网企业资深Android架构师的学习计划。今天本文主要讲解:APK文件反编译什么是反编译如何防止反编译APK文件的基本构造APK加固的方案原理APK加固总体架构APK打包基本流程