话说本人之前除了 Visual Studio 之外,一个 IDE 也没接触过……做 WP 开发时都是用 UltraEdit 等易上手白痴都会的轻量级编辑器的~
应该有不少程序员或者爱好者熟识 NetBeans 这款 Oracle 旗下的开源 IDE 吧,我也抱着尝鲜的态度试用了下,首先吓到我的是它超大的内存占用,还有拖沓的速度(原来习惯把程序做的卡卡的公司不止微软一家啊),但代码自动完成、错误提示、代码重构功能很不错(可惜重构在 WordPress 下不太好用),最吸引我的是它与版本控制结合的很好,默认就提供了对 CVS、Mercurial、SubVersion 的支持。
之前经常看见有些童鞋使用版本控制帮助自己码代码,这可比以前我想起来就 WinRAR 打包一份强多了(再用一次括号宣传下,用盗版软件是不对滴,推荐各位使用免费又强大的 7zip,善用佳软的介绍请按此),因为版本控制可以看到每个版本间的细微更改,回溯任意文件,对团队开发来说意义更大,成员们可以放心的编写代码而不必过于担心同步、合并、冲突的事情。
还看过有童鞋使用 Dropbox 进行版本控制,排除 Dropbox 就根本不存在的原因外,我们的校园网十二点后可是要断网的,这段时间怎么提交更新呢?所以我决定使用易用的 SubVersion。
一、创建版本库与 NetBeans 设定
先在这里并安装找到适合操作系统的 SubVersion,全名是 CollabNet Subversion Edge,我居然点到了 Command-Line Client 上,折腾了半个多小时也找不到建立版本库的功能 。
前面说过,NetBeans 与版本控制配合得很好,所以只要安装 SubVersion 就可以啦,至于乌龟神马的完全不需要 。
SubVersion 自带了 Apache,所以我们可以通过它建立的捷径访问后台(当然是 localhost 上咯,端口不知道是不是都一样),初始用户名与密码都是 admin,幸好后台是中文的。
首先要做的,是配置好 SubVersion 的版本库父文件夹。按我的理解,创建一个版本库可以看作是添加一个新项目,SubVersion 的多数操作都是针对版本库进行的。
选择“管理” – “服务器配置”,在“版本库父文件夹”键入你要放置版本库的文件夹,这个文件夹并不是你开发时使用的文件夹,而是记录一个版本库的配置、修订版本和锁定状态的资料库,版本库与项目文件夹就好比是档案馆与你的家的关系。
下一步是创建新版本库。选择“版本库” – “新版本库”,键入版本库的名字,单击“创建”。“创建标准的主干 / 分支 / 标签结构”根据你个人喜好勾选,不过还是推荐创建啦,这样版本会更加有序。
创建版本库后,你就可以在刚才设置的版本库父文件夹中找到你的版本库咯。
以后就不要随意修改此文件夹中的内容了,以免造成不可挽回的损失唷!
从现在开始就可以在 NetBeans 中设定 SubVersion 了。
打开 NetBeans,选择“工具” – “选项” – “其他”,在左边选择“Subversion”,键入 SVN 可执行文件的路径(例如,C:\Program Files\csvn\bin),单击“确定”保存。
二、导入版本库
下面我们就要在 NetBeans 中把资料导入版本库里啦!假设我们要进行版本控制的项目的目录位于 D:\test\,按如下步骤进行:
- 选择要进行版本控制的项目;
- 选择“团队开发” – “Subversion” – “导入到资源库中…”,打开导入窗口;
- 输入资源库 URL,直接从 SubVersion 后台的版本库列表“检出命令”复制就可,例如
http://RayChow-PC:81/svn/test
再键入用户名与密码,单击“下一步”;
- NetBeans 会尝试连接 SubVersion 库,之后选择导入到 trunk 资源库,并键入指定消息。以后每次提交都输入消息是一个好习惯,这样你就知道每次更新了什么;
- 最后一步 NetBeans 询问你需要导入到文件,可以看见他把自己创建的文件都列出来了。一般都要全部导入啦;
- 单击“完成”,可以看见项目列表中被导入的文件变为绿色,导入成功后再次恢复黑色。
访问刚才输入的资源库 URL 可以看见汇入的项目,这些目录和文件已被记录在案,任何时候你都能调出查看,哪怕他们在项目中已被修改或删除。
至此,版本库准备完毕。
三、签出工作拷贝
什么叫做签出工作拷贝呢?按我的理解,签出就是把版本库中项目的最新版本完整的下载到本地,并与版本库建立联系,这样才能完成“提交”工作。
由于第二点中导入操作已经使项目文件夹与版本库建立了联系,因此第二点操作完成后不需要再进行签出。
在你更换项目文件夹、有其他人或其它电脑加入到你的项目中时,就需要签出来获得最新版本了。
NetBeans 进行签出工作也很简单,按如下步骤进行:
- 选择要签出到的项目;
- 选择“团队开发” – “Subversion” – “签出…”,打开签出窗口;
- 输入资源库 URL、用户名、密码,与第二点中相同;
- “要签出的文件夹”这一步,资源库文件夹选择你需要签出的文件夹,例如 trunk;
资源库修订一般留空,表示获取最新版本;
由于刚才选定了 trunk 文件夹,所以勾选 跳过“trunk”且仅签出其内容,可以看见“工作副本”发生变化; - 单击“完成”,进行签出。
四、颜色
一旦项目中的文件作出修改,项目窗口中的文件名会根据以下规则改变样式:
- 绿色:新加入的文件;
- 蓝色:被修改的文件;
- 红色:有冲突的文件;
- 灰色:被忽略的文件;
- 删除线:提交时被排除的文件。
五、提交
提交是将本地项目做出的修改应用到版本库的过程。
按如下步骤进行:
- 选择要提交的项目或文件;
- 选择“团队开发” – “提交…”,打开提交窗口;
- 输入提交消息,下方的列表中可以排除或比较文件(通过右键);
- 单击“提交”完成操作。
六、更新
更新是检查版本库的文件自上次同步后有无改变的过程。按我的理解,更新会下载版本库中新建的文件、替换上次同步后本地未作出修改而版本库版本更新的文件、删除上次同步后本地仍存在而版本库中已被删除的文件,并标示有冲突的文件。
如果是团队开发,应该经常检查更新;如果是个人开发,更新一万次也没有作用……
七、冲突
冲突是指上次同步后本地对某文件作出修改,提交时版本库中的版本比本地更新而导致冲突的情况。例如,我在 A 文件添加了函数 B,但提交时发现同事 C 已经在 A 文件修改了 类 D 并作出了提交,此时 A 文件已经不能继续提交了,否则会覆盖同事 C 的修改。
在更新后如果发现冲突,NetBeans 会列出冲突的地方,在右下方的版本输出控制窗口中右击文件选择“解决冲突”可以更直观的对比并解决冲突,或者……干脆直接放弃你的修改。
八、显示更改 与 比较
这两个功能在我看来没有太大区别,都是用来查阅上次更新后本地做出的修改的,唯一的不同是:“显示更改”只会列出被修改的文件,双击文件可以查看详细对比,而“比较”则直接显示列表与详细对比。
九、还原修改
假定在比较之后你发现对某个文件的所有修改都是错误的,或许根本不应该修改这个文件,或者是从开头重新修改会更加容易,就是使用“还原修改”的时候了。
- 还原本地修改:将文件还原到未修改的状态,从文件所在文件夹的 .svn 目录中直接复制,不经过服务器;
- 根据单个提交还原修改:从版本库中获得指定的版本,如果有冲突还需要解决;
- 根据早期的提交还原更改:我还不清楚……似乎会把起始与结束的版本都拉回来,再丢给你解决冲突。
十、基本的工作周期
日常使用时,一般按照以下步骤进行版本控制:
- 检出或更新你的工作拷贝;
- 作出修改。请注意,对于工作拷贝的目录操作(如增加、删除、移动、复制)最好在 NetBeans 中进行,或者通过 svn 命令直接操作,如果直接使用不相关的文件管理工具操作,可能会导致错误;
- 检查更改(即第六点);
- 如果有必要,还原修改;
- 如果存在冲突,则解决;
- 提交更改。
以上操作均可以使用 NetBeans 方便的完成。