Be On Board--day02~SVN
SVN vs. Git
- svn 服务器公司统一控制管理
- svn 安全机制, 不会每个人都拷贝一份, 可以对组员限制, 也可以分配不同组
- svn 的 subversion感觉搭建非常简单支持https
- git 下,如果一个人clone以后,所有代码和历史都泄漏了。而 svn 有细致的按照目录级的权限控制
- git 有一定的学习成本,分布式的工作方式,需要转换思维方式
- svn 适合做大型项目的管理,当一个项目规模足够庞大,客户端,前端,服务器都在一个结构里做开发工作,svn可以依靠其单独针对目录的checkout和权限管理功能来保证工程师们只工作在其对应的模块内,又能很好的掌握项目的整体进度。
- git 适合协调在同一个技术栈内的开发者们的协作开发,分支随便拉,代码随便合,发现有问题了直接reset到之前的版本重新修改,而不会对远端记录造成污染,具体到开发者个人来说体验非常好。
- svn在应对诸如用户权限控制,解决版本冲突,代码版本快速迭代,辅助工具开发都有极高的表现,这些都不是git具备的优势,另外最近几年国内的公司都在加强代码安全。
SVN 的一些概念
- repository(源代码库):源代码统一存放的地方
- checkout(提取):当你手上没有源代码的时候,你需要从 repository checkout 一份
- commit(提交):当你已经修改了代码,你就需要 commit 到 repository
- update(更新):当你已经 checkout 了一份源代码,update 一下你就可以和 repository 上的源代码同步,你手上的代码就会有最新的变更
SVN 生命周期
- 创建版本库:create 操作创建一个新的版本库,版本库用于存放文件,包括了每次修改的历史。
- 检出:checkout 操作从版本库创建一个工作副本,作为开发者私人的工作空间,可以进行内容的修改,然后提交到版本库中。
- 更新:update 操作更新版本库,将工作副本与版本库进行同步。因为版本库是整个团队共用的,当其他人提交了改动,你的工作副本就会过期。(update 是从SVN服务器上把最新版本下载到本地来)
- 执行变更:检出之后,可以进行添加、编辑、删除、重命名、移动文件/目录等变更操作。当最终执行了 commit 操作后,就对版本库进行了相应变更。(commit 是将本地做过的改动 [修改、新增、删除、改名、移动等] 上传更新到SVN服务器)
- 复查变化:当你对工作副本进行了一些修改后,你的工作副本就会比版本库新,在 commit 操作之前使用 status/diff 操作复查下你的修改是一个好的习惯。
- 修复错误:如果你对工作副本做了许多修改,当时不想要这些修改了,revert 操作可以重置工作副本的修改,恢复到原始状态。
- 解决冲突:合并的时候可能发生冲突,使用 merge 操作进行合并。因为 SVN 合并是以行为单位的,只要不是修改的同一行,SVN 都会自动合并,如果是同一行,SVN 会提示冲突,需要手动进行确认修改,合并代码。其中 resolve 操作可以帮助找出冲突。
- 提交更改:将文件/目录添加到待变更列表,使用 commit 操作将更改从工作副本更新到版本库,提交时添加注释说明,是个好的习惯。
- add 是将本地新增文件或文件夹标注为受SVN控制,但还未上传到服务器,一般后面还会跟一个commit操作。