﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-SA Blog --系统管理员的博客生涯</title><link>http://www.cnitblog.com/201/</link><description>书写自己的系统管理博客生涯</description><language>zh-cn</language><lastBuildDate>Sun, 21 Mar 2010 13:05:56 GMT</lastBuildDate><pubDate>Sun, 21 Mar 2010 13:05:56 GMT</pubDate><ttl>60</ttl><item><title>国内速度比较快的Gentoo镜像</title><link>http://www.cnitblog.com/201/archive/2010/03/17/64698.html</link><dc:creator>David</dc:creator><author>David</author><pubDate>Wed, 17 Mar 2010 06:25:00 GMT</pubDate><guid>http://www.cnitblog.com/201/archive/2010/03/17/64698.html</guid><wfw:comment>http://www.cnitblog.com/201/comments/64698.html</wfw:comment><comments>http://www.cnitblog.com/201/archive/2010/03/17/64698.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/201/comments/commentRss/64698.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/201/services/trackbacks/64698.html</trackback:ping><description><![CDATA[GENTOO_MIRRORS="ftp://gentoo.anheng.com.cn/gentoo http://mirror.averse.net/pub/gentoo/ http://61.135.158.199/ "<br>SYNC="rsync://mirror.averse.net/gentoo-portage rsync://61.135.158.199/gentoo-portage"<br><img src ="http://www.cnitblog.com/201/aggbug/64698.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/201/" target="_blank">David</a> 2010-03-17 14:25 <a href="http://www.cnitblog.com/201/archive/2010/03/17/64698.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Centos 5.4+subversion+apache+trac整合配置资源包</title><link>http://www.cnitblog.com/201/archive/2010/03/14/64633.html</link><dc:creator>David</dc:creator><author>David</author><pubDate>Sun, 14 Mar 2010 09:50:00 GMT</pubDate><guid>http://www.cnitblog.com/201/archive/2010/03/14/64633.html</guid><wfw:comment>http://www.cnitblog.com/201/comments/64633.html</wfw:comment><comments>http://www.cnitblog.com/201/archive/2010/03/14/64633.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/201/comments/commentRss/64633.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/201/services/trackbacks/64633.html</trackback:ping><description><![CDATA[centos 5.4 DVD官方获得<br>subversion 以下地址获得 <a  href="http://summersoft.fay.ar.us/pub/subversion/latest/">http://summersoft.fay.ar.us/pub/subversion/latest/</a><br><br>trac获得&nbsp; <a  href="http://trac.edgewall.org/wiki/TracGuide">http://trac.edgewall.org/wiki/TracGuide</a><br><br>如果没有安装subversion-python 会造成trac 建库时提示无法访问svn库 <em>ImportError</em>: <em>No module named svn</em>，无法建索引，或警告svn bindings警告<br>Warning:<br><br>You should install the SVN bindings<br><br>---------------------------------------------------------------------<br>Project environment for 'My Project' created.<br>Python 2.4.3 (#1, Sep&nbsp; 3 2009, 15:37:12)<br>[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2<br>Type "help", "copyright", "credits" or "license" for more information.<br>&gt;&gt;&gt; import svn<br>Traceback (most recent call last):<br>&nbsp; File "&lt;stdin&gt;", line 1, in ?<br>ImportError: No module named svn<br>&gt;&gt;&gt;<br><br><br><br><br><img src ="http://www.cnitblog.com/201/aggbug/64633.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/201/" target="_blank">David</a> 2010-03-14 17:50 <a href="http://www.cnitblog.com/201/archive/2010/03/14/64633.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>svn在linux下的使用（svn命令）</title><link>http://www.cnitblog.com/201/archive/2010/03/10/64577.html</link><dc:creator>David</dc:creator><author>David</author><pubDate>Wed, 10 Mar 2010 07:24:00 GMT</pubDate><guid>http://www.cnitblog.com/201/archive/2010/03/10/64577.html</guid><wfw:comment>http://www.cnitblog.com/201/comments/64577.html</wfw:comment><comments>http://www.cnitblog.com/201/archive/2010/03/10/64577.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/201/comments/commentRss/64577.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/201/services/trackbacks/64577.html</trackback:ping><description><![CDATA[<div id="art" width="100%" style="margin: 15px;">
<p><strong> 1、</strong> 将文件checkout到本地目录</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><strong> svn checkout</strong>  path（path是服务器上的目录）<br>
&nbsp;&nbsp;  例如：svn checkout svn://192.168.1.1/pro/domain<br>
&nbsp;&nbsp;&nbsp;  简写：svn co</div>
<p><strong> 2、</strong> 往版本库中添加新的文件</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">&nbsp;&nbsp;<strong> svn </strong> <strong> add</strong>  file<br>
&nbsp;&nbsp;  例如：svn add test.php(添加test.php)<br>
&nbsp;&nbsp;  svn add *.php(添加当前目录下所有的php文件)</div>
<p><strong> 3、</strong> 将改动的文件提交到版本库</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">
<p>&nbsp;&nbsp;<strong> svn commit</strong>  -m "LogMessage" [-N] [--no-unlock] PATH<img src="http://www.blogjava.net/Images/dot.gif">(如果选择了保持锁，就使用--no-unlock开关)<br>
&nbsp;&nbsp;  例如：svn commit -m "add test file for my test" test.php<br>
&nbsp;&nbsp;&nbsp;  简写：svn ci</p>
</div>
<p><strong> 4、</strong> 加锁/解锁</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">&nbsp;&nbsp;<strong> svn lock</strong>  -m "LockMessage" [--force] PATH<img src="http://www.blogjava.net/Images/dot.gif"><br>
&nbsp;&nbsp;  例如：svn lock -m "lock test file" test.php<br>
<strong> svn unlock</strong>  PATH</div>
<p><strong> 5、</strong> 更新到某个版本</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">&nbsp;&nbsp;<strong> svn update -r </strong> m path<br>
&nbsp;&nbsp;  例如：<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  svn update如果后面没有目录，默认将当前目录以及子目录下的所有文件都更新到最新版本。<br>
&nbsp;&nbsp;&nbsp;&nbsp;  svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)<br>
&nbsp;&nbsp;&nbsp;&nbsp;  svn update test.php(更新，于版本库同步。如果在提交的时候提示过期的话，是因为<strong> 冲突，需要先update，修改文件</strong> ，然后清除<strong> svn resolved</strong> ，最后再提交commit)<br>
&nbsp;&nbsp;  简写：svn up</div>
<p><strong> 6、</strong> 查看文件或者目录状态</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">&nbsp;&nbsp;1）<strong> svn status</strong>  path<img src="http://www.blogjava.net/Images/dot.gif">（目录下的文件和子目录的状态，正常状态不显示）<br>
&nbsp;&nbsp;  【?：不在svn的控制中；M：内容被修改；C：发生冲突；A：预定加入到版本库；K：被锁定】<br>
&nbsp;&nbsp;2）<strong> svn status -v</strong>  path<img src="http://www.blogjava.net/Images/dot.gif">(显示文件和子目录状态)<br>
&nbsp;&nbsp;  第一列保持相同，第二列显示工作版本号，第三和第四列显示最后一次修改的版本号和修改人。<br>
&nbsp;&nbsp;  注：svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的，原因是svn在本地的.svn中保留了本地版本的原始拷贝。<br>
简写：svn st</div>
<p><strong> 7、</strong> 删除文件</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">&nbsp;&nbsp;<strong> svn delete</strong>  path -m "delete test fle"<br>
&nbsp;&nbsp;  例如：svn delete svn://192.168.1.1/pro/domain/test.php -m "delete test file"<br>
&nbsp;&nbsp;&nbsp;  或者直接svn delete test.php 然后再svn ci -m 'delete test file&#8216;，推荐使用这种<br>
简写：svn (del, remove, rm)</div>
<p><strong> 8、</strong> 查看日志</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">&nbsp;&nbsp;<strong> svn log</strong>  path<br>
&nbsp;&nbsp;  例如：svn log test.php 显示这个文件的所有修改记录，及其版本号的变化</div>
<p><strong> 9、</strong> 查看文件详细信息</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">&nbsp;&nbsp;<strong> svn info</strong>  path<br>
&nbsp;&nbsp;  例如：svn info test.php</div>
<p><strong> 10、</strong> 比较差异</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">&nbsp;&nbsp;<strong> svn diff</strong>  path(将修改的文件与基础版本比较)<br>
&nbsp;&nbsp;  例如：svn diff test.php<br>
<strong> svn diff</strong>  -r m:n path(对版本m和版本n比较差异)<br>
&nbsp;&nbsp;  例如：svn diff -r 200:201 test.php<br>
&nbsp;&nbsp;  简写：svn di</div>
<p><strong> 11、</strong> 将两个版本之间的差异合并到当前文件</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">&nbsp;&nbsp;<strong> svn merge -r</strong>  m:n path<br>
&nbsp;&nbsp;  例如：svn merge -r 200:205 test.php（将版本200与205之间的差异合并到当前文件，但是一般都会产生冲突，需要处理一下）</div>
<p><strong> 12、</strong> SVN 帮助</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">&nbsp;&nbsp;<strong> svn help<br>
svn help ci</strong> </div>
<p>------------------------------------------------------------------------------</p>
<p>以上是常用命令，下面写几个不经常用的</p>
<p>------------------------------------------------------------------------------</p>
<p><strong> 13、</strong> 版本库下的文件和目录列表</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">&nbsp;&nbsp;<strong> svn list </strong> path<br>
&nbsp;&nbsp;  显示path目录下的所有属于版本库的文件和目录<br>
简写：svn ls</div>
<p> </p>
<p><strong> 14、</strong> 创建纳入版本控制下的新目录</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">
<p><strong> svn mkdir</strong> : 创建纳入版本控制下的新目录。<br>
用法: 1、mkdir PATH...<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  2、mkdir URL...<br>
创建版本控制的目录。<br>
1、每一个以工作副本 PATH 指定的目录，都会创建在本地端，并且加入新增<br>
&nbsp;&nbsp;&nbsp;&nbsp;  调度，以待下一次的提交。<br>
2、每个以URL指定的目录，都会透过立即提交于仓库中创建。<br>
在这两个情况下，所有的中间目录都必须事先存在。</p>
</div>
<p> </p>
<p><strong> 15、</strong> 恢复本地修改</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">
<p><strong> svn revert</strong> : 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:<br>
用法: revert PATH...<br>
注意: 本子命令不会存取网络，并且会解除冲突的状况。但是它不会恢复<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  被删除的目录</p>
</div>
<p> </p>
<p><strong> 16、</strong> 代码库URL变更</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">
<p><strong> svn switch (sw):</strong>  更新工作副本至不同的URL。<br>
用法: 1、switch URL [PATH]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  2、switch --relocate FROM TO [PATH...]</p>
<p>1、更新你的工作副本，映射到一个新的URL，其行为跟&#8220;svn update&#8221;很像，也会将<br>
&nbsp;&nbsp;&nbsp;&nbsp;  服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的<br>
&nbsp;&nbsp;&nbsp;&nbsp;  方法。<br>
2、改写工作副本的URL元数据，以反映单纯的URL上的改变。当仓库的根URL变动 <br>
&nbsp;&nbsp;&nbsp;  (比如方案名或是主机名称变动)，但是工作副本仍旧对映到同一仓库的同一目录时使用<br>
&nbsp;&nbsp;&nbsp;  这个命令更新工作副本与仓库的对应关系。</p>
</div>
<p> </p>
<p><strong> 17、</strong> 解决冲突</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">
<p><strong> svn resolved:</strong>  移除工作副本的目录或文件的&#8220;冲突&#8221;状态。<br>
用法: resolved PATH...<br>
注意: 本子命令不会依语法来解决冲突或是移除冲突标记；它只是移除冲突的<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  相关文件，然后让 PATH 可以再次提交。</p>
</div>
<p> </p>
<p><strong> 18、</strong> 输出指定文件或URL的内容。</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">
<p><strong> svn </strong> <strong> cat</strong>  目标[@版本]...如果指定了版本，将从指定的版本开始查找。<br>
svn cat -r PREV filename &gt; filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)</p>
</div>
</div>
<br><img src ="http://www.cnitblog.com/201/aggbug/64577.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/201/" target="_blank">David</a> 2010-03-10 15:24 <a href="http://www.cnitblog.com/201/archive/2010/03/10/64577.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Thinkpad T40 笔记本无线网卡报 1802 Error 错误，完美解决方法</title><link>http://www.cnitblog.com/201/archive/2010/03/07/64529.html</link><dc:creator>David</dc:creator><author>David</author><pubDate>Sun, 07 Mar 2010 10:54:00 GMT</pubDate><guid>http://www.cnitblog.com/201/archive/2010/03/07/64529.html</guid><wfw:comment>http://www.cnitblog.com/201/comments/64529.html</wfw:comment><comments>http://www.cnitblog.com/201/archive/2010/03/07/64529.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/201/comments/commentRss/64529.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/201/services/trackbacks/64529.html</trackback:ping><description><![CDATA[近日朋友笔记本thinkpad T40 2373-75U遭遇无线网卡故障，具体现象为开机无法进入系统，提示：<br>
<p><br></p>
<pre>  1802: Unauthorized network card is plugged in - Power off and remove the miniPCI network card.<br><br>经检查，为cisco 的网卡，尝试进BIOS将无线网卡屏蔽系统可正常启动。 <br><br>后上网查询有网友提醒可以破解后使用。<br>以下我的操作方法。<br><br>第一次通过<a target="_blank" href="http://www.thinkwiki.org/wiki/Problem_with_unauthorized_MiniPCI_network_card">http://www.thinkwiki.org/wiki/Problem_with_unauthorized_MiniPCI_network_card</a> 方法处理一次，但未成功破解.<br><br>第二次尝试网上网友提供的破解文件JMP1802.COM(<a target="_blank"  href="http://www.cnitblog.com/Files/201/jmp1802.zip">本地下载</a>)。重新启动并可以使用。<br><br>注意先把下网卡，再运行破解程序，破解完成后关机，插上网卡，重启。<br><br>详细的步骤可以参考 http://www.3671041.com/Article/hard/lan/200908/13294.html<br><br><br><br><br></pre>
<br> <img src ="http://www.cnitblog.com/201/aggbug/64529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/201/" target="_blank">David</a> 2010-03-07 18:54 <a href="http://www.cnitblog.com/201/archive/2010/03/07/64529.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lenovo 的CPP code更改，familyandfriends 失效</title><link>http://www.cnitblog.com/201/archive/2010/02/01/64086.html</link><dc:creator>David</dc:creator><author>David</author><pubDate>Mon, 01 Feb 2010 07:15:00 GMT</pubDate><guid>http://www.cnitblog.com/201/archive/2010/02/01/64086.html</guid><wfw:comment>http://www.cnitblog.com/201/comments/64086.html</wfw:comment><comments>http://www.cnitblog.com/201/archive/2010/02/01/64086.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/201/comments/commentRss/64086.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/201/services/trackbacks/64086.html</trackback:ping><description><![CDATA[&nbsp;各位Lenovo近期似乎调整了 CPP code，最新code 还不知道。<br><img src ="http://www.cnitblog.com/201/aggbug/64086.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/201/" target="_blank">David</a> 2010-02-01 15:15 <a href="http://www.cnitblog.com/201/archive/2010/02/01/64086.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>两篇很牛的vim使用技巧</title><link>http://www.cnitblog.com/201/archive/2010/01/22/63915.html</link><dc:creator>David</dc:creator><author>David</author><pubDate>Fri, 22 Jan 2010 03:14:00 GMT</pubDate><guid>http://www.cnitblog.com/201/archive/2010/01/22/63915.html</guid><wfw:comment>http://www.cnitblog.com/201/comments/63915.html</wfw:comment><comments>http://www.cnitblog.com/201/archive/2010/01/22/63915.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/201/comments/commentRss/63915.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/201/services/trackbacks/63915.html</trackback:ping><description><![CDATA[读本文之前请注意：<br>1. 本文的目标是提供一些vim的使用技巧，利用这些技巧可以提高vim的操作效率。部分技巧在vi上也可以使用，但是现在基本上都是用vim了。<br>2. 本文是整理和总结使用技巧，而非讲解vim入门，因此不会涉及最基本的使用，例如如何上移或下移光标，对此类操作请参阅任何一本vim或者vi教程。<br>3. 本文阅读对象是了解了vim的基本操作，而希望高效地利用vim进行工作的人。熟练使用vim的人自然不必细读，如果能留下您的宝贵意见，本人将感激不尽。<br>4. 本文由本人搜集整理，转载请注明出处<br><br>本文一般情况下用（里边的字母一般大小写无所谓,除非特别注明）表示按住ctrl同时按下相关字母，命令前加一个i表示在插入模式下用这个命令<br><br>1. 选定文字 / 拷贝粘贴<br><br>v为可视模式,可以选定多行。选定多行之后，可以用yy或者dd等等进行拷贝和剪切。<br>p 是粘贴<br>y 和d 可以直接拷贝或者剪切选定的内容<br>yw是拷贝一个单词<br>如果要复制整行的最简单办法就是V,y,p 就行了<br>v是可以选定一行任意个字符的,V是行选定的,一次一整行，然后通过向下或向上移动光标而选定多行。<br>对于v选定的,拷贝后就是这么多,选多少就拷贝多少,而V选定的,粘贴的话会自动换到下一行<br>命令模式下,也是块选定,不过是列块选定<br><br>2. 折叠代码<br><br>可以zf进行折叠, 用zo打开折叠,也可以方向键向右打开折叠,zc 关闭折叠(只要在被折叠的块中的任一个语句就行)<br>3. 缩进代码<br>是右缩进<br>按v选定后按=就是自动格式化代码,自动缩进,内部的递归的缩进都做到了<br>行左移&gt;，该命令用于调整源码缩进格式简便快速。<br>4. 移动光标<br><br>%是从大括号的开始移动到大括号的结束位置<br>:后边加行号就是跳到这一行<br>    光标返回到以前的位置。相当于光标移动的&#8220;撤销&#8221;<br>    光标返回到后来的位置。相当于光标移动的&#8220;恢复&#8221;<br>5. 多文件编辑 / 缓冲区命令<br>vim下每一个打开的文件对应一个缓冲区（buffer）。<br>多文件编辑会有两种情形，一种是在进入 vim 前所用的参数就是多个文件（这种情形称为 argument list）。另一种情形是进入 vim 后另外再开其它的文件（称为 buffer list）。不过都可以统称为buffer。<br><br>5.1 打开文件<br>vi flname1 flname2&#8230; flnameN<br>将多个文件调入缓冲，是 argument list。<br>:e filename<br>这是在进入 vim 后，在不离开 vim 的情形下再开其它文件，只要您要编辑的档案是在目前目录，Tab 补全键还是可以使用。是buffer list。<br>注意：:e 或者:new 或者:split 后边可以跟目录,这样就可以在目录下慢慢找要打开的文件了<br>5.2 缓冲区跳转<br>:n   编辑下一个文件。<br>:2n 编辑下二个文件。<br>:N   编辑前一个文件。注意，这种用法只能用于 argument list 的情形。<br>:rew 回到首文件<br>:args 查看当前编辑缓冲文件状态<br>:e# 或 Ctrl-^   编辑前一个档案，用于两文件互相编辑时相当好用。这种用法不管是 argument list 或buffer list 档案间皆可使用。 使用Ctrl－^ 命令更便捷，但如终端类型不正确该功能将无效。<br>用:ls来显示缓冲区中的文件，编号后边有#的代表是前一个文件，可以通过:e#来进入，有%a的代表是当前文件，什么也没有的可以通过:bn来进入，这里的n代表文件编号。<br>:b文件名或编号   移至该文件。<br>在 :ls 中就会出示各文件的编号，这个编号在未离开 vim 前是不会变的。这个指令 elvis 也是可以使用。当然 :e#编号 也是可以的，这样的用法则是所有 vi clone 都通用了。<br>在 buffers 中，减号 - 表示这个 buffer 并未载入，不过，不必担心，载入相当快速的。加号 + 表示这个 buffer 已经修改过了。<br>:bn   buffer next。这里的n代表字母n<br>:bl   buffer last。<br>以上两个指令 elvis 不适用。<br>如果您是使用 vim 的 GUI，那就在菜单上就会有 Buffers 这个选项，可以很容易的知道及移动各buffer 间。<br><br>5.3 移除缓冲区<br>:bd(elete)   buffer 在未离开 vim 前是不会移除的，可使用这个指令移除。其实移除它干什么呢？vim是您在叫用时才会载入的，因此这些 buffers 并不是像 cache 一般要占内存的。<br>5.4 重新编辑<br>放弃一修改过的文件，重新编辑。<br>(1)使用命令　:q!强行退出后再vi flname重新进入。<br>(2)使用命令　:e!强行重编辑更便捷。这样也是会打开文件，但会放弃目前编辑文件的改变，否则如果文件已有变动，vim 预设是不让您随便离开的。:e! 后不接什么的话，代表舍弃一切修改，重新载入编辑中文件。<br><br>5.5 其他命令<br>:files 或 :buffers 或 :ls   会列出目前 buffer 中的所有文件。<br>在 elvis 中可使用 :b 来叫出 buffers。<br>:f 或 Ctrl-g   显示目前编辑的文件名、是否经过修改及目前光标所在之位置。<br>:f 文件名   改变编辑中的文件名。(file)<br>:r 文件名   在光标所在处插入一个文件的内容。(read)<br>:35 r 文件名   将文件插入至 35 行之后。<br>gf   这是 vim 的特殊打开文件的方法，会打开光标所在处的 word 为名的文件，当然，这个文件要在当前目录内，否则会创建新文件。<br><br>6. 查找命令<br><br>用/查找单词后,n可以跳到下一个,N则是上一个,:nohls可以取消高亮<br>查找时,:set ignorecase&#8221;项让VIM忽略大小写，&#8220;:set noignorecase&#8221; 来关闭这项功能。<br><br>7. 修改文字<br><br>cw:删除一个单词并进入插入模式,cc:删除一行并进入插入模式。<br>r:然后输入的字母将替换当前字母并保持命令模式,R则是不停的替换(一个挨着一个)。<br>0到行首,$到行尾。<br><br>8. 函数间跳转<br>ctrl+]和ctrl+T分别是查找函数的定义和返回,好像需要ctag的支持<br>i   跳转到光标所指标识符的定义行,是打开一个新的小窗口显示,记住要加个i,最好是找自己项目下的文件,否则找库函数的话还不如man.<br>大写 K        看光标所指标识符的 man 帮助页<br>9. 窗口命令<br>= ctrl+w<br>:split 文件名 同时在一个页面显示多个文件的内容,类似多窗口,用切换当前窗口<br>f   切分显示光标在处的文件名，VIM 会在 path 中搜索该文件名，比如常用它打开 #include 语句中的文件<br>_   当同时打开几个文件时，按 _ 使当前窗口最大化<br>用Ctrl-W命令指定光标移动：<br>      Ctrl-W +       扩大窗口<br>      Ctrl-W -       缩小窗口<br>      Ctrl-W h       移动到窗口左边<br>      Ctrl-W j       移动到窗口下边<br>      Ctrl-W k       移动到窗口上边<br>      Ctrl-W l       移动到窗口右边<br>等于是按下后,松开键盘,再按下一个命令就可以了.<br>如果要关闭分割窗口可以用:close，剩下只有一个窗口的话就不能关了。<br>多窗口是split，像用e打开多个文件是将文件放在缓冲区中。<br>10. 自动完成<br><br>i   向上搜索，补全一个词<br>i   向下搜索，补全一个词<br>i 补全一行。<br>比如你写过一行 for (int i = 0; i 即可。如果补全出来的不是你想要的那一行，你可以按  或  选择上一个或下一个匹配行i   在文件系统中搜索，补全一个文件名<br>如果按  或  补全一个词，在当前文件中没有找到匹配，VIM 将搜索 #include 语句中的文件，而文件的位置将在 path 中搜索。<br>i   把上一行对应列的字符抄下来<br>i   把下一行对应列的字符抄上来,这两个都可以一直按下去,到了行尾自己会停的.<br>11. 注释整块内容<br><br>注释块的方法:<br>选定要注释掉的行   I   //   Esc<br>I之后输入的东西就是插入到选定的行前边的,直至Esc.<br>要去掉注释的办法:选定注释符//,然后d<br>列块选定后I是在前边都插入,A是在后边都插入<br>是按列块模式的选定,是行选定,v是普通选定<br><br>12. 其他命令<br><br>u可以撤销上一步操作, ctrl+r可以恢复<br>i命令执行一个普通模式的命令，执行完毕后回到插入模式，不用多次Esc<br>i后续字符   输入特殊的 ASCII 字符或键。<br>.        在光标当前位置处重复上一次操作<br>:!命令行         执行一条外部命令<br>***********************************************************************************<br>我是 vim 粉丝, 用了许久, 有一些自己的感受, 又到处挖到一些别人的技巧. 感觉对 vim 粉丝比较有用, 就把它记在这儿. 希望借此文套出大家自己的巧活, 就正应了抛砖引玉的古话了.<br>先稍为介绍一下 vim. vi 是 unix/linux 下极为普遍的一种文本编辑器, 大部分机器上都有. vi 有各种变种, 在不同的机器上常用不同的变种软件. 其中 vim 比较好用也用得比较广泛. vim 是 Vi IMproved 的缩写, 表示更好的 vi. 我个人觉得它是非常好的编辑器(为了避免 Emacs 粉丝挑眼, 就不说最好了). 没用过的也建议试试看, 当然 vim 对编写文本文件很方便好用, 比如编写程序, html文档等等, 却不能用来编写 word 文档.<br>关于 vim 的安装, 基本使用方法等网络上能搜出许多, 就不在这里罗嗦了, 要是对 vim 有兴趣, 那就看看这里(中文文档):<br>http://vcd.gro.clinux.org/<br>本文就说些其中比较有用, 比较常用的命令, 若能熟练运用这些命令, 那么会发现编辑文件很舒服.<br>说明:<br>以下的例子中 xxx 表示在命令模式下输入 xxx 并回车<br>以下的例子中 :xxx 表示在扩展模式下输入 xxx 并回车<br>小括号中的命令表示相关命令.<br>在编辑模式或可视模式下输入的命令会另外注明.<br>1. 查找<br>   /xxx(?xxx)       表示在整篇文档中搜索匹配xxx的字符串, / 表示向下查找, ? 表示<br>                   向上查找.其中xxx可以是正规表达式,关于正规式就不多说了.<br>                   一般来说是区分大小写的, 要想不区分大小写, 那得先输入<br>                   :set ignorecase<br>                   查找到以后, 再输入 n 查找下一个匹配处, 输入 N 反方向查找.<br>   *(#)             当光标停留在某个单词上时, 输入这条命令表示查找与该单词匹配的<br>                   下(上)一个单词. 同样, 再输入 n 查找下一个匹配处, 输入 N 反方<br>                   向查找.<br>   g*(g#)           此命令与上条命令相似, 只不过它不完全匹配光标所在处的单词, 而<br>                   是匹配包含该单词的所有字符串.<br>   gd               本命令查找与光标所在单词相匹配的单词, 并将光标停留在文档的非<br>                   注释段中第一次出现这个单词的地方.<br>   %                本命令查找与光标所在处相匹配的反括号, 包括 () [] {}<br>   f(F)x            本命令表示在光标所在行进行查找, 查找光标右(左)方第一个x字符.<br>                   找到后:<br>                   输入 ; 表示继续往下找<br>                   输入 , 表示反方向查找<br>2. 快速移动光标<br>    在 vi 中, 移动光标和编辑是两件事, 正因为区分开来, 所以可以很方便的进行光标定<br>位和编辑. 因此能更快一点移动光标是很有用的.<br>   w(e)             移动光标到下一个单词.<br>   b                移动光标到上一个单词.<br>   0                移动光标到本行最开头.<br>   ^                移动光标到本行最开头的字符处.<br>   $                移动光标到本行结尾处.<br>   H                移动光标到屏幕的首行.<br>   M                移动光标到屏幕的中间一行.<br>   L                移动光标到屏幕的尾行.<br>   gg               移动光标到文档首行.<br>   G                移动光标到文档尾行.<br>   c-f              (即 ctrl 键与 f 键一同按下) 本命令即 page down.<br>   c-b              (即 ctrl 键与 b 键一同按下, 后同) 本命令即 page up.<br>   ''               此命令相当有用, 它移动光标到上一个标记处, 比如用 gd, * 等查<br>                   找到某个单词后, 再输入此命令则回到上次停留的位置.<br>   '.               此命令相当好使, 它移动光标到上一次的修改行.<br>   `.               此命令相当强大, 它移动光标到上一次的修改点.<br>3. 拷贝, 删除与粘贴<br>    在 vi 中 y 表示拷贝, d 表示删除, p 表示粘贴. 其中拷贝与删除是与光标移动命令<br>结合的, 看几个例子就能够明白了.<br>   yw               表示拷贝从当前光标到光标所在单词结尾的内容.<br>   dw               表示删除从当前光标到光标所在单词结尾的内容.<br>   y0               表示拷贝从当前光标到光标所在行首的内容.<br>   d0               表示删除从当前光标到光标所在行首的内容.<br>   y$               表示拷贝从当前光标到光标所在行尾的内容.<br>   d$               表示删除从当前光标到光标所在行尾的内容.<br>   yfa              表示拷贝从当前光标到光标后面的第一个a字符之间的内容.<br>   dfa              表示删除从当前光标到光标后面的第一个a字符之间的内容.<br>   特殊地:<br>   yy               表示拷贝光标所在行.<br>   dd               表示删除光标所在行.<br>   D                表示删除从当前光标到光标所在行尾的内容.<br>   关于拷贝, 删除和粘贴的复杂用法与寄存器有关, 可以自行查询.<br>4. 数字与命令<br>    在 vi 中数字与命令结合往往表示重复进行此命令, 若在扩展模式的开头出现则表示行<br>号定位. 如:<br>   5fx              表示查找光标后第 5 个 x 字符.<br>   5w(e)            移动光标到下五个单词.<br>   5yy              表示拷贝光标以下 5 行.<br>   5dd              表示删除光标以下 5 行.<br>   y2fa             表示拷贝从当前光标到光标后面的第二个a字符之间的内容.<br>   :12,24y          表示拷贝第12行到第24行之间的内容.<br>   :12,y            表示拷贝第12行到光标所在行之间的内容.<br>   :,24y            表示拷贝光标所在行到第24行之间的内容. 删除类似.<br>5. 快速输入字符<br>    在 vi 中, 不要求你输入每一个字符, 可以有很多种方法快速输入一些字符.<br>    使用 linux/unix 的同学一定有一个经验, 在命令行下输入命令时敲入头几个字符再按<br>TAB 系统就会自动将剩下的字符补齐, 假如有多个匹配则会打印出来. 这就是著名的命令<br>补齐(其实windows中也有文件名补齐功能). vi 中有许多的字符串补齐命令, 非常方便.<br>   c-p(c-n)         在编辑模式中, 输入几个字符后再输入此命令则 vi 开始向上(下)搜<br>                   索开头与其匹配的单词并补齐, 不断输入此命令则循环查找. 此命令<br>                   会在所有在这个 vim 程序中打开的文件中进行匹配.<br>   c-x-l            在编辑模式中, 此命令快速补齐整行内容, 但是仅在本窗口中出现的<br>                   文档中进行匹配.<br>   c-x-f            在编辑模式中, 这个命令表示补齐文件名. 如输入:<br>                   /usr/local/tom 后再输入此命令则它会自动匹配出:<br>                   /usr/local/tomcat/<br>   abbr             即缩写. 这是一个宏操作, 可以在编辑模式中用一个缩写代替另一个<br>                   字符串. 比如编写java文件的常常输入 System.out.println, 这很<br>                   是麻烦, 所以应该用缩写来减少敲字. 可以这么做:<br>                   :abbr sprt System.out.println<br>                   以后在输入sprt后再输入其他非字母符号, 它就会自动扩展为System.<br>                   out.println<br>6. 替换<br>    替换是 vi 的强项, 因为可以用正规表达式来匹配字符串.以下提供几个例子.<br>   :s/aa/bb/g       将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb<br>   :s/\/bb/g   将光标所在行出现的所有 aa 替换为 bb, 仅替换 aa 这个单词<br>   :%s/aa/bb/g      将文档中出现的所有包含 aa 的字符串中的 aa 替换为 bb<br>   :12,23s/aa/bb/g 将从12行到23行中出现的所有包含 aa 的字符串中的 aa 替换为 bb<br>   :12,23s/^/#/     将从12行到23行的行首加入 # 字符<br>   :%s= *$==        将所有行尾多余的空格删除<br>   :g/^\s*$/d        将所有不包含字符(空格也不包含)的空行删除.<br>7. 多文件编辑<br>    在一个 vim 程序中打开很多文件进行编辑是挺方便的.<br>   :sp(:vsp) 文件名     vim 将分割出一个横(纵)向窗口, 并在该窗口中打开新文件.<br>                       从 vim6.0 开始, 文件名可以是一个目录的名称, 这样, vim 会<br>                       把该目录打开并显示文件列表, 在文件名上按回车则在本窗口打<br>                       开该文件, 若输入 O 则在新窗口中打开该文件, 输入 ? 可以看<br>                       到帮助信息.<br>   :e 文件名            vim 将在原窗口中打开新的文件, 若旧文件编辑过, 会要求保存.<br>   c-w-w                vim 分割了好几个窗口怎么办? 输入此命令可以将光标循环定位<br>                       到各个窗口之中.<br>   :ls                  此命令查看本 vim 程序已经打开了多少个文件, 在屏幕的最下方<br>                       会显示出如下数据:<br>                       1    %a       "usevim.html"          行 162<br>                       2    #        "xxxxxx.html"          行 0<br>                       其中:<br>                       1                表示打开的文件序号, 这个序号很有用处.<br>                       %a               表示文件代号, % 表示当前编辑的文件,<br>                                       # 表示上次编辑的文件<br>                       "usevim.html"    表示文件名.<br>                       行 162           表示光标位置.<br>   :b 序号(代号)        此命令将指定序号(代号)的文件在本窗口打开, 其中的序号(代号)<br>                       就是用 :ls 命令看到的.<br>   :set diff            此命令用于比较两个文件, 可以用<br>                       :vsp filename<br>                       命令打开另一个文件, 然后在每个文件窗口中输入此命令,就能看<br>                       到效果了.<br>8. 宏替换<br>    vi 不仅可以用 abbr 来替换文字, 也可以进行命令的宏定义. 有些命令输起来很费劲,<br>因此我把它们定义到 - 上, 这样就很方便了.这些配置可以预先写到 ~/.vimrc<br>(windows 下为 $VIM/_vimrc) 中, 写进去的时候不用写前面的冒号.<br>   :nmap  :nohls               取消被搜索字串的高亮<br>   :nmap  w                   命令模式下转移光标到不同窗口<br>   :imap                  输入模式下运行<br>   :nmap  :%s= *$==           删除所有行尾多余的空格.<br>   :imap                同上<br>   :java 中: (注, 这里为什么说 java 中, 因为以下定义对其他文件格式不起作用, 下文<br>             会说到如何实现这一点)<br>   :nmap  :comp javac:mak -d . %<br>        此命令用 javac 编译 java 文件, 它会自动将光标定位到出错点. 不过这需要定<br>        义一个 javac.vim 文件在 $VIM/compiler 下, 在 javac.vim 里面只有两行字:<br>           setlocal makeprg=javac<br>           setlocal errorformat=%A%f:%l:\ %m,%-Z%p^,%-C%.%#<br>   :nmap  :comp ant:mak<br>        此命令用 ant 编译 java 文件, 它会自动将光标定位到出错点. 一般来说, 安装<br>        vim 后已经有了compiler/ant.vim文件, 因此这个命令可以直接使用. 但是需要<br>        在当前目录下有 build.xml 文件, 当然还必须安装 ant 才行.<br>   :nmap  :cl                  此命令用于查看所有的编译错误.<br>   :imap  <br>   :nmap  :cc                  此命令用于查看当前的编译错误.<br>   :imap  <br>   :nmap  :cn                  此命令用于跳到下一个出错位置.<br>   :imap  <br>   :nmap  :cp                  此命令用于跳到上一个出错位置.<br>   :imap  <br>   :nmap  :JavaBrowser<br>        此命令用于在窗口左部分割出一个新窗口, 里面的内容是 java 的资源树, 包括<br>        本文件中出现的类, 类的成员变量及成员方法, 就好像 JCreator 表现的那样.<br>        在这个窗口中输入 ? 会看到帮助. 嘿嘿, 很好用, 不过需要 ctags 支持.<br>   :imap  <br>9. TAB<br>    TAB 就是制表符, 单独拿出来做一节是因为这个东西确实很有用.<br>    &gt;                   输入此命令则光标所在行向右移动一个 tab.<br>    5&gt;&gt;                  输入此命令则光标后 5 行向右移动一个 tab.<br>    :12,24&gt;              此命令将12行到14行的数据都向右移动一个 tab.<br>    :12,24&gt;&gt;             此命令将12行到14行的数据都向右移动两个 tab.<br>    那么如何定义 tab 的大小呢? 有人愿意使用 8 个空格位, 有人用4个, 有的用2个.<br>    有的人希望 tab 完全用空格代替, 也有的人希望 tab 就是 tab. 没关系, vim 能<br>    帮助你.以下的设置一般也都先写入配置文件中, 免得老敲.<br>    :set shiftwidth=4    设置自动缩进 4 个空格, 当然要设自动缩进先.<br>    :set sts=4           即设置 softtabstop 为 4. 输入 tab 后就跳了 4 格.<br>    :set tabstop=4       实际的 tab 即为 4 个空格, 而不是缺省的 8 个.<br>    :set expandtab       在输入 tab 后, vim 用恰当的空格来填充这个 tab.<br>10. autocmd<br>     这个命令十分的强大, 可以用这个命令实现对不同的文件格式应用不同的配置; 可以<br>在新建文件时自动添加上版权声明等等. 这些命令一般定义在 ~/.vimrc 这样的配置文件<br>里面. 由于他很强大, 所以我不能给出很具体的说明, 只能举几个例子, 详细的请看帮助.<br>   :autocmd!                删除所有之前的自动命令.<br>   autocmd FileType         java   source ~/.vim/files/java.vim<br>   autocmd FileType         java   source ~/.vim/files/jcommenter.vim<br>     以上两条命令让我在打开 java 文件时才应用后面提到的两个配置文件.<br>   autocmd BufNewFile       *.java   0r ~/.vim/files/skeletons/java.skel<br>     以上这条命令让我在新建 java 文件时自动加入 java.skel 文件的内容.<br>   autocmd BufNewFile       *.java   normal gnp<br>     以上这条命令让我在新建 java 文件时自动运行 gnp 命令, 这个命令进行一些特殊化<br>     处理, 比如将新 java 文件中的 __date__ 替换成今天的日期什么的.<br>11. 常用脚本<br>     在 vim.sf.net 你可以发现很多脚本(script), 这些脚本常常有让你意想不到的作用.<br>我常用的有:<br>     jcommenter.vim         自动加入 javadoc 风格的注释.<br>     JBrowser.vim           类资源浏览. C, C++ 等可以用 Tlist<br>     还有许多有用的, 比如 checkstyle.vim 可以检验你的编程风格, jad.vim 可以直接<br>     反编译 .class 文件等等.<br>12. 常用配置<br>     在~/.vimrc 配置文件中你常常需要一些个性化配置. 比如上面写的一些宏定义, 一些<br>autocmd 定义等等. 比如:<br>     set suffixes=.bak,~,.o,.h,.info,.swp,.aux,.bbl,.blg,.dvi,.lof,.log,.lot,.ps,.toc<br>         这样在vim中打开文件时, 按 tab 键补齐文件名时它会忽略上述文件.<br>     set nu           显示行号<br>     set ai           设置自动缩进<br>     map Y y$         让 Y 和 D 一样, 要不然 Y 的本意和 yy 一样.<br>13. 其他<br>     还有许多有意思的命令, 记录在这里免得忘记.<br>     .                                                重复上次编辑命令.<br>     :g/^/exec "s/^/".strpart(line(".")." ", 0, 4)    在行首插入行号<br>     :runtime! syntax/2html.vim                       转换 txt 成 html, 会按照你的颜色配置来转<br><img src ="http://www.cnitblog.com/201/aggbug/63915.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/201/" target="_blank">David</a> 2010-01-22 11:14 <a href="http://www.cnitblog.com/201/archive/2010/01/22/63915.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>配置管理的岗位说明书</title><link>http://www.cnitblog.com/201/archive/2010/01/19/63819.html</link><dc:creator>David</dc:creator><author>David</author><pubDate>Tue, 19 Jan 2010 06:04:00 GMT</pubDate><guid>http://www.cnitblog.com/201/archive/2010/01/19/63819.html</guid><wfw:comment>http://www.cnitblog.com/201/comments/63819.html</wfw:comment><comments>http://www.cnitblog.com/201/archive/2010/01/19/63819.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/201/comments/commentRss/63819.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/201/services/trackbacks/63819.html</trackback:ping><description><![CDATA[<p>一、配置经理的基本技能与资格</p>
<p><br>资格：<br>　　能够重视<a href="javascript:;" onclick="javascript:tagshow(event, '%c5%e4%d6%c3%b9%dc%c0%ed');" target="_self"><u><strong> 配置管理</strong> </u></a><a href="javascript:;" onclick="javascript:tagshow(event, '%b9%a4%d7%f7');" target="_self"><u><strong> 工作</strong> </u></a>；<br>　　能够按规范实施配置管理工作；<br>　　积极支持部门的配置管理方面的工作；<br>　　能够积极支持与帮助<a href="javascript:;" onclick="javascript:tagshow(event, '%c6%e4%cb%fb');" target="_self"><u><strong> 其他</strong> </u></a>人员；<br>　　为部门的配置管理能力的提高贡献力量；<br>　　熟悉公司配置流程以及其他相关的流程；<br>　　为增进项目管理，对于项目内的困难和关键问题，能够及时反映到部门；</p>
<p><br>基本技能：<br>　　能够独立规划项目的配置管理工作；<br>　　熟练掌握配置管理的相关概念；<br>　　能够了解配置的相关工具，熟练使用<a href="javascript:;" onclick="javascript:tagshow(event, '%bc%bc%ca%f5');" target="_self"><u><strong> 技术</strong> </u></a>工程部配置所使用的工具；<br>　　具有基本的与人沟通的技巧；<br>　　能够了解项目管理过程中的主要环节；<br>　　初步了解项目管理过程中的质量保证的各个方面；<br>　　了解部分系统和应用工具，如数据库ORACLE，前台开发工具DEPHI等；</p>
<p><br>二、 配置经理的职责</p>
<p><br>　　作为一名配置人员，配置经理的职责就是能够与质量人员、<a href="javascript:;" onclick="javascript:tagshow(event, '%b2%e2%ca%d4');" target="_self"><u><strong> 测试</strong> </u></a>人
员等共同保证项目的质量。如：作为质量保证的成员之一，能够为整个技术工程部规范化管理的推进作贡献，如宣传规范化管理的知识，陈述规范化管理的利弊等；
能够在项目进行的整个生命过程中，不断的与项目经理、QA、SCCB及项目成员进行配置管理规范化的沟通，为项目配置管理的规范化作出努力.</p>
<p>具体表现为：<br>　　项目进行初期或首次进入项目中时，能够首先与项目经理、QA、SCCB及项目成员就项目的未来配置管理工作进行沟通，取得项目经理、QA、SCCB及项目全体成员对配置工作的认可与支持；<br>　　积极了解项目情况，项目各阶段的进展，为更好的进行配置管理作努力；<br>　　熟练并充分的利用配置管理工具的各方面的功能，提高配置管理的效率；<br>　　为项目控制好版本，保证项目各阶段所使用的版本正确；<br>　　及时发现项目问题，把问题及时反馈给项目经理、QA或SCCB，并积极协助解决；<br>　　与项目内其他组成员，如开发组、测试组等协调工作，并能够很好的沟通；<br>　　能够在项目中不断总结、分析，为项目内配置管理工作的进一步优化作贡献；<br>　　项目进行中或结束后，能够总结并编写配置管理过程中的案例；</p>
<p><br>三、 配置经理的工作内容</p>
<p>项目计划阶段：<br>　　在项目计划阶段，是配置管理工作前期准备的重要阶段，配置经理的工作主要有以下几方面的内容：<br>1、制定配置管理计划<br>　　对于项目工程部在项目立项前期指派配置管理人员的项目，在项目立项初期，配置经理要与项目经理协商，制定配置管理的计划，规划未来的配置管理工作。配置管理计划的约束条件：<br>　　配置管理的规划必须以项目开展的工作为基础，参考工作说明书。<br>　　配置管理计划的编写必须以公司的流程为模版，与工作说明书和质量保证计划相一致；<br>　　配置管理计划能够指导未来的配置管理工作，配置管理工作必须以配置管理计划为基准；<br>　　配置管理计划必须经过最终的评审通过，才能够成立；<br>　　如配置管理计划不能满足未来配置管理工作的需要，可以再增加配置管理工作计划作为配置管理计划的辅助，指导未来的配置管理工作；<br>2、规范配置管理环境<br>　　配置管理计划制定结束后，配置管理人员要依据计划实施配置管理的前期工作。首先必须规范配置管理的环境，实现项目组内的专机专用，与项目经理协商，开发用机、测试用机、配置用机的情况，并最终生成配置管理环境维护清单，便于后期对环境的维护；<br>3、建立配置库<br>　　配置库作为项目组内成员今后工作的平台，前期的详细准备是非常重要的。配置库建立的准则：<br>　　依据配置管理计划中的定义建立配置库；<br>　　与项目经理协商配置库人员使用的权限规定与配置库工作区间的划分，保证<a href="javascript:;" onclick="javascript:tagshow(event, '%b8%f6%c8%cb');" target="_self"><u><strong> 个人</strong> </u></a>工作区间的隔离；<br>4、与项目负责人讨论变更控制的实施<br>　　与项目SCCB讨论项目中变更控制实施的措施，指定出相应的变更控制流程。在变更控制流程中应注意变更过程中责任到人，不同变更情况的处理方式，具体操作可参见《变更控制流程制定指导书》。<br>5、配置培训<br>　　配置培训作为与项目成员沟通配置管理内容的一个主要渠道，配置经理应与项目经理协商在项目开始初期进行。培训内容包括：<br>　　配置管理的基本概念；<br>　　项目中配置管理工具的使用；<br>　　项目中配置管理的相关流程；<br>　　配置库的使用及规范等；<br>6、生成计划基线，并发布基线<br>　　在项目的立项材料经过正式评审通过，宣布项目立项后，配置经理要整理项目的立项材料，正式生成计划基线，并标识基线，保证基线存放于基线库中。<br>　　基线的发布通过配置状态报告来实现。</p>
<p>项目执行阶段：<br>　　项目执行阶段，配置工作真正深入到了项目中，工作主要表现为：<br>1、维护配置库<br>　　配置库维护包括维护配置库结构、日常权限的设置、帐户的增加与删除、工作区维护、配置库备份等；维护时要注意：<br>　　对配置库的备份要与配置机分开，以确保安全性；<br>　　配置库中帐户的管理要注意定期维护，避免帐户不断增加，出现垃圾帐户的问题；<br>　　工作区的维护要注意结构清晰、明了，工作区隔离；<br>　　监督项目组成员使用配置库问题，避免工作脱离配置库平台和配置项长期被CHECK OUT的问题等；<br>2、进行版本控制<br>　　版本控制是配置管理的另一项主要内容，包括文档版本的控制和代码版本的控制。版本控制中注意的问题：<br>　　版本标识明确、清晰；<br>　　在配置库中，有效利用标签；<br>　　注意保证版本的历史在线和可以回溯；<br>　　注意每一次的开发以基线版本为基础和基准；<br>　　注意版本的受控性，保证测试的版本的受控；<br>　　每一次新的基线版本的生成，要及时发布；<br>3、协助生成项目进行过程中的各种基线<br>　　项目执行过程中生成各种基线，包括需求基线、设计基线、代码基线等，基线的正式生成要经过评审通过才有效。<br>　　配置经理协助项目经理组织评审。在评审之前首先要进行物理审计，审计后填写物理审计报告，然后传递给QA进行过程审计。物理审计报告作为配置项存放在配置库中。<br>　　评审通过后，正式生成基线，配置经理负责整理并标识基线，然后把基线存放在基线库中，通过配置状态报告来发布基线。<br>　　在代码基线生成时，注意维护源代码清单。</p>
<p>4、与测试人员协作<br>　　配置经理注意与测试人员的沟通，保证与测试组配置管理协接的无误。测试组与配置组沟通的两个主要问题是：测试配置项的管理问题和版本的传递问题。<br>
配置经理要与测试经理、项目经理沟通有关测试配置项的管理问题与版本的传递问题。测试配置项可以单独管理，也可以与其他配置项一起存放与一个配置库中，
这要根据项目的大小和配置库的增长趋势来决定，建议大型项目在有条件的情况下单独存放，单独管理测试案例、测试数据等；<br>　　版本的传递指开发组产生出代码，经配置组编译执行生成执行文件并进行版本标识后，传递给测试组进行测试的过程。在此过程中注意的问题是：配置组与开发、测试组的接口的唯一，保证测试版本的正确性。<br>5、与QA协作<br>　　配置经理负责向QA及项目经理反映项目进行过程中的不规范问题，并与QA与项目经理沟通，解决问题。<br>6、发布配置状态报告<br>　　配置经理在项目进行过程中，要及时发布配置状态报告。发布配置状态报告有两种方式：时间驱动和事件驱动。基线生成时、重要配置象产生时，都要发布配置状态报告；定期发布配置状态报告以向全体成员通报项目现阶段的进展情况，注意全体成员要包含QA。<br>7、优化配置管理活动<br>　　在配置管理过程中，随项目的进展和工作的开展情况，配置经理要适时的调整配置管理的活动。如整理配置库、优化配置流程等。但是必须注意，任何变动和更改必须经过项目经理的同意；更改后要通过配置状态报告发布；变动和更改的配置项要有相应的变更说明。<br>如配置工作需要调整时，需升级配置管理计划，必须确保工作与计划的一致性；<br>8、维护项目环境<br>　　在项目进行过程中，注意维护项目的环境，包括配置环境、测试环境、开发环境等。环境的变更要体现在配置管理环境维护清单中。环境的变化要通过配置状态报告发布出去。</p>
<p>9、协助项目组完成变更管理<br>　　配置组有责任协助项目组完成变更控制的管理，并维护变更管理过程记录。变更执行过程中出现的问题，可以向项目经理和QA甚至SCCB反映。变更执行结束，要发布配置状态报告，报告变更的情况<br>10、参加项目组的会议<br>　　为使配置管理工作对项目切实可行和有意义，配置管理人员除主动积极了解项目情况外，要参加项目组的例行会议，了解项目的总体情况，以及项目的下一步工作规划，以便配置管理及时作出反馈<br>11、参加项目工程部的活动<br>　　配置经理要积极参加项目工程部组织的各种配置活动，如配置经理述职等；</p>
<p><br>项目结项：<br>　　项目结项时，配置管理人员主要是协助项目经理整理结项材料，对项目配置管理工作进行总结、整理，编写配置管理案例、进行配置工作述职等。如项目配置项需要入产品库，则按产品库规范整理产品配置项。<br>　　在编写案例时要注意总结项目配置管理工作进行过程中的得失以及经验教训。案例总结和述职的进行都要在项目工程部内进行。</p>
<br><img src ="http://www.cnitblog.com/201/aggbug/63819.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/201/" target="_blank">David</a> 2010-01-19 14:04 <a href="http://www.cnitblog.com/201/archive/2010/01/19/63819.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件项目版本号的命名规则及格式介绍</title><link>http://www.cnitblog.com/201/archive/2010/01/19/63810.html</link><dc:creator>David</dc:creator><author>David</author><pubDate>Tue, 19 Jan 2010 02:50:00 GMT</pubDate><guid>http://www.cnitblog.com/201/archive/2010/01/19/63810.html</guid><wfw:comment>http://www.cnitblog.com/201/comments/63810.html</wfw:comment><comments>http://www.cnitblog.com/201/archive/2010/01/19/63810.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/201/comments/commentRss/63810.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/201/services/trackbacks/63810.html</trackback:ping><description><![CDATA[版本控制比较普遍的&nbsp;3&nbsp;种命名格式&nbsp;: <br>　　一、GNU&nbsp;风格的版本号命名格式&nbsp;: <br>　　主版本号&nbsp;.&nbsp;子版本号&nbsp;[.&nbsp;修正版本号&nbsp;[.&nbsp;编译版本号&nbsp;]] <br>　　英文对照&nbsp;:&nbsp;Major_Version_Number.Minor_Version_Number[.Revision_Number[.Build_Number]] <br>　　示例&nbsp;:&nbsp;1.2.1,&nbsp;2.0,&nbsp;5.0.0&nbsp;build-13124 <br>　　二、Windows&nbsp;风格的版本号命名格式&nbsp;: <br>　　主版本号&nbsp;.&nbsp;子版本号&nbsp;[&nbsp;修正版本号&nbsp;[.&nbsp;编译版本号&nbsp;]] <br>　　英文对照&nbsp;:&nbsp;Major_Version_Number.Minor_Version_Number[Revision_Number[.Build_Number]] <br>　　示例:&nbsp;1.21,&nbsp;2.0 <br>　　三、.Net&nbsp;Framework&nbsp;风格的版本号命名格式: <br>　　主版本号.子版本号[.编译版本号[.修正版本号]] <br>　　英文对照:&nbsp;Major_Version_Number.Minor_Version_Number[.Build_Number[.Revision_Number]] <br>　　版本号由二至四个部分组成：主版本号、次版本号、内部版本号和修订号。主版本号和次版本号是必选的；内部版本号和修订号是可选的，但是如果定义了修订号部分，则内部版本号就是必选的。所有定义的部分都必须是大于或等于&nbsp;0&nbsp;的整数。 <br>　　应根据下面的约定使用这些部分： <br>　　Major&nbsp;：具有相同名称但不同主版本号的程序集不可互换。例如，这适用于对产品的大量重写，这些重写使得无法实现向后兼容性。 <br>　　Minor&nbsp;：如果两个程序集的名称和主版本号相同，而次版本号不同，这指示显著增强，但照顾到了向后兼容性。例如，这适用于产品的修正版或完全向后兼容的新版本。 <br>　　Build&nbsp;：内部版本号的不同表示对相同源所作的重新编译。这适合于更改处理器、平台或编译器的情况。 <br>　　Revision&nbsp;：名称、主版本号和次版本号都相同但修订号不同的程序集应是完全可互换的。这适用于修复以前发布的程序集中的安全漏洞。 <br>　　程序集的只有内部版本号或修订号不同的后续版本被认为是先前版本的修补程序&nbsp;(Hotfix)&nbsp;更新。 <br>　　版本号管理策略 <br>　　一、&nbsp;GNU&nbsp;风格的版本号管理策略： <br>　　1．项目初版本时&nbsp;,&nbsp;版本号可以为&nbsp;0.1&nbsp;或&nbsp;0.1.0,&nbsp;也可以为&nbsp;1.0&nbsp;或&nbsp;1.0.0,&nbsp;如果你为人很低调&nbsp;,&nbsp;我想你会选择那个主版本号为&nbsp;0&nbsp;的方式&nbsp;; <br>　　2．当项目在进行了局部修改或&nbsp;bug&nbsp;修正时&nbsp;,&nbsp;主版本号和子版本号都不变&nbsp;,&nbsp;修正版本号加&nbsp;1; <br>　　3.&nbsp;当项目在原有的基础上增加了部分功能时&nbsp;,&nbsp;主版本号不变&nbsp;,&nbsp;子版本号加&nbsp;1,&nbsp;修正版本号复位为&nbsp;0,&nbsp;因而可以被忽略掉&nbsp;;&nbsp;<br>　　4．当项目在进行了重大修改或局部修正累积较多&nbsp;,&nbsp;而导致项目整体发生全局变化时&nbsp;,&nbsp;主版本号加&nbsp;1; <br>　　5．另外&nbsp;,&nbsp;编译版本号一般是编译器在编译过程中自动生成的&nbsp;,&nbsp;我们只定义其格式&nbsp;,&nbsp;并不进行人为控制&nbsp;. <br>　　二、&nbsp;Window&nbsp;下的版本号管理策略： <br>　　1．目初版时&nbsp;,&nbsp;版本号为&nbsp;1.0&nbsp;或&nbsp;1.00; <br>　　2.&nbsp;当项目在进行了局部修改或&nbsp;bug&nbsp;修正时，主版本号和子版本号都不变&nbsp;,&nbsp;修正版本号加&nbsp;1; <br>　　3.&nbsp;当项目在原有的基础上增加了部分功能时&nbsp;,&nbsp;主版本号不变&nbsp;,&nbsp;子版本号加&nbsp;1,&nbsp;修正版本号复位为&nbsp;0,&nbsp;因而可以被忽略掉&nbsp;; <br>　　4.&nbsp;当项目在进行了重大修改或局部修正累积较多&nbsp;,&nbsp;而导致项目整体发生全局变化时&nbsp;,&nbsp;主版本号加&nbsp;1; <br>　　5.&nbsp;另外&nbsp;,&nbsp;编译版本号一般是编译器在编译过程中自动生成的&nbsp;,&nbsp;我们只定义其格式&nbsp;,&nbsp;并不进行人为控制&nbsp;. <br>　　另外&nbsp;,&nbsp;还可以在版本号后面加入&nbsp;Alpha,&nbsp;Beta,&nbsp;Gamma,&nbsp;Current,&nbsp;RC&nbsp;(Release&nbsp;Candidate),&nbsp;Release,&nbsp;Stable&nbsp;等后缀&nbsp;,&nbsp;在这后缀后面还可以加入&nbsp;1&nbsp;位数字的版本号&nbsp;. <br>　　对于用户来说&nbsp;,&nbsp;如果某个软件的主版本号进行了升级&nbsp;,&nbsp;用户还想继续那个软件&nbsp;,&nbsp;则发行软件的公司一般要对用户收取升级费用&nbsp;;&nbsp;而如果子版本号或修正版本号发生了升级&nbsp;,&nbsp;一般来说是免费的&nbsp;. <br>附：&nbsp;alphal&nbsp;内部测试版 <br>　　&nbsp;beta&nbsp;外部测试版 <br>　　&nbsp;demo&nbsp;演示版 <br>　　&nbsp;Enhance&nbsp;增强版或者加强版&nbsp;属于正式版 <br>　　&nbsp;Free&nbsp;自由版 <br>　　&nbsp;Full&nbsp;version&nbsp;完全版&nbsp;属于正式版 <br>　　&nbsp;shareware&nbsp;共享版 <br>　　&nbsp;Release&nbsp;发行版&nbsp;有时间限制 <br>　　&nbsp;Upgrade&nbsp;升级版 <br>　　&nbsp;Retail&nbsp;零售版 <br>　　&nbsp;Cardware&nbsp;属共享软件的一种，只要给作者回复一封电邮或明信片即可。（有的作者并由此提供注册码等），目前这种形式已不多见。 <br>　　&nbsp;Plus&nbsp;属增强版，不过这种大部分是在程序界面及多媒体功能上增强。 <br>　　&nbsp;Preview&nbsp;预览版 <br>　　&nbsp;Corporation&nbsp;&amp;&nbsp;Enterprise&nbsp;企业版 <br>　　&nbsp;Standard&nbsp;标准版 <br>　　&nbsp;Mini&nbsp;迷你版也叫精简版只有最基本的功能 <br>　　&nbsp;Premium&nbsp;—&nbsp;贵价版 <br>　　&nbsp;Professional&nbsp;—&nbsp;专业版 <br>　　&nbsp;Express&nbsp;—&nbsp;特别版 <br>　　&nbsp;Deluxe&nbsp;—&nbsp;豪华版 <br>　　&nbsp;Regged&nbsp;—&nbsp;已注册版 <br>　　&nbsp;CN&nbsp;—&nbsp;简体中文版 <br>　　&nbsp;CHT&nbsp;—&nbsp;繁体中文版 <br>　　&nbsp;EN&nbsp;—&nbsp;英文版 <br>　　&nbsp;Multilanguage&nbsp;—&nbsp;多语言版 <br>　　注释： <br>　　&#945;版 <br>　　此版本表示该软件仅仅是一个初步完成品，通常只在软件开发者内部交流，也有很少一部分发布给专业测试人员。一般而言，该版本软件的&nbsp;bug&nbsp;较多，普通用户最好不要安装。 <br>　　&#946;（beta）版 <br>
该版本相对于&#945;版已有了很大的改进，消除了严重的错误，但还是存在着一些缺陷，需要经过大规模的发布测试来进一步消除。这一版本通常由软件公司免费发
布，用户可从相关的站点下载。通过一些专业爱好者的测试，将结果反馈给开发者，开发者们再进行有针对性的修改。该版本也不适合一般用户安装。 <br>　　&#947;版 <br>　　该版本已经相当成熟了，与即将发行的正式版相差无几，如果用户实在等不及了，尽可以装上一试。 <br>　　trial（试用版） <br>　　试用版软件在最近的几年里颇为流行，主要是得益于互联网的迅速发展。该版本软件通常都有时间限制，过期之后用户如果希望继续使用，一般得交纳一定的费用进行注册或购买。有些试用版软件还在功能上做了一定的限制。 <br>　　unregistered（未注册版） <br>
未注册版与试用版极其类似，只是未注册版通常没有时间限制，在功能上相对于正式版做了一定的限制，例如绝大多数网络电话软件的注册版和未注册版，两者之
间在通话质量上有很大差距。还有些虽然在使用上与正式版毫无二致，但是动不动就会弹出一个恼人的消息框来提醒你注册，如看图软件&nbsp;acdsee&nbsp;、智能陈
桥汉字输入软件等。 <br>　　demo版 <br>　　也称为演示版，在非正式版软件中，该版本的知名度最大。&nbsp;demo&nbsp;版仅仅集成了正式版中的几个功能，颇有点像&nbsp;unregistered&nbsp;。不同的是，&nbsp;demo&nbsp;版一般不能通过升级或注册的方法变为正式版。 <br>
以上是软件正式版本推出之前的几个版本，&#945;、&#946;、&#947;可以称为测试版，大凡成熟软件总会有多个测试版，如&nbsp;windows&nbsp;98&nbsp;的&#946;版，前前后后将近
有&nbsp;10&nbsp;个。这么多的测试版一方面为了最终产品尽可能地满足用户的需要，另一方面也尽量减少了软件中的&nbsp;bug&nbsp;。
而&nbsp;trial&nbsp;、&nbsp;unregistered&nbsp;、&nbsp;demo&nbsp;有时统称为演示版，这一类版本的广告色彩较浓，颇有点先尝后买的味道，对于普通用户而言自
然是可以免费尝鲜了。 <br>　　正式版　不同类型的软件的正式版本通常也有区别。 <br>　　release <br>　　该版本意味&#8220;最终释放
版&#8221;，在出了一系列的测试版之后，终归会有一个正式版本，对于用户而言，购买该版本的软件绝对不会错。该版本有时也称为标准版。&nbsp;一般情况
下，&nbsp;release&nbsp;不会以单词形式出现在软件封面上，取而代之的是符号&nbsp;(r)&nbsp;，如&nbsp;windows&nbsp;nt(r)&nbsp;4.0&nbsp;、&nbsp;ms-
dos(r)&nbsp;6.22&nbsp;等。 <br>　　registered <br>　　很显然，该版本是与&nbsp;unregistered&nbsp;相对的注册版。注册版、&nbsp;release&nbsp;和下面所讲的&nbsp;standard&nbsp;版一样，都是软件的正式版本，只是注册版软件的前身有很大一部分是从网上下载的。 <br>　　standard <br>　　这是最常见的标准版，不论是什么软件，标准版一定存在。标准版中包含了该软件的基本组件及一些常用功能，可以满足一般用户的需求。其价格相对高一级版本而言还是&#8220;平易近人&#8221;的。 <br>　　deluxe <br>　　顾名思义即为&#8220;豪华版&#8221;。豪华版通常是相对于标准版而言的，主要区别是多了几项功能，价格当然会高出一大块，不推荐一般用户购买。此版本通常是为那些追求&#8220;完美&#8221;的专业用户所准备的。 <br>　　reference <br>
该版本型号常见于百科全书中，比较有名的是微软的&nbsp;encarta&nbsp;系列。&nbsp;reference&nbsp;是最高级别，其包含的主题、图像、影片剪辑等相对
于&nbsp;standard&nbsp;和&nbsp;deluxe&nbsp;版均有大幅增加，容量由一张光盘猛增至三张光盘，并且加入了很强的交互功能，当然价格也不菲。可以这么说，这一
版本的百科全书才能算是真正的百科全书，也是发烧友们收藏的首选。 <br>　　professional（专业版） <br>　　专业版是针对某些特
定的开发工具软件而言的。专业版中有许多内容是标准版中所没有的，这些内容对于一个专业的软件开发人员来说是极为重要的。如微软
的&nbsp;visual&nbsp;foxpro&nbsp;标准版并不具备编译成可执行文件的功能，这对于一个完整的开发项目而言显然是无法忍受的，若客户机上没
有&nbsp;foxpro&nbsp;将不能使用。如果用专业版就没有这个问题了。 <br>　　enterprise（企业版） <br>　　企业版是开发类软件中的极
品（相当于百科全书中的&nbsp;reference&nbsp;版）。拥有一套这种版本的软件可以毫无障碍地开发任何级别的应用软件。如著名的&nbsp;visual&nbsp;c++&nbsp;的
企业版相对于专业版来说增加了几个附加的特性，如&nbsp;sql&nbsp;调试、扩展的存储过程向导、支持&nbsp;as/400&nbsp;对&nbsp;ole&nbsp;db&nbsp;的访问等。而这一版本的价
格也是普通用户无法接受的。如微软的&nbsp;visual&nbsp;studios&nbsp;6.0&nbsp;enterprise&nbsp;中文版的价格为&nbsp;23000&nbsp;元。 <br>　　其他版本　除了以上介绍的一些版本外，还有一些专有版本名称。 <br>　　update（升级版） <br>　　升级版的软件是不能独立使用的，该版本的软件在安装过程中会搜索原有的正式版，如果不存在，则拒绝执行下一步。如&nbsp;microsoft&nbsp;office&nbsp;2000&nbsp;升级版、&nbsp;windows&nbsp;9x&nbsp;升级版等等。 <br>　　OEM版 <br>　　OEM版通常是捆绑在硬件中而不单独销售的版本。将自己的产品交给别的公司去卖，保留自己的著作权，双方互惠互利，一举两得。 <br>　　单机（网络）版 <br>　　网络版在功能、结构上远比单机版复杂，如果留心一下软件的报价，你就会发现某些软件单机版和网络版的价格相差非常大，有些网络版甚至多一个客户端口就要加不少钱。 <br>　　普及版 <br>　　该版本有时也会被称为共享版，其特点是价格便宜（有些甚至完全免费）、功能单一、针对性强（当然也有占领市场、打击盗版等因素）。与试用版不同的是，该版本的软件一般不会有时间上的限制。当然，如果用户想升级，最好还是去购买正式版。 <br>&nbsp;　　以上是一些常见软件版本的简要介绍，随着软件市场行为的变化，现在也出现了一些新的版本命名方式，比如windows&nbsp;xp中的xp是取自于experience中的第二、第三个字母。希望以上内容能够对大家的购买、使用和下载软件有所帮助。 <br>
基于商业上考虑，很多的软件都不是非常严谨的遵循这个规则的。最有名的就是微软了。例如他的&nbsp;NT&nbsp;系列版本。大家比较熟悉的是从&nbsp;NT&nbsp;4.0&nbsp;开始
的。&nbsp;99&nbsp;年推出了&nbsp;windows&nbsp;2000&nbsp;，&nbsp;2001&nbsp;年退出了&nbsp;windows&nbsp;xp&nbsp;，&nbsp;2003&nbsp;年推出
了&nbsp;windows&nbsp;2003&nbsp;，乍一看版本区别蛮大的，但是看他们的内部版本号就会发现，变化其实并不大，只是界面变化的大了而已。这是软件公司经常干
的事情。&nbsp;Window&nbsp;2000&nbsp;的版本号是&nbsp;NT&nbsp;5.0&nbsp;，&nbsp;windows&nbsp;xp&nbsp;的版本号是&nbsp;NT&nbsp;5.1&nbsp;，&nbsp;windows&nbsp;2003&nbsp;的
版本号是&nbsp;NT&nbsp;5.2&nbsp;，而现在的&nbsp;longhorn&nbsp;才是真正的&nbsp;NT&nbsp;6.0&nbsp;（印象中是，不敢确认）。这样就可以持续的赚广大客户的钱。毕竟人的
眼睛看得东西是最直观的，所以给人感觉也是变化最大的。
<br><img src ="http://www.cnitblog.com/201/aggbug/63810.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/201/" target="_blank">David</a> 2010-01-19 10:50 <a href="http://www.cnitblog.com/201/archive/2010/01/19/63810.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Bugzilla 错误 Bugzilla Installation Problem -- Can't locate DateTime/Locale.pm</title><link>http://www.cnitblog.com/201/archive/2010/01/18/63800.html</link><dc:creator>David</dc:creator><author>David</author><pubDate>Mon, 18 Jan 2010 02:22:00 GMT</pubDate><guid>http://www.cnitblog.com/201/archive/2010/01/18/63800.html</guid><wfw:comment>http://www.cnitblog.com/201/comments/63800.html</wfw:comment><comments>http://www.cnitblog.com/201/archive/2010/01/18/63800.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/201/comments/commentRss/63800.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/201/services/trackbacks/63800.html</trackback:ping><description><![CDATA[<pre>Can't locate Date/Parse.pm in @INC (@INC contains: . lib /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8) at Bugzilla/Util.pm line 51.<br><br><br><br><span><strong class="highlight">To</strong> <strong class="highlight">test</strong>, I ran <strong class="highlight">the</strong> perl script <strong class="highlight">testserver</strong>.pl and am getting following<br></span><br><span>error message:<br></span><br><span>&nbsp;<br></span><br><span><strong class="highlight">Can</strong>'<strong class="highlight">t</strong> <strong class="highlight">locate</strong> <strong class="highlight">DateTime</strong>/<strong class="highlight">Locale</strong>.<strong class="highlight">pm</strong> <strong class="highlight">in</strong> @<strong class="highlight">INC</strong> (@<strong class="highlight">INC</strong> <strong class="highlight">contains</strong>: .<br></span><br><span><strong class="highlight">lib</strong>/<strong class="highlight">i386</strong>-<strong class="highlight">linux</strong>-<strong class="highlight">thread</strong>-<strong class="highlight">multi</strong> <strong class="highlight">lib</strong><br></span><br><span>/<strong class="highlight">usr</strong>/<strong class="highlight">lib</strong>/<strong class="highlight">perl5</strong>/<strong class="highlight">site_perl</strong>/<strong class="highlight">5</strong>.<strong class="highlight">8</strong>.<strong class="highlight">8</strong>/<strong class="highlight">i386</strong>-<strong class="highlight">linux</strong>-<strong class="highlight">thread</strong>-<strong class="highlight">multi</strong><br></span><br><span>/<strong class="highlight">usr</strong>/<strong class="highlight">lib</strong>/<strong class="highlight">perl5</strong>/<strong class="highlight">site_perl</strong>/<strong class="highlight">5</strong>.<strong class="highlight">8</strong>.7/<strong class="highlight">i386</strong>-<strong class="highlight">linux</strong>-<strong class="highlight">thread</strong>-<strong class="highlight">multi</strong><br></span><br><span>/<strong class="highlight">usr</strong>/<strong class="highlight">lib</strong>/<strong class="highlight">perl5</strong>/<strong class="highlight">site_perl</strong>/<strong class="highlight">5</strong>.<strong class="highlight">8</strong>.6/<strong class="highlight">i386</strong>-<strong class="highlight">linux</strong>-<strong class="highlight">thread</strong>-<strong class="highlight">multi</strong><br></span><br><span>/<strong class="highlight">usr</strong>/<strong class="highlight">lib</strong>/<strong class="highlight">perl5</strong>/<strong class="highlight">site_perl</strong>/<strong class="highlight">5</strong>.<strong class="highlight">8</strong>.<strong class="highlight">5</strong>/<strong class="highlight">i386</strong>-<strong class="highlight">linux</strong>-<strong class="highlight">thread</strong>-<strong class="highlight">multi</strong><br></span><br><span>/<strong class="highlight">usr</strong>/<strong class="highlight">lib</strong>/<strong class="highlight">perl5</strong>/<strong class="highlight">site_perl</strong>/<strong class="highlight">5</strong>.<strong class="highlight">8</strong>.<strong class="highlight">8</strong> /<strong class="highlight">usr</strong>/<strong class="highlight">lib</strong>/<strong class="highlight">perl5</strong>/<strong class="highlight">site_perl</strong>/<strong class="highlight">5</strong>.<strong class="highlight">8</strong>.7<br></span><br><span>/<strong class="highlight">usr</strong>/<strong class="highlight">lib</strong>/<strong class="highlight">perl5</strong>/<strong class="highlight">site_perl</strong>/<strong class="highlight">5</strong>.<strong class="highlight">8</strong>.6 /<strong class="highlight">usr</strong>/<strong class="highlight">lib</strong>/<strong class="highlight">perl5</strong>/<strong class="highlight">site_perl</strong>/<strong class="highlight">5</strong>.<strong class="highlight">8</strong>.<strong class="highlight">5</strong><br></span><br><span>/<strong class="highlight">usr</strong>/<strong class="highlight">lib</strong>/<strong class="highlight">perl5</strong>/<strong class="highlight">site_perl</strong><br></span><br><span>/<strong class="highlight">usr</strong>/<strong class="highlight">lib</strong>/<strong class="highlight">perl5</strong>/vendor_perl/<strong class="highlight">5</strong>.<strong class="highlight">8</strong>.<strong class="highlight">8</strong>/<strong class="highlight">i386</strong>-<strong class="highlight">linux</strong>-<strong class="highlight">thread</strong>-<strong class="highlight">multi</strong><br></span><br><span>/<strong class="highlight">usr</strong>/<strong class="highlight">lib</strong>/<strong class="highlight">perl5</strong>/vendor_perl/<strong class="highlight">5</strong>.<strong class="highlight">8</strong>.7/<strong class="highlight">i386</strong>-<strong class="highlight">linux</strong>-<strong class="highlight">thread</strong>-<strong class="highlight">multi</strong><br></span><br><span>/<strong class="highlight">usr</strong>/<strong class="highlight">lib</strong>/<strong class="highlight">perl5</strong>/vendor_perl/<strong class="highlight">5</strong>.<strong class="highlight">8</strong>.6/<strong class="highlight">i386</strong>-<strong class="highlight">linux</strong>-<strong class="highlight">thread</strong>-<strong class="highlight">multi</strong><br></span><br><span>/<strong class="highlight">usr</strong>/<strong class="highlight">lib</strong>/<strong class="highlight">perl5</strong>/vendor_perl/<strong class="highlight">5</strong>.<strong class="highlight">8</strong>.<strong class="highlight">5</strong>/<strong class="highlight">i386</strong>-<strong class="highlight">linux</strong>-<strong class="highlight">thread</strong>-<strong class="highlight">multi</strong><br></span><br><span>/<strong class="highlight">usr</strong>/<strong class="highlight">lib</strong>/<strong class="highlight">perl5</strong>/vendor_perl/<strong class="highlight">5</strong>.<strong class="highlight">8</strong>.<strong class="highlight">8</strong> /<strong class="highlight">usr</strong>/<strong class="highlight">lib</strong>/<strong class="highlight">perl5</strong>/vendor_perl/<strong class="highlight">5</strong>.<strong class="highlight">8</strong>.7<br></span><br><span>/<strong class="highlight">usr</strong>/<strong class="highlight">lib</strong>/<strong class="highlight">perl5</strong>/vendor_perl/<strong class="highlight">5</strong>.<strong class="highlight">8</strong>.6 /<strong class="highlight">usr</strong>/<strong class="highlight">lib</strong>/<strong class="highlight">perl5</strong>/vendor_perl/<strong class="highlight">5</strong>.<strong class="highlight">8</strong>.<strong class="highlight">5</strong><br></span><br><span>/<strong class="highlight">usr</strong>/<strong class="highlight">lib</strong>/<strong class="highlight">perl5</strong>/vendor_perl /<strong class="highlight">usr</strong>/<strong class="highlight">lib</strong>/<strong class="highlight">perl5</strong>/<strong class="highlight">5</strong>.<strong class="highlight">8</strong>.<strong class="highlight">8</strong>/<strong class="highlight">i386</strong>-<strong class="highlight">linux</strong>-<strong class="highlight">thread</strong>-<strong class="highlight">multi</strong><br></span><br><span>/<strong class="highlight">usr</strong>/<strong class="highlight">lib</strong>/<strong class="highlight">perl5</strong>/<strong class="highlight">5</strong>.<strong class="highlight">8</strong>.<strong class="highlight">8</strong>) at <strong class="highlight">lib</strong>/<strong class="highlight">DateTime</strong>.<strong class="highlight">pm</strong> line 46.<br></span><br><span>BEGIN failed--compilation aborted at <strong class="highlight">lib</strong>/<strong class="highlight">DateTime</strong>.<strong class="highlight">pm</strong> line 46.<br></span><br><span>Compilation failed <strong class="highlight">in</strong> require at Bugzilla/Util.<strong class="highlight">pm</strong> line <strong class="highlight">53</strong>.<br></span><br><span>BEGIN failed--compilation aborted at Bugzilla/Util.<strong class="highlight">pm</strong> line <strong class="highlight">53</strong>.<br></span><br><span>Compilation failed <strong class="highlight">in</strong> require at Bugzilla/Hook.<strong class="highlight">pm</strong> line 26.<br></span><br><span>BEGIN failed--compilation aborted at Bugzilla/Hook.<strong class="highlight">pm</strong> line 26.<br></span><br><span>Compilation failed <strong class="highlight">in</strong> require at Bugzilla/Config.<strong class="highlight">pm</strong> line 37.<br></span><br><span>BEGIN failed--compilation aborted at Bugzilla/Config.<strong class="highlight">pm</strong> line 37.<br></span><br><span>Compilation failed <strong class="highlight">in</strong> require at Bugzilla.<strong class="highlight">pm</strong> line 38.<br></span><br><span>BEGIN failed--compilation aborted at Bugzilla.<strong class="highlight">pm</strong> line 38.<br></span><br><span>Compilation failed <strong class="highlight">in</strong> require at ./<strong class="highlight">testserver</strong>.pl line 24.<br></span><br><span>BEGIN failed--compilation aborted at ./<strong class="highlight">testserver</strong>.pl line 24.<br></span><br></pre>
<p>
For help, please send mail to the webmaster (<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#114;&#111;&#111;&#116;&#64;&#108;&#111;&#99;&#97;&#108;&#104;&#111;&#115;&#116;">root@localhost</a>), giving this error message
and the time and date of the error.
</p>
<br>&nbsp;运行以下命令解决。<br><br>&nbsp;&nbsp; /usr/bin/perl install-module.pl List::MoreUtils<br>&nbsp;&nbsp; /usr/bin/perl install-module.pl DateTime::Locale
<br><br>  <img src ="http://www.cnitblog.com/201/aggbug/63800.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/201/" target="_blank">David</a> 2010-01-18 10:22 <a href="http://www.cnitblog.com/201/archive/2010/01/18/63800.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SubVersion定期完整备份脚本(Linux)</title><link>http://www.cnitblog.com/201/archive/2010/01/11/63672.html</link><dc:creator>David</dc:creator><author>David</author><pubDate>Mon, 11 Jan 2010 06:54:00 GMT</pubDate><guid>http://www.cnitblog.com/201/archive/2010/01/11/63672.html</guid><wfw:comment>http://www.cnitblog.com/201/comments/63672.html</wfw:comment><comments>http://www.cnitblog.com/201/archive/2010/01/11/63672.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/201/comments/commentRss/63672.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/201/services/trackbacks/63672.html</trackback:ping><description><![CDATA[<font color="#333333"><br><br>脚本功能: 定期对一些项目进行完整备份.<br><br>project.lst 文件格式如下:<br><br>project1<br>project2<br><br>备份脚本如下:<br><br>#!/bin/sh<br><br>#<br># subversion data backup script<br># by scud http://www.jscud.com<br># 2005-11-27<br>#<br># subversion完整备份的脚本,调整好后使用crontab -e 放到自动执行里面即可.<br>#<br><br>#备份日志文件<br>LogFile=/backup/svn/svnbak.log<br><br>DATE=`date +%Y%m%d`<br><br>#备份目录<br>BakDir=/backup/svn/data<br><br>#日常备份目录,如果有<br>DailyDir=/backup/svn/daily<br><br>#要备份的项目列表文件,只有项目名<br>ProjectLst=/backup/svn/project.lst<br><br>#所有项目都保存在这个目录下<br>SvnDir=/var/svn<br><br>#svnadmin程序的路径<br>SVNADMIN=/app/subversion/bin/svnadmin<br><br>echo " " &gt;&gt; $LogFile<br>echo " " &gt;&gt; $LogFile<br>echo "-------------------------------------------" &gt;&gt; $LogFile<br>echo $(date +"%y-%m-%d %H:%M:%S") &gt;&gt; $LogFile<br>echo "--------------------------" &gt;&gt; $LogFile<br><br>cd $BakDir<br><br>#读取项目列表<br>PROJECTLIST=`cat $ProjectLst`<br><br><br>for project in $PROJECTLIST<br>do<br>projectdata=$SvnDir/$project<br>destdir=$BakDir/$project<br>dumpfile=$DATE.$project.tgz<br><br><br>if [ -f $BakDir/$dumpfile ]<br>then<br>echo "backup file have exist!" &gt;&gt;$LogFile<br>else <br><br>$SVNADMIN hotcopy $projectdata $destdir --clean-logs<br><br>tar czvf $dumpfile $destdir &gt;/dev/null<br><br>rm -fr $project<br><br>echo "backup $project done into $dumpfile "&gt;&gt;$LogFile<br><br>fi<br><br>## delete old tgz 此处根据crontab的时间调整,例如一周一次备份,此处保留了5份备份,以前的删除<br>oldfile="$BakDir/"$(date +%y%m%d --date=&#8217;28 days ago&#8217;).$project.tgz<br><br>if [ -f $oldfile ] <br>then <br>rm -f $oldfile &gt;&gt; $LogFile 2&gt;&amp;1 <br>echo "[$oldfile]Delete Old File Success!" &gt;&gt; $LogFile <br>else <br>echo "[$oldfile]No Old Backup File!" &gt;&gt; $LogFile <br>fi<br><br>done<br><br><br>#delete previous daily backup files<br>cd $DailyDir<br>rm -f *<br><br><br><br><br>根据自己的设置配置好后,使用crontab 放到定时执行的任务里即可.</font>
<br><img src ="http://www.cnitblog.com/201/aggbug/63672.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/201/" target="_blank">David</a> 2010-01-11 14:54 <a href="http://www.cnitblog.com/201/archive/2010/01/11/63672.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>