您当前的位置:首页 > 美文摘抄 > 内容

svn服务端使用教程(如何设置SVN服务器端)

本文目录

  • 如何设置SVN服务器端
  • 如何搭建svn本地服务器,管理本地的代码
  • Windows与Linux下SVN怎样使用
  • 如何在win上搭建SVN服务器
  • 如何利用svn自动同步更新到网站服务器
  • 详细使用TortoiseSVN的步骤

如何设置SVN服务器端

方法/步骤1安装过程就不在这里叙述了,在网上可以找到很多的资料,安装起来也和方便,本机已经安装了svn,现在就让我们直接看服务器端的图形化界面,从这里开始吧!2首先来说一下Repositories这个是我们的资源库的目录,右击找到Create New Repository点击就会进入要写资源库名称的界面,在这里自己写一个名字即可(可以根据自己的项目名称在写一个,这样容易识别),我再这里写了一个名称,下边有一个复选框,这个复选框的意思是要不要新建出来几个文件夹,分成主线或者是分支,根据自己的需要,如果项目要有分支可以选择,也可以不选,我再这里选择并且点击ok。3确认以后我们就新建出来了一个空间,来存放我们的项目,一般主版本还是要存放在trunk中,这个没有明确的界限,根据自己的选择来存放即可。4然后来跟大家演示一下如何新建SVN用户,在资源库下边就有一个Users,右击Users找到Create User点击进入填写用户名和密码,这个就是我们在下载或者是提交项目是用到的用户名和密码。一般只是第一次输入就可以了。5上传完项目以后还可以对此项目设置可以访问的用户权限,如果不设置的话默认是都可以读写的,右击项目找到Properties点击就可以添加访问用户和设置此用户的读写权限了,最好是设置一下,这样更安全一些。6如果以上步骤完成,在工具中就可以访问到此svn了,进行自己的操作即可。但是还有一点需要注意的是如果是本机可以直接用本机ip访问端口是可以选择的,如果是外网那就需要甩一个端口出来才可以访问。http://jingyan.baidu.com/article/48b558e34c08d77f38c09a3e.html

如何搭建svn本地服务器,管理本地的代码

搭建SVN服务器端: 1. 解压缩svn到一个目录, 例如c:\svn 2. 解压缩svnservice的压缩包, 将svnservice.exe放入c:\svn\bin 3. 安装TortoiseSVN, 安装完毕时会提示重新启动计算机, 重启完毕后安装简体中文语言包, 然后在随便一个目录右击, 就会发现多出了一些SVN相关菜单, 选择其中的TortoiseSVN, 再选择子菜单“Settings“, 设置Language为“中文(简体)“ 4. 打开“我的电脑“, 建立一个存放svn信息的目录, 例如c:\svnhome, 然后返回在c盘, 右击这个svnhome目录, 在出现的菜单中选择TortoiseSVN, 再选择子菜单“在此创建文件库“, 选择fsfs方式即可 (注: 这里选择创建文件库实际上就相当于让TortoiseSVN代替你进行了svnadmin create c:\svnhome的操作) 5. 在dos控制台状态下cd c:\svn\bin 然后svnservice -install -d -r c:\svnhome 再net start svnservice来将其作为服务运行, 建议你再到控制面板-管理工具-服务中找到SVNService, 右击选择“属性“, 再将其启动类型设置为“自动“ 6. 打开c:\svnhome, 你会发现已经多了一些目录和文件, 打开conf子目录, 打开svnserve.conf文件, 这里行前凡是有#的都等于是被注释忽略了, 你可以把#去掉让那一行生效, 或者自己新添加行. 里面的英文注释已经详细说明了各种设置的含义, 最后你设置[general]小节中行前没有#号的内容为: anon-access = none auth-access = write password-db = passwd 含义是: 未验证用户无任何权限 (如果把none修改为read就是给予读权限) 已验证用户给予写权限 (当然也能读) 密码数据存放到passwd文件中 然后打开同目录的passwd文件来设置帐户: 同样, 设置[users]小节中行前没有#号的内容, 例如: snowman=abc123 含义是: 用户snowman的密码为abc123 6. 打开“我的电脑“, 在你需要进行版本控制的目录上右击, 选择TortoiseSVN, 再选择子菜单“导入...“, 设置“文件库url“为svn://localhost 点确定后就会提示文件正在导入. (注: 这里是svn文件库与svn服务是同一台计算机的情况, 所以可用localhost, 其它机器如果要访问svn服务, 应该用svn://svn服务器的IP地址, 例如svn://10.0.0.52) 至此, SVN服务器配置完成 客户端配置: 1. 没安装TortoiseSVN的计算机先安装它并重启计算机. (注: 具体步骤参照前面搭建服务器端的第3步) 2. 创建一个准备用来存放版本控制工程的目录, 例如d:\project, 然后在“我的电脑“中右击这个目录, 选择“SVN取出...“, 设置“文件库url“为svn://svn服务器的IP地址, 接下来会问你用户名和帐号, 你就填写前面搭建服务器端所设置的用户snowman密码abc123 (文件库url可参照前面搭建服务器端第6步的注解) 点确定后就会提示文件正在取出到d:\project 至此, SVN客户端配置完成, 你会看到d:\project及其下面的文件都被标记了绿色对勾 客户端的简单日常使用: 1. 要取得工程的当前的最新版本, 右击d:\project, 选择“SVN更新“ 2. 你更改工程后, 要将你的修改更新到SVN, 右击d:\project, 选择“SVN提交“ (谨慎的话请先更新到SVN最新版本后再提交)

