生产力工具简介
了解生产力工具的需求就好比你得知道盖楼需要水泥钢筋,需要设计图纸.所以在软件行业里无论你是从事代码开发或者美术设计.你需要以下三大样:
用来存放文件的仓库;
用来描述规划或操作手册的文档;
用于团队合作交流互动的留言本;
无论是SVN系统还是Git系统,它们都是基于 服务端<->客户端 的模式.就好比聊天系统,需要一个服务器和数个客户端,服务器用于在多个客户端之间协作让他们进行通讯.
注意这里说的是系统,svn和git是一种模式的定义,实现这种模式的软件有很多.
比如svn服务端有VisualSVN Server客户端有Tortoise SVN.
又比如git服务端有Github,Gitlab,Gitea等等,客户端比较官方的核心就是Git它没有界面,在这个基础上可以安装Tortoise Git它依赖Git核心,它只是一个界面,内部调用Git核心达到使用的目的.
说明一下,无论是svn系统还是git系统,它们的软件厂商有些只提供离线部署(给你软件自己搭建服务器),有些只提供在线使用(比如Github,码云),有些则两种方式都提供(比如Gitlab,Gitea). 同时无论在线或私有部署都会有免费或收费的模式,这个查看提供商的约定.
通过以上已经对两者系统作用已经有明确认识了吧?这两者提供的服务是相互冲突的,所以这里分为两个派系,svn派和git派.
这里有一个特点:git系统里包含所有svn需要的附属系统.(附属系统指的是协作或创作中需要的功能,比如我混迹一个论坛里与人聊天,但我又需要一个博客.于是我有两个系统的账号和使用)
- SVN系统里只是单纯的提供文件仓库保管效果.通常搭配的还有以下:(子系统可以找任意其它产品代替,这里只是列举出名的)
- Confluence 一个文档编辑系统,类似百度百科,维基百科. 所以这里基本写关于项目的设计概念,接口文档,未来规划等等等等.之前一个项目需要用word做什么,就在这上面做了.也可以设置权限等.
- Jira 一个类似留言板,待做列表之类的东西. 简单说这个可以开放给客户,内部人员,供应商等等.它是一个类似论坛的东西,大家在上面留言讨论.主要强化问题交流,比如新需求,反馈Bug,公告发布等
- CI/CD 一个自动化系统的称呼 持续集成(Continuous Integration) 持续交付(Continuous Delivery) 持续部署(Continuous Deployment) 但svn对这种东西似乎支持不是太好.
以上所有系统都是分开的,你需要注册多个系统并管理账号.(当然也有联合账号登录,就是类似某网站可以使用QQ账号微信登录一样)
Git系统里几乎集成了所有功能为一体.Git系统开发商比较多,这里拿Gitlab做比较,它与Github几乎不相上下,但Github不支持私有部署.
在Git系统里以”项目”为单位.在项目里可以添加各种人的账户,并对他们设置角色分配权限等.
所以Gitlab和Github都会有以下的功能区:
- 在项目里拥有存放文件用的仓库.
- 讨论和反馈问题用的”议题”在内部可以创建看板用于列举分类问题.
- 编写接口文档,规划,策划等等用的百科文档.
- 当你完成打包,比如某个已经编译的游戏或工具.选择发布后可以保存不同平台的二进制文件,也同时保存这个发布版本的源代码. 这样使用人员当选择某个版本后无需下载源码重编译而直接使用二进制.同时开发人员也可以从某个发行版提取代码分裂出新的软件来.
- Git系统的仓库通常有自己的令牌,通过令牌可以不用登录用户而只读方式访问仓库内容.所以这样就可以使用CI/CD自动化部署功能.自动化涵盖很多,自动测试,自动发布之类的,就是通过一个脚本程序操作仓库里的文件达到自动化. (但几乎所有Git都不提供原生CI/CD只是一个互通接口,主要涉及开发语言过多导致自动化无法涵盖所有软件功能,和SVN的模式类似,让用户自己选择CI/CD提供商去集成)
在了解他们的区别的时候首先讨论一个问题,为什么不直接使用ftp共享方式?
首先这两种系统都提供了历史记录和文件对比功能.对于同一个文件同时被多人编辑时它们有自己不同的处理策略.另外可以随时还原到某一个时间段.并且很智能的去分析哪些文件被改动了,只上传被修改的部分.
接着继续:
他们最大的区别是仓库的管理方式.(主要是svn只有仓库管理,其它功能都是第三方扩展的,这个没有什么可比性,就好比如果我不满意git的问题反馈,我同样可以找第三方软件代替)
svn的方式:
svn只存在提交和拉取.
提交表示把当前编辑的文件上传到服务器上,如果遇到多人同时编辑了一个文件可以选择覆盖还是取消.
拉取就是从服务器上更新最新的或其中一个提交的版本到自己的机器上.
工作方式非常简单,工作时先拉取一下看看最新的是什么样的,工作结束提交自己的一份.如果中途出现灾难性Bug,那么可以一起退回到某个版本.
git的方式:
git的模式较为复杂,首先理解svn的每次提交我们称为一个新版本.svn的版本只是保存在服务器上而已,用户对比更新提交.
git的版本库在本地和服务器上都存在一份. git有三个操作:拉取,提交,推送.
- 拉取 就是将服务器上的版本库下载到本地版本库(注意不是工作目录),可以是多个版本,也可以是只要最新的版本.
- 提交 就是把目前工作目录的内容压缩到本地的版本库,这是不需要网络的.
- 推送 就是把本地版本库上传到服务器上去,可以是本地全部版本,也可以是本地某一个版本.
举例:
- 在一台全新的电脑上创建一个服务器上已有的项目,首先拉取其中一个版本,通常是最新的.
- 别人已经更新过内容了,选择拉取获取对方的那个版本,然后选择还原版本,还原时可以选择完全还原(删掉自己电脑上多出来的文件),也可以选择覆盖性还原(不删除对方没有的文件,同文件覆盖,相当于解压时覆盖一样),也可以选择跳过同文件(以你的文件为准),释放你没有的新文件.
- 假如甲本地有A,B,C,D四个版本,然后推送了B,C,D三个版本.服务器上就有B,C,D三个版本.这时乙只拉取了C,D并且没有选择最新的版本,而是将工作目录还原成版本C.在C的版本上继续修改提交.(提交不会覆盖C而是一个新版本)
- git有版本合并功能,比如甲只负责编辑文件A,乙只负责编辑文件B. 他们是不同的项目,这个时候可以进行项目合并,新的项目同时存在A和B.在合并时也要处理重复文件,比如两人都会有相同的配置文件app.cfg之类的,这个时候可以选择使用哪一方的文件为准. (这个情况通常出现在一个项目被分支出去进行改造,改造完成后新加了功能然后重新合并回去)
结束语
了解一个东西前首先理解为什么需要,如果为什么需要都不了解怎么去了解事物的本质.
就像一个推销员给你推销一个你听都没听过的产品,甚至作用都不知道.