团队开发之Git管理及使用
什么是Git
以下摘自官网:
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
Git is easy to learn and has a tiny footprint with lightning fast performance. It outclasses SCM tools like Subversion, CVS, Perforce, and ClearCase with features like cheap local branching, convenient staging areas, and multiple workflows.
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
Git和Svn的对比
说到版本控制,除了Git外,SVN也是比较常用的。写本文的目的之一就是让用过SVN的小伙伴可以快速的上手Git,如果不用分支的话,其实他们两真没有多大差别。
SVN工作原理
每一个SVN用户都可以从服务器checkout代码,同样也可以像服务器(commit)代码,可以更新(update)到别人提交的代码。
优势:所有的操作都需要基于svn中心服务器,所以操作起来必然很简单。
正是因为所有的操作都要基于svn中心服务器,所以只要svn中心服务器出现冲突(conflict),错误(error)都会给整个团队之中的成员带来灾难。
Git工作原理
正是因为SVN的劣势所在,Git就应运而生,去掉了所有的操作都依赖于版本控制中心服务器的设计。使用的高大上的分布式管理。
每个结点都可以充当控制中心的作用,所以从GIT服务器复制(clone)一份到本地,同样也可以单独对自己本地git版本进行单独管理。在针对单个git版本库的操作(commit)、(pull)就如同Svn的commit与update操作。当然版本库之间的操作就是拉取(pull),推送(push)
Git 与 SVN 区别点:
1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
2、Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
3、Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。
4、Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
5、Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
Git 使用
命令行操作
本博客整理了一份比较完整的Git操作命令,以及一个Git专栏,专门记录Git遇到的问题。地址如下:
命令行看起来会很难记,操作没有那么直观。其实,使用git,懂一些基本的命令就足够了,常用的克隆 git clone
、拉取 git pull
、添加 git add
、提交 git commit
、推送 git push
等,熟悉以上几个命令,日常工作上一般都够用了。
Git加入到环境变量中,除了Git自带的命令行工具外,还可以在编辑器控制台中直接操作:
客户端 TortoiseGit
SVN常用的Win客户端是TortoiseSVN
,TortoiseSVN
让SVN的各种操作简单化,当然了,Git也有类似的客户端。TortoiseSVN
这货其实还有个兄弟叫 TortoiseGit
,操作基本也 TortoiseSVN
一致,所以,对于用过SVN的小伙伴,上手Git毫无压力。TortoiseGit
下载和操作都比较简单,这里就不赘述了。
百度一下,你就知道。
编辑器集成
当然,除了客户端,还可以编辑器上集成Git,强烈推荐这种方式,用惯了能给你的开发速度提升一个档。拿phpstrom为例:
打开phpstrom,在setting->Version Control中找到Git,然后在Path to Git executable:选择你所安装的git.exe路径,然后点击OK完成配置。
项目根目录点击右键,下拉框有个Git,所有的操作都集成在这里了,这样就不用再打开客户端进行操作了。
当然了,也有些快捷方式,打开一个有git配置的项目,你会发现右上角及右下角都有对应的git选项。
右上角是一些快捷操作,可以拉取、提交、查看历史记录、还原等等。
而右下角的操作主要是与分支有关。
文件变动
现在还用什么对比软件对比文件的差异化,真的是太OUT了吧?Git集成到编辑器有个好处就是,当前项目存在文件改动、文件增加、文件未在版本管理中,编辑器会以蓝色、绿色、红色显示文件(未发生变化的文件默认是白色),这就很方便追踪文件改动了。
举个栗子:
版本记录
版本控制一个很重要的功能就是能记录操作的版本及修改内容。集成之后编辑器能够很方便的查看Git操作记录,
分支、提交人、修改文件一目了然
冲突解决
编辑器集成Git之后,都可以在编辑器里面解决掉。
团队开发中怎么使用
随着开发团队的扩大,代码覆盖以及代码管理是一个让人很头疼的事,
Ftp毫无版本概念,覆盖了,很难找回之前的代码块,简直就是灾难啊。
SVN在多人开发的时候也不是很方便,因为他的分支是以目录形式的,比如建立trunk、branches、tags这三个文件夹。切换分支相当于切换目录,如果要开发多个分支,那一套代码就得存多个目录,一点都不方便。
版本控制方面,Git和Svn都很优秀,但是在多人开发方面,Git的分支管理会比Svn的好用很多,下面介绍一下,在一个项目中如何使用Git,让开发更高效。
首先,我们要做到的是:开发人员本地、测试站、线上都有版本控制,只要有问题,我们就可以进行代码回滚。多人开发使用Git管理并不难,可以根据分支和权限很好的管理。
master分支
:master分支
是生产环境对应的分支,上面的代码是最新、最稳定的版本,master分支
只有项目经理或者部门主管有push、merge等权限,这样保证线上代码的安全和稳健性。所有的分支都是从master分支
克隆而来。
test分支
:该分支作为测试分支,可以是测试站对应的分支,当有一个任务完成后,测试人员可以把对应的task分支
合并到test分支
,测试人员在test分支
进行测试,
常见问题及解决方案
Git的学习成本高吗?
如果你是小白,没有接触过任何版本控制的工具,那可能需要多搜搜相关的资料,了解一下基本概念,不过也不是什么大问题,就是一个提升开发效率的工具,而且有 TortoiseGit
这样的可视化客户端,操作起来没什么难度;而对于有用过Svn的小伙伴,Git那就是信手捏来,TortoiseSVN
和TortoiseGit
的操作几乎一致。
所以,不要有心里压力,无论是小白还是有过相关经验,花个一两天研究一下,上手完全没有问题的。
Git不安全?
Svn大多数搭建在自己服务器上,而刚接触Git或者是未接触Git的人,总以为Git就只能放在Github、码云等平台,觉得不安全,对于这个问题,别人给的服务就是提供代码托管,保护隐私肯定是其中重要的一项,托管平台就像银行,而我们的代码就像资产,大家信任银行才会把资产存进去,国内的码云以及全球最大的同性交流平台—Github,哦,不不不,最大的代码托管平台,都有对应的安全机制保护我们的代码安全的。那么多大公司都在用,对于代码安全这块,Git完全可以胜任。对于信任这个问题,我们可以自己Git平台,把代码放自己服务器上,还有就是使用 .gitignore 文件屏蔽重要信息。
.gitignore 文件屏蔽重要信息
这个文件的作用就是告诉Git哪些文件不需要添加到版本管理中。拿php项目为例,像缓存、日志、vendor等一般都是需要屏蔽的,而对于一些重要的数据,如 .env
文件,也是要加到 .gitignore
文件中的,这样,接口地址、token、数据库等重要信息不会出现在代码版本里面,可以避免重要信息的泄露,防止危害我们的数据安全。
搭建自助 Git 服务
如果觉得代码放别人家服务器不安全,那完全可以自建Git服务,像使用 Go 语言开发的 Gogs,以最简单、最快速和最轻松的方式搭建自助 Git 服务。支持的平台包括 Linux、Mac OS X、Windows 以及 ARM 平台。
有了这些,你还担心安全问题吗?