持续更新中安全
前言:工做也有一年多了,涉及到写代码的小项目也作了若干个,看着Code文件夹里的一个个项目文件夹,以为真是得赶忙采用版本控制工具了,否则之后项目越作越多、越作越大,到时候再用版本控制工具的话,会多花费不少功夫。考虑到所在公司的实际状况,决定采用TortoiseSVN。其实迅速找到一个比较靠谱的工具就行,更重要的还在于人,工具只是一个辅助,不能舍本逐末。服务器
TortoiseSVN的学习和使用是根据官方教程的流程一步步进行的。svn
代码库,在本机上的话,就是用于存放全部本身的代码的地方。在服务器上的话,就是用于保存团队全部代码。若是只想备份一个地方的代码,那就备份这里的吧。工具
这是实际写代码的地方,好比开发者将代码从服务器上拖到本机,而后在本机写代码,编写完成后再提交到服务器上。在这个过程当中,存在于本机上的代码即为“Working Copy”。学习
由于TortoiseSVN只是将本身集成到了系统右键菜单中,因此若是没有再安装加强TortoiseSVN功能的软件的话,直接在Windows资源管理器中经过右键菜单进行代码管理便可。this
这里咱们先迅速了解一下TortoiseSVN的基本功能。.net
在实际开发环境中,代码库应当放在一个合适的位置,并用Subversion服务来进行管理。不过TortoiseSVN也支持直接访问本机的代码库所在目录。版本控制
在这里,咱们先在D盘Code目录下新建一个Repository
文件夹,在该文件夹上点击右键,选择TortoiseSVN
菜单中的Create Repository here...
这一项,在弹出的窗口中点击Create folder structure
按钮,这样就在这个目录下创建起空的代码库了。日志
注意:若是有团队合做编写代码的须要,建议尽可能使用Subversion server的方式进行管理,不要只是简单地经过局域网来共享代码,相信这条建议后面必定有许多惨痛的教训。code
代码库虽然创建起来了,但里面仍是空的,咱们先导入一个现有的项目试试看。
右键点击现有项目HelloWorld的文件夹,选择TortoiseSVN
菜单中的Import
这一项,在弹出窗口中的URL of repository
这一项中,指定该项目要导入到什么目录中,这里咱们填写file:///d:/Code/Repository/trunk/HelloWorld
。
此外,在弹出窗口的Import message
这一项中,能够填写所导入项目的信息。我的感受能够写得详细一些,由于是导入现有的项目,那确定已经多多少少有一些功能了,在导入的时候把项目现有的功能详细地列一下,后面再增长或者修改功能的时候也方便进行对照。无论作什么工做,提早为未来的需求考虑一下,是个很好的习惯。
导入了一个5G多的项目,可是查看
Repository
目录,却只有1G的大小,是否是说导入项目并非将项目整个目录从原来的位置复制一份到Repository,而只是创建对原项目的索引?
项目已经导入到Repository里面了,下面就须要再创建一份工做拷贝用于进一步的开发,要注意前面的导入项目这步操做并不会将导入后的项目文件夹自动转换为工做拷贝。在Subversion中,建立一份全新的工做拷贝的术语叫作Checkout
。
这里咱们先新建D:/Code/Project/HelloWorld
这么一个文件夹,在该文件夹上点击右键,选择TortoiseSVN
菜单中的Checkout…
,而后输入file:///d:/Code/Repository/trunk/HelloWorld
便可。
此次检出的时候又查看了一下,却是把项目整个文件夹原样地复制到
D:/Code/Project/HelloWorld
目录下了。注意:在默认状况下,
Checkout…
功能是直接显示在右键菜单中的,而且有SVN
这个词做为前缀。是由于TortoiseSVN中的功能,若是直接显示在右键菜单而不是做为TortoiseSVN
的子菜单显示的话,都会有SVN
这个前缀。
在检出一份工做拷贝以后,就能够开始修改代码了。对比修改先后的不一样之处,只须要在资源管理器中被修改的文件上点击右键,选择TortoiseSVN
菜单中的Diff
便可。若是修改后的代码没有问题,就能够提交了,右键点击工做拷贝文件夹,选择TortoiseSVN
菜单中的Commit
,提交对话框列出了全部已被修改的文件,每一个文件前都有一个复选框,这样能够只提交部分文件的更改。在对话框中再补充本次修改的说明以后,就能够提交了。
TortoiseSVN不只能够对文件的修改作记录,固然也能够对文件的新增作记录。右键点击工做拷贝目录中的某一文件夹,选择TortoiseSVN
菜单中的Add
,便会显示在本机上新增但未添加到TortoiseSVN中的文件。若是直接在某个或者某几个在本机上新增的文件上点击右键,选择TortoiseSVN
菜单中的Add
,即可直接将这些文件添加到TortoiseSVN的记录中。
TortoiseSVN的最经常使用的功能之一就是Log Dialog(日志对话框),在这个窗口中会显示每一次代码提交的信息。
既然是版本控制工具,那么既能提交新版的代码,也应当可以恢复到旧版的代码。是的,若是在最近一次提交以后对代码作了更改,但又想恢复至提交时的版本,那么右键点击工做拷贝目录中的某一文件,选择TortoiseSVN
菜单中的Revert
便可,若是只想撤销文件中的部分更改,那就用TortoiseMerge吧,能够对比每一处更改,并只对部分更改进行撤销。
若是想将项目总体回退至某个已提交的版本以前的状态,打开Log Dialog,点击对应的版本,右键菜单中选择“Revert changes from this revision”,这样代码就会回退至该版本以前的状态了。
Repository不只以树状目录结构保存文件,而且还会保存文件及文件夹的全部更改:增长/删除/移动。想知道上周三某个目录里面有什么?好说。
这就是版本控制工具的核心功能:记录并追踪对数据所作的全部更改。
假设服务器上有一份代码 helloworld.c,须要小明和小黄来共同编辑维护,小明先写完了本身的功能,把文件放到服务器上了,小黄后来也写完了,也把文件放到服务器上了,问题来了,小明的文件被小黄直接覆盖了!这该怎么办?这就须要版本控制来帮忙了。
这个方案比较简单,就像是在图书馆借书:小明把一本书借走了,小黄这时候就无法借这本书了,这时候这本书就被“锁定”了,只有等小明读完了这本书,还到图书馆以后,这本书才被“解锁”,这时候小黄才能再借这本书。这套方案有什么缺点呢?
你拿走了,我就不能用了。好比小明把书借走了,可是一直没想起来还回来,那小黄就只能干等着,小明何时换回来,小黄何时才能借。
你只看前十页,我只看后十页,一块儿看呗?——不行。好比小明只须要编辑某个代码源文件的前面一部分,小黄只须要编辑后面一部分,这个时候,小黄依然只能干等着,你说浪不浪费时间?
锁越多越安全?那可未必。好比小明在修改文件A,小黄在修改文件B,而A、B之间有依赖关系,结果他俩一修改,最后两个文件都不能用了!你说这可咋整。
Subversion,CVS以及其它的一些版本控制系统采用的则是这套方案。小明和小黄从服务器上复制同一份文件,在各自的电脑上进行编辑,而后提交至服务器时,在版本控制系统和人工判断的共同处理之下,对文件进行合并,最后两我的的修改都能生效,而且还不会产生问题。在这个时候,起关键做用的是人之间的交流,怎样处理两份文件相冲突的地方,以保证已有功能的正常使用,还能确保新功能的成功上线,都是须要人的判断的。