继续 101 Switching Protocols
切换协议 200 OK
正常 201 Created
已创建 202 Accepted
已接受 203 Non-Authoritative Information
非权威性信息 204 No Content
无内容 205 Reset Content
重置内容 206 Partial Content
部分内容 300 Multiple Choices
多种选择 301 Moved Permanently
永久重定向 302 Found
临时重定向 303 See Other
见其他 304 Not Modified
未修改 305 Use Proxy
使用代理 307 Temporary Redirect
临时重定向 400 Bad Request
请求出现语法错误 401 Unauthorized
未验证 403 Forbidden
资源不可用 404 Not Found
无法找到指定位置的资源 405 Method Not Allowed
不允许的请求方法 406 Not Acceptable
无法接受 407 Proxy Authentication Required
代理需要验证 408 Request Timeout
请求超时 409 Conflict
冲突 410 Gone
不再可用 411 Length Required
需要提供长度 412 Precondition Failed
先决条件失败 413 Request Entity Too Large
请求实体太大 414 Request URI Too Long URI
请求 URI 太长 416 Requested Range Not Satisfiable
所请求的范围无法满足 500 Internal Server Error
内部服务器错误 501 Not Implemented
服务器不支持实现请求所需要的功能 502 Bad Gateway
Web 服务器用作网关或代理服务器时收到了无效响应 503 Service Unavailable
服务不可用 504 Gateway Timeout
网关超时 505 HTTP Version Not Supported
HTTP版本不受支持 FTP 110 Restart marker reply. In this case, the text is exact and not left to the particular implementation; it must read: MARK yyyy = mmmm where yyyy is User-process data stream marker, and mmmm server's equivalent marker (note the spaces between markers and "=").
重新启动标志回应。这种情况下,信息是精确的并且不用特别的处理;可以这样看:标记 yyyy = mmm 中 yyyy是用户进程数据流标记,mmmm是服务器端相应的标记(注意在标记和等号间的空格)。 120 Service ready in nnn minutes.
服务在NNN时间内可用 125 Data connection already open; transfer starting.
数据连接已经打开,开始传送数据。 150 File status okay; about to open data connection.
文件状态正确,正在打开数据连接。 200 Command okay.
命令执行正常结束。 202 Command not implemented, superfluous at this site.
命令未被执行,此站点不支持此命令。 211 System status, or system help reply.
系统状态或系统帮助信息回应。 212 Directory status.
目录状态信息。 213 File status.
文件状态信息。 214 Help message.On how to use the server or the meaning of a particular non-standard command.
This reply is useful only to the human user.
帮助信息。关于如何使用本服务器或特殊的非标准命令。此回复只对人有用。 215 NAME system type. Where NAME is an official system name from the list in the Assigned Numbers document.
NAME系统类型。 220 Service ready for new user.
新连接的用户的服务已就绪。 221 Service closing control connection.
控制连接关闭。 225 Data connection open; no transfer in progress.
数据连接已打开,没有进行中的数据传送。 226 Closing data connection. Requested file action successful (for example, file transfer or file abort).
正在关闭数据连接。请求文件动作成功结束(例如,文件传送或终止)。 227 Entering Passive Mode (h1,h2,h3,h4,p1,p2).
进入被动模式。 230 User logged in, proceed. Logged out if appropriate.
用户已登入。 如果不需要可以登出。 250 Requested file action okay, completed.
被请求文件操作成功完成。 257 "PATHNAME" created.
路径已建立。 331 User name okay, need password.
用户名存在,需要输入密码。 332 Need account for login.
需要登陆的账户。 350 Requested file action pending further information
对被请求文件的操作需要进一步更多的信息。 421 Service not available, closing control connection.This may be a reply to
any command if the service knows it must shut down.
服务不可用,控制连接关闭。这可能是对任何命令的回应,如果服务认为它必须关闭。 425 Can't open data connection.
打开数据连接失败。 426 Connection closed; transfer aborted.
连接关闭,传送中止。 450 Requested file action not taken.
对被请求文件的操作未被执行。 451 Requested action aborted. Local error in processing.
请求的操作中止。处理中发生本地错误。 452 Requested action not taken. Insufficient storage space in system.File unavailable (e.g., file busy).
请求的操作没有被执行。 系统存储空间不足。 文件不可用。 500 Syntax error, command unrecognized. This may include errors such as command line too long.
语法错误,不可识别的命令。 这可能是命令行过长。 501 Syntax error in parameters or arguments.
参数错误导致的语法错误。 502 Command not implemented.
命令未被执行。 503 Bad sequence of commands.
命令的次序错误。 504 Command not implemented for that parameter.
由于参数错误,命令未被执行。 530 Not logged in.
没有登录。 SMTP 200 (nonstandard success response, see rfc876)
(非标准的成功响应,见rfc876) 211 System status, or system help reply
系统状态,或系统帮助回复 214 Help message
帮助信息 220 <domain> Service ready
<域名> 服务就绪 221 <domain> Service closing transmission channel
<域名> 服务正在关闭传输通道 250 Requested mail action okay, completed
请求的邮件操作OK,完成 251 User not local; will forward to <forward-path>
非本地用户;将转向到<forward-path> 354 Start mail input; end with <CRLF>.<CRLF>
开始输入邮件;以<CRLF>.<CRLF>结束 421 <domain> Service not available, closing transmission channel
<域名> 服务不可用,正在关闭传输通道 450 Requested mail action not taken: mailbox unavailable
请求的邮件操作未被接受:邮箱不可用 451 Requested action aborted: local error in processing
请求的操作已中断:处理中发生内部错误 452 Requested action not taken: insufficient system storage
请求的操作未被执行:系统空间不足 500 Syntax error, command unrecognised
语言错误,命令未知 501 Syntax error in parameters or arguments
参数或变量的语法错误 502 Command not implemented
命令尚未实现 503 Bad sequence of commands
错误的命令顺序 504 Command parameter not implemented
命令参数尚未实现 521 <domain> does not accept mail (see rfc1846)
<域名> 不接受邮件(见rfc1846) 530 Access denied
禁止访问 550 Requested action not taken: mailbox unavailable
请求的操作未被执行:邮箱不可用 551 User not local; please try <forward-path>
非本地用户;请尝试<forward-path> 552 Requested mail action aborted: exceeded storage allocation
请求的邮件操作已中断:超出了分配的空间 553 Requested action not taken: mailbox name not allowed
请求的操作未被执行:不允许的邮箱名称 554 Transaction failed
传输失败
1.为什么要用VisualSVN Server,而不用Subversion?
回答:
因为如果直接使用Subversion,那么在Windows 系统上,要想让它随系统启动,就要封装SVN Server为windws service,还要通过修改配置文件来控制用户权限,另外如果要想以Web方式【http协议】访问,一般还要安装配置Apache,如果是新手,岂不是很头痛?而VisualSVN Serve集成了Subversion和Apache,省去了以上所有的麻烦。安装的时候SVN Server已经封装为windws service,Apache服务器的配置也只是在图像界面上,指定认证方式、访问端口等简单操作;另外,用户权限的管理也是通过图像界面来配置。
2.为什么不用TFS?
回答:
因为我们一开始就是用Subversion和TortioseSVN,所以就没有更换其他的软件。至于TFS至今没有用过,其实,我只是看了一些的文章而已,对它也不了解。
3.VisualSVN Server是免费的吗?
回答:
是的,VisualSVN Server是免费的,而VisualSVN是收费的。VisualSVN是SVN的客户端,和Visual Studio集成在一起, VisualSvn Server是SVN的服务器端,包括Subversion、Apache和用户及权限管理,优点在上面已经说过了。
好了,言归正传,正式开始我们今天的教程。
一、VisualSVN Server的配置和使用方法【服务器端】
安装好VisualSVN Server后【安装过程看这里】,运行VisualSVN Server Manger,下面是启动界面:
好的,下面我来添加一个代码库【Repository】,如下图:
按上图所示,创建新的代码库,在下图所示的文本框中输入代码库名称:
注意:上图中的CheckBox如果选中,则在代码库StartKit下面会创建trunk、branches、tags三个子目录;不选中,则只创建空的代码库StartKit。
点击OK按钮,代码库就创建成功了。
创建完代码库后,没有任何内容在里面。我会在这个教程的第二部分说明如何迁入源代码。
下面,我们开始安全性设置,在左侧的Users上点击右键:
输入上面的信息,点击OK,我们就创建一个用户了。按照上面的过程,分别添加用户Developer1、tester1、manager1,好了,我们开始添加这些用户到我们刚才创建的项目里:
点击上图中的"Add..."按钮,在下图中选择我们刚才添加的用户,点击OK按钮:
说明:大家可能注意到了下图中的Groups,是的,你也可以先创建组,把用户添加到各个组中,然后对组进行授权,操作比较简单,在此略过。
按照下图所示,分别对用户【或组】进行授权:
点击"确定"按钮,上面的用户就具有了访问StartKit代码库的不同权限。
因为用户starter在团队中是新来者,不希望他向代码库中提交新代码,所以他只能读取代码库中的代码,不能提交代码。tester1是测试人员,不负责代码编写,所以也是只读权限。而Developer1和manager1是开发人员和项目经理,自然具有读、写的权限。
在实际的项目开发过程中,Developer和tester往往不可能只有一个人,这时候使用组来授权更加方便,这个大家可以自己练习一下。
二、TotoiseSVN的基本使用方法
在 项目管理实践教程一、工欲善其事,必先利其器【Basic Tools】中,我已经讲解了怎样安装TortoiseSVN。在上面的讲解中已经讲了怎么使用VisualSVN Server了,今天我要讲的是,TortoiseSVN的简单使用方法。
一、签入源代码到SVN服务器假如我们使用Visual Studio在文件夹StartKit中创建了一个项目,我们要把这个项目的源代码签入到SVN Server上的代码库中里,首先右键点击StartKit文件夹,这时候的右键菜单如下图所示:
图2-2-1
点击Import,弹出下面的窗体,其中http://zt.net.henu.edu.cn 是服务器名,svn是代码仓库的根目录,StartKit是我们在上个教程中添加的一个代码库:
说明:左下角的CheckBox,在第一次签入源代码时没有用,但是,在以后你提交代码的时候是非常有用的。
图2-2-2
点击OK按钮,会弹出下面的窗体,要求输入凭据:
图2-2-3
在上面的窗体中输入用户名和密码,点击OK按钮:
图2-2-4
如上图所示,好了,源代码已经成功签入SVN服务器了。这时候团队成员就可以迁出SVN服务器上的源代码到自己的机器了。
二、签出源代码到本机在本机创建文件夹StartKit,右键点击Checkout,弹出如下图的窗体:
图2-2-5
在上图中URL of Repository:下的文本框中输入svn server中的代码库的地址,其他默认,点击OK按钮,就开始签出源代码了。
说明:上图中的Checkout Depth,有4个选项,分别是迁出全部、只签出下一级子目录和文件、只签出文件、只签出空项目,默认的是第一项。上面的例子中,我们也可以使用web的方式访问代码库,在浏览器中输入http://zt.net.henu.edu.cn/svn/StartKit/
这时候也会弹出对话框,要求输入用户名和密码,通过验证后即可浏览代码库中的内容。
搞定!源代码已经成功签出到刚才新建的StartKit目录中。
打开StartKit目录,可以看到如下图的文件夹结构:
图2-2-5
一旦你对文件或文件夹做了任何修改,那么文件或文件夹的显示图片机会发生变化。下图中我修改了其中的二个文件:
图2-2-7
大家看一下不同状态所对应的图片:
图2-2-8
我们已经知道怎么将源代码签入到SVN服务器,怎么从服务器签出代码到本机,也简单了解了不同状态所对应的图案啦。
三、提交修改过的文件到SVN服务器上面的图2-2-7中,我修改了位于Model文件中的二个文件ImageInfo.cs和NewsInfo.cs,下面演示如何提交到SVN服务器。
注意:提交源代码到服务器时,一定确保本机的代码是最新版本,否则可能提交失败,或者造成版本冲突。
在Model文件夹上点击右键或在Model文件下的空白处点击右键,点击SVN Commit…弹出下面的窗体:
图2-2-9
点击OK按钮后,弹出如下图的窗体:
图2-2-10
四、添加新文件到SVN服务器
我们在Model文件下添加一个新的类文件UserInfo.cs,在Model文件下的空白处点击右键,点击SVN Commit…,和上面讲的提交修改过的文件到SVN服务器一样,就可以了。
另外也可以在文件UserInfo.cs上点击右键,点击TortoiseSVN=>>Add,弹出如下图的窗体:
图2-2-11
选中UserInfo.cs文件,点击OK按钮,这样并没有将这个文件提交到SVN服务器,只是将这个文件标记为源代码库库中的文件,并将其状态置为修改状态。之后,我们要再SVN Commit这个文件一次,才可以将其真正提交到SVN服务器上的代码库中。
上面讲是添加文件,实际上,添加文件夹的步骤也是一样的,这里就不说了。
五、更新本机代码与SVN服务器上最新的版本一致
这个也很简单,只要在需要更新的文件夹上点击右键或在该文件下的空白处点击右键,点击SVN Update,就可以了。
注意:更新操作可能会因为版本冲突而失败,这是可以使用合并【Merge】或其他方法解决;也可能因为锁定【Get Lock】而失败,这是需要先解锁【Release Lock】。
六、重命名文件或文件夹,并将修改提交到SVN服务器只要在需要重命名的文件或文件夹上点击右键,点击TortiseSVN=>>Rename…,在弹出的窗体中输入新名称,点击OK按钮,就可以了。此方法也不是直接重命名,而是将该文件或文件夹的名称标记为重命名后名称,也需要我们使用SVN Commit提交到SVN服务器后才真正重命名。
七、删除文件或文件夹,并将修改提交到SVN服务器最简单就是,你直接删除文件或文件夹,然后使用SVN Commit提交更新到SVN服务器。另外一种方法是在你要删除的文件或文件夹上点击右键=>>TortoiseSVN=>>Delete删除,此方法也不是直接删除,而是将该文件或文件夹的状态置为删除,也需要我们使用SVN Commit提交到SVN服务器后才真正删除。
说明:实际上,从你把源代码迁签入SVN服务器开始,每一个版本的数据和文件,就算是你已经删除了的,也都可以随时迁出。
以上只是TortoiseSVN最简单的几个功能,其实他的功能远不止这些,其他的功能大家可以在使用的过程中慢慢体会,有些功能我会在下面的教程中使用到,到时候会和大家讲清楚用法。
注意:向SVN服务器提交源代码的时候,一定不要提交bin、obj等文件夹,否则会很麻烦。但是web项目的bin目录除外,但是web项目的bin目录中的引用其他项目而生成的dll不需要提交。
一个好习惯:如果项目中引用了其他的第三方的程序集,比如EnterpriseLibrary、FCKEditor等,这时候不要简单从他们的安装位置引用,而是在你的解决方案下,添加一个Library的目录,把需要的程序集复制到这里,然后从Library目录引用,这样有什么好处,自己想一想吧!
如果大家有什么问题,尽管跟帖提问,我一定及时回答。
好了,今天就先写到这里吧,本来说这部分准备写一篇Blog,可是现在写了这么长,还只是说了一点很基本的东西而已,呵呵……
如果你对我讲解的这些内容不熟悉,建议你从头开始看这个系列的教程:项目管理实践系列教程。
我使用系统是: Microsoft Windows xp sp2
第一:下载软件
有两个软件需要下载的:
Subversion和TortoiseSVN
Subversion 下载地址:http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91
TortoiseSVN下载地址:http://tortoisesvn.net/downloads
(有些文档说必备软件还有Apache,但这么说法的大多是较旧的文档这么提到,随着软件的更新,已经没有必要安装Apache了,安装Apache是为了SVN能干更多事,比如可以基于HTTP去访问等。)
软件安装完后需要重启系统。
第二,建立服务和根目录创建
建立svn的根目录:例如在E盘建立文件夹SVNRoot。
然后是建立svn服务:(这里把svn服务建立为一个windows的服务)
在命令行下敲入:SC create svn1.5 binPath= "\"C:\Program Files\Subversion\bin\svnserve.exe\" --service --root \"E:\SVNRoot\"" depend= Tcpip start= auto
(第一块红色部分为subversion的安装位置,第二块红色为刚才创建的SVN根目录,注意:命令行中等号前不能有空格,等号后必须有空格)
运行后打开windows的服务窗口检查,如果有svn1.5这么个服务,说明建立成功了,初次建立可能要手动启动下(不然重启动系统也可以,当然这里没有必要重启系统)
第三:具体项目的建立和配置。
这里假设我们有个项目DemoProject需要用svn来管理。
在E:\SVNRoot下新建文件夹DemoProject。进入DemoProject,鼠标在空白处点击右键,选择TortoiseSVN,再选择Create repository here。操作完后可以看见本来空的文件夹内多了些文件和文件夹。
现在可以来测试以上步骤是否正确,在F盘创建DemoProject(开发项目时的文件夹),进入新创建的文件夹,空白处点击右键,选择SVNCheckOut,Url repository填入svn://localhost/DemoProject,其他默认。点击OK,(如果窗口Action有显示Completed,那说明操作成功)。
这样虽然可以访问了,但是并没有完成,我们需要配置文件的读写权限。这时我们进入E:\SVNRoot\DemoProject\conf。
里面有三个文件。默认里面几乎所有的代码都被使用#注释了。
接下去我们来修改这三个文件来配置svn的验证和授权。(请大家要区分验证和授权)
首先是svnserve.conf文件。
# anon-access = read把这行改成anon-access = none,表示禁止匿名访问(注意:anon前面不能有空格)
# password-db = passwd把这行前面的注释去掉,并删除空格,表示验证用户使用passwd文件。
# authz-db = authz把这行前面的注释去掉,并删除空格,表示授权使用authz文件。
然后修改passwd文件,部分文件内容:
[users]
# harry = harryssecret
# sally = sallyssecret
我想看下这个文件内容就应该知道作用了,这里是配置svn的用户名和密码,这里harry是用户名,等号后面是用户密码,sally是另外一个用户。当然这两行代码都是被注释的。你可以删除注释启用他们,也可以自己加一行,比如:
kate = 123456
这里用的密码是明文,如果你的项目安全要求较高,可以使用加密的密码,配置比较麻烦,这里不说了。还有用户名之间可不可以有空格,用户名和密码的合法字符等,这些我没做测试。
最后配置authz
第一个属性节点是aliases,别名,不知道作用在哪,估计就是将同等权限的许多用户合并成一个名称。我这里没有做修改。
第二个属性节点groups,组别,这很好理解,就是把相同权限的用户合并入一个组,以便下面配置授权时更加简洁。
下面的属性节点都是目录授权节点。
[/foo/bar]表示以下设置/foo/bar目录下的授权。以下授权格式是: 用户名|组别名 = rw | r,r是read的缩写,表示有读的权限,w是write的缩写,表示可写权限,rw表示可读可写。
如果在根目录下配置使用[/]就可以了。
配置完成后,再次进入F:/DemoProject,在空白处鼠标右键,选择SVNUpdate,这时会弹出个窗口要求我们输入用户名和密码,输入在passwd文件中配置的用户名和密码后就可以访问了。
这样一个项目就配置完成了。接下去就可以使用了。具体的Update, Commit等操作使用就不说了。
Two tips:
1.
我们习惯的懒惰的操作就是下班前整个项目commit,但事实是没有必要把整个项目的所有文件都提交给svn管理,甚至有些文件提交后麻烦大大的。比如vs solution下的xxx.user文件,这个提交后造成冲突几乎是100%的。
解决的方法就是在在TortoiseSVN的Setting中设置Global ignore pattern值为“*/bin */obj *.bak *.*scc *.user *.suo *.gpState *.webinfo bin obj *.dll *.pdb *.exe Thumbs.db */TestResults”,这里示例的pattern主要针对使用Visual Studio的开发人员。
2.
在TortoiseSVN的Setting中勾选 Use "_svn" instead of ".svn" directories,某些时候(我不确定是那些时候).svn在windows系统会出错。
参考文章:
http://www.blogjava.net/zpuser/archive/2008/06/08/206654.html
Setting_up_a_Subversion_Server_under_Windows
11月25更新:
如果你看不懂上面的文章,建议你使用可视化的配置软件来配置subversion服务。介绍文章由本文的热心评论网友提供:
http://www.cnblogs.com/ttzhang/archive/2008/11/06/1325940.html
(我看了这篇文章配置subversion,然后使用了VisualSVN Server来配置,确实很简单!)