Fork me on GitHub

Git or SVN

什么是SVN

简单来说,SVN是一种版本控制工具,尤其在企业中,应用广泛。

SVN与CVS

  1. CVS不支持文件重命名,如果重命名一个文件的话,之前的修订历史记录就会丢失。
  2. CVS没有原子性提交,如果提交很多文件,提交到一半的时候出错,那就尴尬了。
  3. CVS只支持文本文件,无法提交二进制文件。

SVN解决了这几个问题,并且加入了一些新的特性,如:

  1. SVN对二进制文件的版本管理,使用了节省空间的保存方法,只保存和上一版本的不同之处。
  2. 目录也有版本历史。重命名、复制和删除也会保存在版本历史记录中,当然,要用SVN的重命名来操作。
  3. 分支的开销比较小。

SVN使用场景

  1. 早上到达公司,从服务器拉取项目最新代码到本地。
  2. 切换到自己的分支,开始工作,每隔一个小时向服务器自己的分支推送一次代码。
  3. 下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。
  4. 如果不能连接到服务器,基本上无法工作。看上面第二步,如果服务器不能连接上,就不能提交、还原、对比,等等。而且如果太多人同时操作,服务器就会面临过大的压力,也可能处理过慢或者崩溃。

SVN最佳实践

  1. 鼓励频繁提交
  2. 确定分支流程
  3. 定义主干原则并坚守
  4. 不把逻辑修改和代码格式化混在一起
  5. 不相干的代码分开提交
  6. 保持工作代码库的“干净”

在企业内部SVN没有什么问题,但在开源社区呢?这时候,诞生了Git。

什么是Git

Git是一个分布式版本控制软件,它与SVN最大的不同就是基于分布式的理念。

GitHub工作流

github工作流

Git工作流

git工作流

最后再来谈谈包管理

一个程序只做一件事,并做好。

Node.js的包管理器应该是世界最著名的包管理器了。npm有一个公共组件库,可通过命令或package.json来下载所依赖的组件。

什么是npm

npm是“npm is not an acronym”,它不是Node Package Manager的缩写。

通过命令直接修改package.json

1
npm install <name> [--save|--save-dev|--save-optional] [--save-exact]
  • 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( )来把模块引入到代码中,而使用全局安装的模块可以在命令行中直接使用。
据说帅的人都赏给博主几块钱零花钱。