最近都在找工作,所以博客更新停滞了下来。之前几个 Primer 系列也没有写完。不过暂时先写一些和面试有关的内容吧,因为这几次面试,总被问到 SVN 和 Git 的相关问题,但在其中却也发现一些理解误区,因此也就有了这篇博客。
脱库问题
似乎很多人认为只有 Git 可以脱库,但事实上 SVN 也是可以的,其本身就提供了 svnsync
工具,主要用于镜像 SVN 版本库。
安全问题
对于脱库问题,有人说 SVN 可以通过目录授权阻止对脱库,也有面试官告诉我 Git 不安全,问我对这件事情怎么看待。
事实上,对于这个问题我却更倾向使用 Git,因为实践证明 SVN 的目录授权就是一场灾难,随着版本库的分支和 Tag 增多,配置的工作也变得越来越繁琐庞大,其弊病显而易见。
而 Git 可以通过子模组来实现细粒度的读授权。在合适的使用场合中将版本库拆分后单独授权,再通过子模组将整合,且操作也并不复杂。
历史提交修改问题
还有一些人认为,Git 可以对历史提交随意修改,不利于版本控制。事实上这只对本地提交有意义,你可以将其视为缓冲区,它允许你在推送提交到服务器的共享版本之前后悔,而且这样灵活的操作正是 Git 的特点之一。此外,由于对远程共享的版本不允许这样修改,也保证了安全性。
相对于 SVN 的集中式管理,优劣显而易见。
SVN 真的这么差吗
虽然我个人比较推崇 Git,但 SVN 也并非一无是处,关键要用对场合,选择适合的工具解决问题。
举个例子,SVN 有悲观锁 (Pessimistic Lock) 功能,可以在用户在操作时对文件进行锁定,防止多人同时操作。据我有限的了解,目前 Git 并不具备。