什么是SVN
简单来说,SVN是一种版本控制工具,尤其在企业中,应用广泛。
SVN与CVS
- CVS不支持文件重命名,如果重命名一个文件的话,之前的修订历史记录就会丢失。
- CVS没有原子性提交,如果提交很多文件,提交到一半的时候出错,那就尴尬了。
- CVS只支持文本文件,无法提交二进制文件。
SVN解决了这几个问题,并且加入了一些新的特性,如:
- SVN对二进制文件的版本管理,使用了节省空间的保存方法,只保存和上一版本的不同之处。
- 目录也有版本历史。重命名、复制和删除也会保存在版本历史记录中,当然,要用SVN的重命名来操作。
- 分支的开销比较小。
SVN使用场景
- 早上到达公司,从服务器拉取项目最新代码到本地。
- 切换到自己的分支,开始工作,每隔一个小时向服务器自己的分支推送一次代码。
- 下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。
- 如果不能连接到服务器,基本上无法工作。看上面第二步,如果服务器不能连接上,就不能提交、还原、对比,等等。而且如果太多人同时操作,服务器就会面临过大的压力,也可能处理过慢或者崩溃。
SVN最佳实践
- 鼓励频繁提交
- 确定分支流程
- 定义主干原则并坚守
- 不把逻辑修改和代码格式化混在一起
- 不相干的代码分开提交
- 保持工作代码库的“干净”
在企业内部SVN没有什么问题,但在开源社区呢?这时候,诞生了Git。
什么是Git
Git是一个分布式版本控制软件,它与SVN最大的不同就是基于分布式的理念。
GitHub工作流
Git工作流
最后再来谈谈包管理
一个程序只做一件事,并做好。
Node.js的包管理器应该是世界最著名的包管理器了。npm有一个公共组件库,可通过命令或package.json来下载所依赖的组件。
什么是npm
npm是“npm is not an acronym”,它不是Node Package Manager的缩写。
通过命令直接修改package.json
|
|
- npm install
会直接安装npm上某个模块(name)的最新版本,也可以选择带上参数。 - –save表示这个模块会直接出现在package.json中的dependencies属性中。前提是要有package.json这个文件,后面也是一样。
- –save-dev表示这个模块会直接出现在package.json中的devDependencies属性中。关于dependencies和devDependencies的区别,假设一个人下载了你的模块并且在代码中使用,他只需要你的功能,并不需要你的测试代码,或者文档构建器。这时候最好把这些开发阶段使用的包放在devDependencies中。
- –save-optional表示这个模块会直接出现在package.json中的optionalDencies属性中。如果某个模块是可选的——这意味这您在您的依赖代码中做了备选方案(fallback)处理——就放在optionalDependencies中,npm安装的时候会尽量下载和安装这个模块,但是如果下载失败了,npm也不会报错,仅仅跳过去。
- 还有一个参数-g,意思是将模块安装在全局目录。Linux的全局目录默认是/usr/local/或者安装node的地方,而本地安装是当前项目的node_modules目录。在本地安装的包一般使用require( )来把模块引入到代码中,而使用全局安装的模块可以在命令行中直接使用。