首先声明,本人主张多使用命令行之工具(Command Line)代替图形界面(GUI)。个中优点,熟悉软件业务操作的人自然懂得。其次,本人希望多个源码工具共同混合使用,包括 Git、Hg(Mercurial)、SVN(Subversion),不必定于一尊。实际上,除却分布式与集中这两种显著的管理思想差别之外,其他用法可以说都大同小异。前者去中心化以 Git、Hg 为代表,后者集中化的思想则以 SVN 为最。
SVN 篇
- 命令行的工具下载,如 Slik SVN:http://www.sliksvn.com/en/download
- 如果没设置系统环境变量,设置一下:PATH=C:\Users\Frank\dev\svn
- 检出项目:svn checkout https://naturaljs.googlecode.com/svn/trunk 新建目录名 --username 用户名
- Checkout 之后,自动建立配置参数:C:\Users\Frank\AppData\Roaming\Subversion。用文本编辑器打开 config 文件,里面有详尽丰富的注释。注释符号为 “#”。
- 常用命令 svn checkout 检出; svn st 状态;svn add 〈FileName〉 添加文件;svn del〈FileName〉 删除文件;svn ci 提交并发送的服务器;svn rm <folder> 删除目录;svn ci -m "logMsg" 写日志并提交;svn update -r ReNo 切换到某个版本;
- 提交须配置一下究竟哪个文本编辑器来写日志。编辑 config 文件,加入 editor-cmd = notepad.exe,或者你喜欢的编辑器完全路径。如果路径包含空格须用“双引号”表示这是个字符串。
- 第一次输入账号和密码之后,就会自动保存起来。
- SVN 支持文件类型,可以把 SVN 服务器弄成一个静态服务器用。
- 如果不想每次提交文件都指明 content type,可以用自动属性识别。编辑 config 文件,先令 enable-auto-props = yes,然后在最后加入:
*.png = svn:mime-type=image/png *.jpg = svn:mime-type=image/jpeg *.gif = svn:mime-type=image/gif *.css = svn:mime-type=text/css *.js = svn:mime-type=application/x-javascript *.htm = svn:mime-type=text/html *.html = svn:mime-type=text/html *.txt = svn:mime-type=text/plain
- 如果提示已过时,执行 svn update,删除或继续提交。
- 冲突时要协商,协商好之后告诉 SVN 协商结果:svn resolve --accept working test.txt。另详见:http://bbs.ajaxjs.com/forum.php?mod=viewthread&tid=3660
- 加参数指定 Revision,如 http://xxx/svn/javaCode/mmc/WebRoot/goods/goods.inc?p=570。
- 忽略某个文件夹 (要求 文件夹 尚未 加入版本控制)
svn propset svn:ignore dirname . (注意最后面的 . 一点,还有不用把目录加入到版本管理)
推荐一个 SVN 免费的私有空间:http://code.taobao.org/
分支与合并
所谓“分支开发”,就是将主干(trunk)保持在稳定可运作的版本(虽然本来就该这么做),在开发任何新功能时都另建新分支(branch),开发到一段落之后再合并回主干。能支援这样的开发模式,是因为Hg或Git这些分布式版本控制系统做开分支、合并等动作的额外开销都很低。