SVN全称Subversion,是一个开放源代码的版本控制系统,Subversion 在 2000 年由 CollabNet Inc 开发,如今发展成为 Apache 软件基金会的一个项目,一样是一个丰富的开发者和用户社区的一部分。html
SVN是一个开放源代码的版本控制系统,管理着随时间改变的数据。这些数据放置在一个中央资料档案库(repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变更。 这样你就能够把档案恢复到旧的版本, 或是浏览文件的变更历史。说得简单一点SVN就是用于多我的共同开发同一个项目,共用资源的目的。程序员
Subversion 实现了一个 “虚拟” 的版本控管文件系统, 可以依时间跟踪整个目录的变更。 目录和文件都能进行版本控制。安全
Subversion中,能够增长(add)、删除(delete)、复制(copy)和重命名(rename),不管是文件仍是目录。全部的新加的文件都从一个新的、干净的版本开始。服务器
一个提交动做,不是所有更新到了档案库中,就是彻底不更新。这容许开发人员以逻辑区间创建并提交变更,以防止当部分提交成功时出现的问题。svn
…this
开始新一天的工做.net
一、从服务器下载项目组最新代码。(Checkout)
二、若是已经Checkout而且有人已Commit了代码,你能够更新以得到最新代码。(Update)开放源代码
三、进入本身的分支,进行工做,每隔一个小时向服务器本身的分支提交一次代码(不少人都有这个习惯。由于有时候本身对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时本身修改了哪些代码,就须要这样作了)。(Commit)版本控制
四、下班时间快到了,把本身的分支合并到服务器主分支上,一天的工做完成,并反映给服务器。(Commit)code
注意:若是两个程序员同时修改了同一个文件, _SVN能够合并这两个程序员的改动,实际上SVN管理源代码是以行为单位的,就是说两个程序员只要不是修改了同一行程序,SVN都会自动合并两种修改。若是是同一行,SVN会提示文件Confict, 冲突,须要手动确认。_
版本库至关于一个集中的空间,用于存放开发者全部的工做成果。版本库不只能存放文件,还包括了每次修改的历史,即每一个文件的变更历史。
Create 操做是用来建立一个新的版本库。大多数状况下这个操做只会执行一次。当你建立一个新的版本库的时候,你的版本控制系统会让你提供一些信息来标识版本库,例如建立的位置和版本库的名字。
Checkout 操做是用来从版本库建立一个工做副本。工做副本是开发者私人的工做空间,能够进行内容的修改,而后提交到版本库中。
顾名思义,update 操做是用来更新版本库的。这个操做将工做副本与版本库进行同步。因为版本库是由整个团队共用的,当其余人提交了他们的改动以后,你的工做副本就会过时。
让咱们假设 Tom 和 Jerry 是一个项目的两个开发者。他们同时从版本库中检出了最新的版本并开始工做。此时,工做副本是与版本库彻底同步的。而后,Jerry 很高效的完成了他的工做并提交了更改到版本库中。
此时 Tom 的工做副本就过时了。更新操做将会从版本库中拉取 Jerry 的最新改动并将 Tom 的工做副本进行更新。
当检出以后,你就能够作不少操做来执行变动。编辑是最经常使用的操做。你能够编辑已存在的文件来,例如进行文件的添加/删除操做。
你能够添加文件/目录。可是这些添加的文件目录不会马上成为版本库的一部分,而是被添加进待变动列表中,直到执行了 commit 操做后才会成为版本库的一部分。
一样地你能够删除文件/目录。删除操做马上将文件从工做副本中删除掉,但该文件的实际删除只是被添加到了待变动列表中,直到执行了 commit 操做后才会真正删除。
Rename 操做能够更改文件/目录的名字。"移动"操做用来将文件/目录从一处移动到版本库中的另外一处。
当你检出工做副本或者更新工做副本后,你的工做副本就跟版本库彻底同步了。可是当你对工做副本进行一些修改以后,你的工做副本会比版本库要新。在 commit 操做以前复查下你的修改是一个很好的习惯。
Status 操做列出了工做副本中所进行的变更。正如咱们以前提到的,你对工做副本的任何改动都会成为待变动列表的一部分。Status 操做就是用来查看这个待变动列表。
Status 操做只是提供了一个变更列表,但并不提供变更的详细信息。你能够用 diff 操做来查看这些变更的详细信息。
咱们来假设你对工做副本作了许多修改,可是如今你不想要这些修改了,这时候 revert 操做将会帮助你。
Revert 操做重置了对工做副本的修改。它能够重置一个或多个文件/目录。固然它也能够重置整个工做副本。在这种状况下,revert 操做将会销毁待变动列表并将工做副本恢复到原始状态。
合并的时候可能会发生冲突。Merge 操做会自动处理能够安全合并的东西。其它的会被当作冲突。例如,“hello.c” 文件在一个分支上被修改,在另外一个分支上被删除了。这种状况就须要人为处理。Resolve 操做就是用来帮助用户找出冲突并告诉版本库如何处理这些冲突。
Commit 操做是用来将更改从工做副本到版本库。这个操做会修改版本库的内容,其它开发者能够经过更新他们的工做副原本查看这些修改。
在提交以前,你必须将文件/目录添加到待变动列表中。列表中记录了将会被提交的改动。当提交的时候,咱们一般会提供一个注释来讲明为何会进行这些改动。这个注释也会成为版本库历史记录的一部分。Commit 是一个原子操做,也就是说要么彻底提交成功,要么失败回滚。用户不会看到成功提交一半的状况。
https://www.visualsvn.com/downloads/ (服务器)
http://tortoisesvn.net/downloads.html (客户端)
最后下载完成的安装包
说明:服务器端须要提供IP、端口、账号、密码供客户端使用。即有以下配置
设置Server name ,建议使用当前IP
Server name的值能够设置为: 1.127.0.0.1 (只能本地本身访问) 2.电脑用户名(只能本地本身访问) 3.当前IP(可以拼通IP的用户都可访问) Server Port使用默认值便可 查看当前IP: 打开dos窗口(Windows+R键),输入ipconfig,按回车
假设A、B两个用户都在版本号为100的时候,更新了kingtuns.txt这个文件,A用户在修改完成以后提交kingtuns.txt到服务器,这个时候提交成功,这个时候kingtuns.txt文件的版本号已经变成101了。同时B用户在版本号为100的kingtuns.txt文件上做修改,修改完成以后提交到服务器时,因为不是在当前最新的101版本上做的修改,因此致使提交失败。此时用户B去更新文件,若是B用户和A用户修改了文件的同一行代码,就会出现冲突
冲突发生时,subversion会在当前工做目录中保存全部的目标文件版本[上次更新版本、当前获取的版本(即别人提交的版本)、本身更新的版本、目标文件]。
假设文件名是kingtuns.txt
对应的文件名分别是:
kingtuns.txt.r101
kingtuns.txt.r102
kingtuns.txt.mine
kingtuns.txt
同时在目标文件中标记来自不一样用户的更改。
用户A
用户B
打开编辑冲突的窗口
Theirs窗口为服务器上当前最新版本 Mine窗口为本地修改后的版本 Merged窗口为合并后的文件内容显示
同理若是要使用本地版本,在协商后,在Mine窗口右键,选择Use this text block(使用这段文本块)。
注:也可先不标记为解决,直接保存文件后,在B用户的冲突目录下,选中文件—右键菜单—TortoiseSVN—Resolved(解决)。而后再提交文件。
配置svn
找不到svn.exe文件,TortoiseSVN的bin目录下面没有svn.exe 之因此没有是由于安装TortoiseSVN的时候没有勾选指定安装项,添加command line client tools
注:项目提交前,最好先更新,而后再提交。