Windows与Linux下SVN怎样使用

Windows与Linux下SVN怎样使用?本文分2个部分(包括Windows与Linux操作系统平台),第1部分:怎样安装 第2部分:怎样使用-----------------------------------------第1部分:怎样安装-----------------------------------------怎样安装分2种情况,第1种:在公司上班 第2种:在宿舍电脑--------------------第1种:在公司上班--------------------说明:通常SVN服务器是安装在windows上的,安装好后,客户端2种平台都能使用Windows平台下服务端与客户端:通常这种情况,你想安装,公司都不会让你安装,一般是由公司内网管专业人士统一安装好,并给你分配好账户与密码,以及每个SVN下使用权限,所以这种情况你可以不用去管怎样安装了,只管怎样使用即可linux平台下服务端:即windows上的服务端客户端:如果你在本机安装的Linux虚拟机,通常是自己安装的,不是公司网管安装的,安装办法如下:1步即能安装:在linux下输入命令 sudo apt-get install subversion即SVN,安装后同windows上SVN一样,只不过这里是输入命令而已--------------------第2种:在宿舍电脑--------------------Windows与Linux平台下说实在的,宿舍就1台电脑.本来电脑就垃圾.而且还开着虚拟机,在开2个VS2010,就已经卡的要死.在来个SVN,估计会慢如蜗牛,其实大部分程序员也是只有一台电脑,安装SVN真的没必要.除非有多台电脑.SVN本质是为方便团队开发-----------------------------------------第2部分:怎样使用-----------------------------------------怎样使用要分2种情况,第1种:是Windows平台 第2种:是Linux平台--------------------第1种:是Windows平台--------------------1.更新右键-》SVN更新2.提交(也可说成是上传)第1步:进入要提交的SVN文件目录里面,导入文件第2步:导入后,返回上一层目录,即返回到要提交的SVN文件目录,右键点击此SVN目录,弹出,提交,进入第3步:进入提交对话框后,会显示2个编辑框,上面的编辑框是确认要提交的内容,下面的编辑框是你刚导入的文件内容,你现在若是想提交刚才导入的内容,就把下面编辑框的内容用鼠标拖动到上面的编辑框,并按确定若不想提交刚才导入的内容,直接按取消退出即可3.导出即怎样去掉SVN的专用标志,有的是对勾,有的是?号等等?方法 1:在文件属性---》选择显示所有文件,这时文件里会出现1个.svn的文件目录,把它删掉即可.(文件目录多时,不推荐)方法 2:在SVN右键---》导出,这时导出的文件不会带SVN标志了4.删除在SVN右键中,删除之后.要返回上一层目录,点提交.删除信息在变更列表,要拖动到信息栏下,然后点确定5.保存认证每当电脑密码更改时,SVN以前保存的密码也会要更新,此时会弹出一个认证框,重新输入账号与新密码,在保存认证处打勾即可--------------------第2种:是Linux平台--------------------1.更新命令:svn update2.提交(也可说成是上传)第1步:进入要提交的SVN文件目录里面,第2步:添加要提交的目录用svn add *-----------》注:(*代表添加文件、目录或符号链)第3步:提交(1)提交全部svn ci -m“*“-----------》m表示写注释,*代表注释内容注:在LINUX上同一目录存在其它文件,svn ci提交时,只会提交SVN服务器已有的文件.如果想让同一目录下的其它文件也提交到SVN服务器,可以先通过svn add先添加此文件或文件夹等(2)提交单个svn ci -m“add select_area packet“ Gateway_Handler.cpp 后面一个加上要提交的文件(记的把后缀名写上去).提交成功后会提示Sending Gateway_Handler.cppTransmitting file data .Committed revision 242.3.保存认证每当电脑密码更改时,SVN以前保存的密码也会要更新,此时会显示要输入密码,重新输入账号与新密码,最后会提示是否要保存密码(yes/no),选yes即可4.下载命令 svn co * (*代表下载地址,例如更改post-commit脚本 把comm-email.pl脚本的决对路径加上,否则 SVN找不到comm-email.plREPOS=“$1“REV=“$2“/usr/local/svn/resp/commit-email.pl “$REPOS“ “$REV“ email@address1.com email@address2.com#log-commit.py --repository “$REPOS“ --revision “$REV“最后一行是用来记日志的 我不用这个功能 所以注释掉了.-------------------------------------------------------------------------------------------------------注意:为保证代码安全.最好要备份.每个操作都要谨慎

如何在win上搭建SVN服务器

方法/步骤一、准备工作1、SVN服务器:解压缩包,可以从官方网站下载最新版本。2、SVN客户端:TortoiseSVN,即常说的小乌龟,是一个客户端程序,用来与服务器端通讯。二、安装服务器和客户端程序1、SVN服务器:直接解压缩到某个文件夹下即可。示例路径:c:\svn\备注:如果下载的是msi程序,直接运行按提示安装即可。2、SVN客户端:直接运行按提示安装即可。示例路径:C:\Program Files\Subversion三、建立版本库(Repository):示例路径:e:\svnroot。建立版本库有两种方法:方法一,建立空目录e:\svnroot\repos1,进入repos1文件夹,在空白处点击右键,选择“TortoiseSVN-》Create Repositoryhere...”,方法二,建立空目录e:\svnroot\repos2,进入DOS命令行,输入如下命令:svnadmincreate e:\svnroot\repos2四、运行SVN服务器,启动服务。启动服务有两种方法:方法一,临时启动服务,在DOS下输入如下命令:svnserve -d -r e:\svnroot\repos1 --listen-host ip地址 --listen-port=端口号说明:“listen-host”和“listen-port”可选。默认端口是3690,如果端口已经被占用,可以通过选项listen-port指定端口号。注意:请不要关闭命令行窗口,关闭窗口会把 svn服务就停止了。方法二,启动SVN服务为后台运行程序:sc create svnserve binPath= “c:\svn\bin\svnserve.exe --service -r e:\svnroot\repos1“ displayname= “Subversion“ depend=Tcpip start= auto说明一:(1)sc是windows自带的服务配置程序。svnserve是服务的名称,可根据需求取名。(2)参数binPath表示svnserve可执行文件的安装路径。(3)--service表示以windows服务的形式运行,--r指明svnrepository的位置,service参数与r参数都作为binPath的一部分,因此与svnserve.exe的路径一起被包含在一对双引号当中。(4)displayname表示在windows服务列表中显示的名字,depend=Tcpip表示svnserve服务的运行需要tcpip服务,start=auto表示开机后自动运行。安装服务后,svnserve要等下次开机时才会自动运行。说明二:(1)binPath的等号前面无空格,等号后面有空格。displayname、depend、start也一样,service前面是--,不是- ,而r前面是-。(2)若要卸载svn服务,则执行 sc delete svnserve 即可。(3)从“sc”到“auto”是在同一个命令sc,必须写在同一行。(4)启动服务命令:netstart svnserve,停止服务命令:net start svnserve,也可以进入Windows提供的界面操作SVNService服务了,即控制面板—》服务。(5)如果路径中包括空格,一定要用“\”处理““”号,例如上面的例子中如果svnserve.exe在“c:\programfiles\svn\”中,则命令应该写为“binpath=“\“c:\programfiles\svn\bin\svnserve.exe\“五、配置用户和权限(1)修改svnserve.conf,在e:\svn\repos1\conf目录下,用文本编辑器打开svnserve.conf:将:# anon-access = read# auth-access = write# password-db = passwd改为anon-access = readauth-access = writepassword-db = passwd注意说明:anon-access等列前面是没有空格的。anon-access = read表示没通过用户名密码登录的访问只有读的权限,如果改为none则没有用户名密码不能访问auth-access = write表示通过用户名密码登录的有写的权限(当然读的权限也就有了)password-db = passwd表示可以通过 用户名 = 密码 的方式在passwd文件中添加用户(2)修改同目录的passwd文件,增加用户帐号:将:[users]# harry = harryssecret# sally = sallyssecret添加帐号:[users]# harry = harryssecret# sally = sallyssecretadmin = admin添加一个admin账户,密码是admin。六、初始化SVN,导入数据选中要上传SVN的文件夹,“右键 -》TortoiseSVN -》 Import...” ,在弹出对话框的“URL of repository”输入“svn://localhost/project1/”。在“Importmessage”输入注释,点击OK,要求输入帐号,输入账户admin和密码admin。七,测试SVN本地测试:新建一空文件夹test1,单击右键,选择“SVN Checkout”,在“URL of repository”中输入“svn://localhost/project1”。其他机器测试:如果运行svnserve的主机IP地址是1.2.3.4,则URL输入的内容就是“svn://1.2.3.4/project1”。

如何利用svn自动同步更新到网站服务器

一、安装 SVN服务器程序1.1运行 VisualSVN-Server-1.7.2.msi 1.2选择程序安装目录 和 SVN仓库目录 我程序装在 C:\Program Files\VisualSVN Server , SVN仓库目录在 D:\SVN1.3 安装完成,立即运行 二、服务器配置2.1服务器维护界面 2.2仓库目录默认的内容 2.3创建新项目wapzucom 2.3创建用户ve 2.4设置项目的用户权限 Properties Security Add 选择刚创建的用户 ve ok 应用 确认 三、创建测试服务器目录 D:\WWWROOT ,本地开发目录 D:\WORKDIR 四、将代码(D:\Code )导入到项目仓库输入用户名 密码 并 勾选 保存认证 导入成功,并返回版本号1 五、导出项目代码到工作副本、测试服务器目录同理,另外导出一份到测试服务器目录D:\WWWROOT (测试服务器的Apache目录指向该位置)六、使用Hooks自动更新测试服务器代码D:\WWWROOT6.1 进入 D:\SVN\wapzucom\hooks 建立 post-commit.bat 文件 编辑其内容 为“C:\Program Files\VisualSVN Server\bin\svn.exe“ update “D:\www\test“ --quiet --username name --password pwd 或者可参考下面这段话: 接下来最关键的一步是,我们需要找到服务器上安装的版本库的路径下面,以版本库名称命名的文件夹下,有一个名字为hooks的文件夹,在这个文件夹下建立post-commit.bat这样一个批处理文件,里面的内容如下: @echo off “D:\VisualSVN Server\bin\svn.exe” update “D:\Apache Software Foundation\Apache2.2\htdocs\soupei360″ –username XXXXX –password XXXXX update前面的路径,是SVN服务器端程序的执行文件路径, 后面的是在服务器上同步到的目录的路径,username和password后面是刚才建立用户的用户名和密码,这段批处理的意思是,当我们在本地编写代码,然后通过svn的commit提交时候,首先提交到版本库中,然后版本库自动用这个批处理,把内容同步到服务器上之前指定的文件夹中,从而实现本地和远程同步操作。 两款SVN配置软件的具体配置教程可以通过搜索引擎得到具体设置方法,在此需要特意强调的是,一定要将本地和服务器上的目录都check out后,批处理才能够自动同步,服务器上的目标文件夹没有check out的话,即使设置的路径正确,也是不能同步的。6.2 设置访问权限我的电脑 右键 管理 服务和应用程序 服务 VisualSVN Server 右键 属性 登陆 添加访问权限 用系统管理员账号(我这里是user) 重启服务器 6.3测试Hooks工作是否正常修改 index.php 状态 提交修改最后打开D:\WWWROOT\index.php 可以发现代码已经被成功update PS : 目录说明C:\Program Files\VisualSVN Server 服务器安装目录D:\SVN 仓库更目录D:\WORKDIR 本地开发用的工作目录D:\WWWROOT 服务器测试目录(Apache 指向该目录,即可实现工作目录内容修改后提交到SVN自动发布到测试目录)

详细使用TortoiseSVN的步骤

TortoiseSVN是一个SVN的客户端,下面是我以前不知道从哪复制的大致使用,希望对你有用:五.客户端的使用 1.Checkout Repository 首先要Checkout服务器端的Repository, 所谓的Checkout就是指获得服务器端指定的Repository存储的所有文件。 这个Checkout和Visual Source Safe的Checkout意义完全不一样, VSS的Checkout指的是锁定某个文件,如果你以前使用过VSS, 在学习Subversion时这个问题一定要注意。 Checkout的具体方式是: 在客户端新建一个空目录,比如:F:\Project1 在该目录上单击右键,在弹出式菜单中选中SVN Checkout..., 之后在“URL of Repository”文本框中填入你想要连接的Repository的地址, 这个URL地址可以用浏览方式加入。 对于在本教程第二节建立的Repository, URL应该是“svn://xxx/project1” (xxx可以是服务器端主机名,也可以是服务器端的ip地址)。 然后点OK,会弹出一个认证对话框, 输入在教程第三节设置的用户名和密码。 点OK后就完成了对Repository的Checkout。 比如:在服务器端Repository中有一个a.txt文件, 那么Checkout之后F:\Project1目录下也会出现一个a.txt文件。 在本例中由于服务器端的Repository还未添加任何文件, 所以在客户端的F:\Project1下没有文件被Checkout。 执行Checkout除了会在F:\Project1产生Repository存储的文件及目录外, 还会产生了一个“.svn”的隐含目录,该目录是由subversion管理的, 不要删除或者手工改动其中的文件和目录。 现在F:\Project1中的文件和目录就叫做Repository的“Working Copy”简写“WC” (这个简写...汗)。 以后对Repository中文件和目录的修改,添加,删除的操作, 都是通过对这个“Working Copy”的操作实现的。 Checkout执行完后, 会发现F:\Project1目录的图标的左下角附着了一个小的状态图标 (当F:\Project1目录中的文件改变时,这个状态图标也会随之变化), 它表示F:\Project1是一个Repository的“Working Copy”, F:\Project1内的所有文件和目录也会有类似的状态图标。 2.添加文件 将要添加的文件或者目录拷贝到F:\Project1下, 然后在该文件或目录上单击右键,TortoiseSVN-》Add,点OK。 如果添加了不止一个文件或目录, 则鼠标不要在F:\Project1中点中任何文件, 然后单击右键,TortoiseSVN-》Add, 就可以添加多个文件或目录。 这时文件的状态图标会发生变化。 Add命令只是告诉本地的“Working Copy”将该文件纳入版本管理, 并没有将这个改变提交到服务器端, 如果想要别人也看见你对Repository的修改,你需要 在F:\Project1下单击右键,SVN Commit..., 将你所做的修改提交到Repository。 文件的状态图标也会更新。 不管你在“Working Copy”内添加、修改、删除文件后, 要想其他人也看见你的修改, 都必须用Commit命令将所做修改递交到服务器端的Repository。 3.修改文件 用文本编辑器或IDE对文件修改后, 文件的状态图标会变化, 然后单击右键,SVN Commit... 提交修改,只有当执行Commit提交修改后, 你所作的修改才会反映到服务器端的Repository中。 4.删除文件 删除文件时,选中要删除的文件或目录, 单击右键,TortoiseSVN-》Delete,提交修改。 注意千万不要用“Delete”键来删除文件,否则将无法提交你的修改。 这一点对目录的删除来说尤为重要。 5.放弃修改 当你添加、修改、删除文件后,决定放弃修改, 你可以单击右键,TortoiseSVN-》Revert, 本地的“Working Copy”中的文件和目录会恢复到你修改前的状态。 6.获取Repository的最新版本 当一个团队合作开发项目时, 每一个人都在不断的对Repository进行更新, 你需要不断的更新自己的“Working Copy”, 以获取项目最新的文件。 当第一次获得最新Repository的文件时, 我们用Checkout命令,前面已经介绍了, 以后再获取最新文件时就不用Checkout了。 而改用Update命令。 接着前面的例子,这时F:\Project1已经成为一个“Working Copy”了 (通过执行Checkout命令),现在其他人已经对Repository进行了修改, 我想将别人的修改反映到我的“Working Copy”中, 具体的方法是:在F:\Project1目录上单击右键, SVN Update。这时F:\Project1中的文件就是最新的版本了。 注意,如果当你的“Working Copy”中有被修改的文件, 或者有被删除的文件,并且还未提交这些修改时, 这些文件在执行Update过程中是不会被更新的。 比如你修改了F:\Project1下a.txt文件, 还未提交修改,那么, 当你对F:\Project1进行Update时, a.txt文件是不会更新为Repository上的a.txt文件的。 所以如果想放弃当前的所有修改, 并将F:\Project1下所有文件及目录更新到最新版本, 应该先对F:\Project1执行Revert命令再执行Update命令。 7.subversion的版本控制模型 当你用subversion进行版本控制时, Subversion会记录你对Repository进行的每一次修改(包括添加,修改,删除等等), 每修改一次Repository都会产生一个新的Revision(修订版本号), 不同的Revision代表了不同时刻Repository的状态, 因此我们可以用这个Revision回朔任意时刻Repository的状态, 就像时间机器一样,也就是说某一Revision 就是Repository在某一时刻的一个“快照”。 注意:Revision不是针对某一个文件或者目录, 而是针对整个Repository而言的。 每修改一次Repository,Revision 都会增加1。 Subversion的版本控制模型是一种叫做Copy-Modify-Merge (拷贝-修改-合并)的模型。 考虑这种情况: 张三和李四是公司同一个部门的同事, 他们共同维护一个文本文件a.txt, 并且对该文件进行版本控制, 因此他们把这个文件放到一个Repository上共同维护该文件。 周一上午9点,张三和李四同时想对a.txt文件进行修改, 于是他们同时从Repository上取得该文件的最新版本(Revision 10), 然后进行修改。过了三分钟,张三首先完成了修改, 他在该文件的第五行修改了一个单词的拼写(将Typo改为Type), 于是张三对修改后的文件执行Commit命令, 将修改提交到服务器端的Repository中。 这时Repository的Revision变为11。 六分钟过后,李四也完成了他的修改, 他修改了该文件第十行上的一个单词拼写(将He改为She), 于是他也对修改后的文件执行Commit命令, 这时Subversion 在提交修改时会发现, 李四修改的文件是Revision10的a.txt文件, 而不是最新的Revision 11的a.txt文件。 于是,Subversion 提示李四在提交修改前, 应该先将Working Copy更新到最新版本, 李四执行Update命令将Working Copy更新到Revision 11, 这时Subversion会提示已经完成合并, 李四的a.txt文件的第五行的“Typo”已经变为了“Type”, 第十行还是“She”,就是说Subversion已经将张三的修改“合并”到李四的a.txt文件中了。 之后,李四再执行Commit命令,就能将他对第十行的修改(将He改为She) 提交到服务器端的Repository中了(生成Revision 12)。 但是这种合并在某些情况下会变得复杂一些, 比如:李四对a.txt文件的修改并不是第十行, 而是与张三同样修改第五行的单词, 李四将“Typo”改为“Typr”,并且提交修改, 这时Subversion会提示李四在提交修改前, 应该先将Working Copy更新到最新版本, 李四执行Update命令将Working Copy更新到Revision 11, 这时Subversion将Revision11的a.txt文件与 李四修改的a.txt文件进行合并时发现李四修改的同样是第五行, 于是Subversion就无法判断是李四的修改(“Tpyr”) 正确还是张三的修改(“Type”)正确, 因为他们都是在Revision10的a.txt基础上作的修改。 这种情况叫做Conflict(冲突), a.txt文件的图标会变成一个黄色三角。 这时,只能依靠李四自己去判断到底第三行应该修改为“Typr”还是“Type”。 当李四确定修改之后,在a.txt文件上单击右键,TortoiseSVN-》Resolved 告诉Subversion已经解决了Conflict。 这时再执行Commit命令就能提交修改(生成Revision 12)。 Subversion 这种控制方式保证了你对文件所作的修改都是基于文件的最新版本。 8.“.svn”目录 在客户端Working Copy的每一层目录中都会有一个“.svn”目录, 该目录是Subversion进行管理用的目录。 不要手动修改其中的文件。 该目录存储了Working Copy的一个副本 (实际存储副本的地方是F:\project1\.svn\text-base目录), 比如:F:\Project1是一个Working Copy, 该目录下有两个文件a.txt和b.txt还有一个子目录ccc, 子目录ccc中还有一个d.txt文件。 “.svn”目录中存储的是你最近一次执行完Update或者Commit命令之后当前目录中文件的副本, 比如:F:\project1\.svn\text-base中存储的a.txt和b.txt 是最近一次执行完Update或者Commit命令之后F:\project1下的a.txt和b.txt的拷贝。 也就是说你所作的修改都是基于“.svn”目录存储的那些文件。 这种机制可以让我们在不连接网络的情况下, 将Working Copy中的文件恢复到修改之前的状态。 Subversion的Revert命令就是利用了这种机制来实现的。 比如你修改了F:\project1\a.txt文件, 这时你又改变了主意想放弃对该文件的修改, 你可以单击右键,TortoiseSVN-》Revert, 修改过的F:\project1\a.txt文件 就会被F:\project1\.svn\text-base中a.txt文件的副本所替代, 使得a.txt恢复到修改前的状态。 Working Copy中每一个子目录下都会有一个“.svn”目录, 并不是只有最上层目录才有“.svn”目录。 所以,F:\project1\ccc下也有一个“.svn”目录, 该目录存储的是F:\project1\ccc\d.txt的副本 (d.txt的副本位于F:\project1\ccc\.svn\text-base)。 也就是说每个“.svn”目录只存储同级目录中的“文件”副本, 而不存储“目录”副本。“.svn”目录存有许多重要的内容, 所以前面说在删除文件或目录时, 必须用TortoiseSVN-》Delete, 而不能用“Delete”键来删除文件或目录,尤其是对于目录的删除。 9.混合版本 Subversion的Working Copy被设计成一种能够包含不同版本的文件共存的形式。 比如F:\Project1是一个Working Copy, 该目录下有两个文件a.txt和b.txt。 执行Update命令,将Working Copy更新到最新版本(Revision 24)。 这时,a.txt和b.txt的Revision都是24 (其实对于单个文件来说并不存在Revision, Revision是对于整个Repository而言的, 这里所指的是Repository的Revision24所存储的a.txt和b.txt, 但为了方便而采用这种描述方式,请注意,下同)。 之后,你的同事修改了a.txt,并且提交了修改, 这时Repository的Revision就变成25了。 注意,这时你没有再次执行Update, 因此你的Working Copy的Revision还是24。 这时你修改了b.txt文件,并提交修改。 因为Revision25并没有对b.txt文件进行修改, 因此你对b.txt文件的修改是基于b.txt文件最新的版本, 所以不会出现Conflict。 当你提交b.txt的修改后,产生Revision26。 这时你会发现你的Working Copy中的a.txt文件并不是Revision25中的a.txt文件, 它还是Revision24的a.txt文件,而你的b.txt文件是Revision26的b.txt文件。 也就是说当你Commit时,你的Working Copy中只有你提交的那些文件是最新版本, 而其他没有修改的文件并不会更新为最新版本。 这样就造成了你的Working Copy由不同的Revision文件所组成 (Revision24的a.txt文件和Revision26的b.txt文件)。 前面说过在提交修改前必须保证你是在文件的最新版本基础上修改, 如果在这种混合版本的情况下, 怎样才能知道当前Working Copy中的文件是否为最新版本? 在前面所说的“.svn”目录中有一个文件名为“entries”的文件, 该文件记录了当前Working Copy中的每一个文件的Revision, 因此当你Commit时,Subversion会从该文件中取得你提交文件的Revision, 再与Repository的最新Revision一比较就可以知道你修改的文件是否基于该文件的最新版本。 10.文件的锁定 前面说过Subversion的版本控制模型是一种叫做Copy-Modify-Merge (拷贝-修改-合并)的模型。 该模型在对文本文件进行版本控制时工作的很好, 但是有些需要进行版本控制的文件并不是文本文件, 比如说图像文件,这种模型在这种情况下就不能正常工作了, 因为文本文件可以合并,而二进制文件则无法合并。 所以Subversion从1.2开始支持一种叫Lock-Modify-Unlock (锁定-修改-解锁)的版本控制模型。 在Windows下最常用的版本控制软件Visual Source Safe(VSS)就是采用这种模型。 这种模型要求在对一个文件修改前首先要锁定这个文件, 然后才能修改,这时,别人将无法对该文件进行修改, 当修改完后再释放锁,使其他人可以对该文件进行锁定,然后修改。 锁定文件的方法是:TortoiseSVN-》Get Lock...再点OK按钮, 这时就完成了对文件的锁定。 这时,如果其他人想对文件进行锁定时, Subversion会对他提示该文件已经被别人锁定。 当你修改完文件后,然后单击右键,SVN Commit..., 将修改提交,默认情况下,提交的时候就会对该文件解锁, 如果你想仍然锁定该文件,请在commit时弹出的对话框中选中keep lock复选框。 11.文件的附加属性 在Subversion中,每个文件可以拥有一种叫做附加属性的东西。 附加属性描述了该文件所拥有的一些特性。 Subversion已经预定义了一些附加属性 (这里只是指Subversion已经定义了一些附加属性的“名称”, 并不是指已经将这些属性附加在文件上了, 比如默认情况下文本文件一开始不含任何属性, 直到人为的对该文件添加附加属性), 并且你可以对文件添加自定义的属性。 Subversion对待附加属性就像对待文件内容一样, 当修改了一个文件的附加属性(添加,改变,删除附加属性), 即使没有对文件的内容进行修改, 同样可以Commit该文件,就像更改了文件内容那样, Repository也会生成新的Revision, 所以从某种意义上来说, Subversion不区别对待文件的附加属性的修改和文件的内容的修改, 文件的附加属性可以看成是一种特殊的文件内容。 Subversion预定义了若干个附加属性, 这里只讨论“svn:needs-lock”属性, 因为它与我们上面的文件锁定会产生的一个问题有关。 其他的属性可以参考Subversion自带的帮助文档。 考虑这种情况, 张三和李四同时想对一个图片文件a.jpg作修改, 张三在修改时先将该文件锁定,然后进行修改, 同时李四也开始对该文件进行修改, 但李四忘记了对非文本文件进行修改时应该先锁定该文件。 张三首先对该文件修改完毕,于是张三向服务器提交了他的修改。 之后,李四也完成了修改,当他提交修改时, Subversion提示李四的文件版本不是最新的, 在Commit之前应先更新a.jpg到最新版本, 由于图片文件无法合并, 这就意味着张三和李四之间必定有一个人的修改会作废。 应用“svn:needs-lock”属性可以避免这个问题。 当一个文件拥有“svn:needs-lock”属性时, 该文件在没有锁定时,文件的图标是灰色的, 表示该文件是一个只读文件(该文件的Windows只读属性的复选框为选中), 这个灰色的图标就会提醒想对该文件进行修改的人, 在修改该文件之前应该首先锁定该文件。 锁定该文件之后,文件的只读属性就会去掉了, 一旦释放掉锁,文件的图标又会变成灰色, 文件也会变成只读的了。 李四在这种情况下就会避免在没有锁定文件时对文件进行修改。 对非文本文件添加“svn:needs-lock” 属性应该在将该文件第一次添加到Repository时就设置, 当然,一个文件可以在任意时刻添加附加属性, 这样做是为了减少李四所遇到的那个问题发生的几率。 具体的方法是: 首先将a.jpg文件拷贝到Working Copy中, 然后在该文件上单击右键, TortoiseSVN-》Add,告诉Subversion要将该文件纳入版本控制, 接着在该文件上单击右键并选中属性, 在弹出的属性对话框中选中Subversion页。 在下拉框中选中“svn:needs-lock”, 并在下面的文本框中填入“*” (其实这里填什么都无所谓,只要文件有“svn:needs-lock”附加属性就行), 之后点Set按钮,“svn:needs-lock”附加属性就设置好了。 然后执行Commit命令提交修改。 这时当其他人执行Update时, a.jpg就会添加到他们的Working Copy中, 并且文件的附加属性也会随文件一起被得到。 可以看到a.jpg此时的图标就是灰色的, 文件的Windows属性也是只读的。 12.回到以前的版本 由于Subversion会记录你对Repository的每一次修改, 因此能够很容易的获得Repository以前某一时刻的状态。 比如:现在Repository的最新Revision是56, 这时我想看看Repository在Revision24时的状态, 可以在本地的Working Copy中单击右键, TortoiseSVN-》Update to Revision..., 然后输入你想要回复到的Revision号,点OK按钮。 回到以前的版本还有一种情况是我想将Repository的 最新Revision的状态与以前某一个Revision的状态一模一样, 上面那种方法就不适合, 上面的那种方法只是将本地的Working Copy回复到以前的状态, 而服务器端的Repository并没有回到以前的状态。 将Repository的最新Revison的状态回复到以前某个Revision的状态具体的方法是: 先执行Update命令将Working Copy更新到最新的Revision, 然后在Working Copy中单击右键, TortoiseSVN-》Show Log, 弹出的Log Messages窗口中会显示该Repository的所有Revision, 选中最新的Revision,之后按住Shift键, 再单击你想回复到的Revision+1的那个Revision (比如Repository的最新Revision是30, 你想将Repository的状态回复到Revision16, 那么就选中Revision30,再按住Shift键, 选中Revision17, 就是说选中Revision17到Revision30之间的所有Revision)。 然后在选中的Revision上单击右键, 选中“Revert changes from these revision”。 再点Yes按钮,就可以将Working Copy的状态回复到目标Revision。 注意,此时只是Working Copy回复到目标Revision, 之后应该用Commit提交修改, 这样Repository最新状态就与目标Revision的状态一样了。 这两种回复到以前版本的方式截然不同, 第一种方式是将整个Working Copy回复到某个Revision, 也就是说这种方式Working Copy中的“.svn”目录所存的文件副本也与目标Revision的一模一样, 如果这时你没有修改文件,你将不能执行Commit命令。 而第二种方式客户端Working Copy中的 “.svn”目录所存的副本始终是最新的Revision的文件副本 (这里我们基于一个假设:在Update之后没有其他人对Repository做修改)。 这种方式就像是我们自己手工将Working Copy的文件状态修改为目标Revision, 在修改之后提交修改一样。 13.查看修改 有时我们对Working Copy的许多文件进行了修改, 这些文件位于不同的子目录,我们就可以在Working Copy的最上层目录单击右键, TortoiseSVN-》Check For Modifications, 弹出的对话框就会显示你所做的所有修改明细。 还有一种情况是我们的Working Copy已经很久没有执行Update命令, 我们想看看Working Copy中有哪些文件已经发生修改了, 这时就可以在Working Copy的最上层目录单击右键, TortoiseSVN-》Check For Modifications, 在弹出的对话框点击Check Repository按钮后, 就会显示服务器端已经修改了的文件。 该方法还有一个用途就是查看文件的锁定, 当你想锁定一个文件时,你想先看看这个文件有没有被别人锁定, 点击Check Repository按钮会显示服务器端Repository所有被锁定的文件, 如果你想锁定的文件不在这里面,那就说明该文件目前没有人锁定。


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: writer(writer是什么意思)

下一篇: scatter(scatter和disperse的用法有什么区别)



推荐阅读

网站内容来自网络,如有侵权请联系我们,立即删除! | 软文发布 | 粤ICP备2021106084号