├── 01_what_svn.md ├── 02_history.md ├── 03_why_use.md ├── 04_compared_VSS.md ├── 05_working_mode.md ├── 06_support.md ├── 07_operation_mode.md ├── 08_data_storage.md ├── 09_work_flow.md ├── 10_safe.md ├── 11_system_structure.md ├── 12_assembly.md ├── 13_windows_server.md ├── 14_svn_server.md ├── 15_http_server.md ├── 16_password.md ├── 17_management.md ├── 18_server_monitor.md ├── 19_package.md ├── 20_linux_server.md ├── 21_linux_http.md ├── 22_linux_email.md ├── 23_linux_other.md ├── 24_linux_backup.md ├── 25_mac_server.md ├── 26_windows_install.md ├── 27_vsvn_install.md ├── 28_tsvn_install.md ├── 29_asvn_install.md ├── 30_pull_out.md ├── 31_new_warehouse.md ├── 32_add_users.md ├── 33_add_group.md ├── 34_add_file.md ├── 35_update.md ├── 36_delete.md ├── 37_edit.md ├── 38_compare.md ├── 39_undo.md ├── 40_lock.md ├── 41_rename.md ├── 42_synchronous.md ├── 43_check.md ├── 44_resolve_conflict.md ├── 45_ignore.md ├── 46_remove.md ├── 47_blame.md ├── 48_switch.md ├── 49_Relocate.md ├── 50_browse_repository.md ├── 51_build_tag.md ├── 52_branch.md ├── 53_clear.md ├── 54_install.md ├── 55_checkout.md ├── 56_basics.md ├── 57_install.md ├── 58_import.md ├── 59_ignore_file.md ├── 60_attention.md ├── README.md ├── TOC.md └── images ├── Subversion--200.jpg ├── Subversion.jpg ├── add.png ├── as1.png ├── as2.png ├── as3.png ├── as4.png ├── as5.png ├── asvn1.png ├── asvn2.png ├── blame.png ├── browser.png ├── checkout.png ├── commit.png ├── document.png ├── erorr.png ├── erorr2.png ├── export.png ├── get.png ├── green.png ├── group1.png ├── group2.png ├── group3.png ├── group4.png ├── import.png ├── look.png ├── mac_svn1.png ├── mac_svn2.png ├── mac_svn3.png ├── path.png ├── readme.png ├── readme2.png ├── readme3.png ├── repositories1.png ├── repositories2.png ├── repositories3.png ├── revert.png ├── setting.png ├── setting2.png ├── setting3.png ├── setting4.png ├── synchronous.png ├── test.png ├── three.png ├── three2.png ├── tools.png ├── tools1.png ├── tools2.png ├── tools3.png ├── tsvn1.png ├── tsvn2.png ├── tsvn3.png ├── tsvn4.png ├── update.png ├── users1.png ├── vsvn1.png ├── vsvn2.png ├── vsvn3.png ├── vsvn4.png ├── vsvn5.png ├── vsvn6.png └── work_flow.png /01_what_svn.md: -------------------------------------------------------------------------------- 1 | # svn是什么 2 | 3 | Subversion是一个自由,开源的版本控制系统。 4 | 5 | 在Subversion管理下,文件和目录可以超越时空。 6 | 7 | Subversion将文件存放在中心版本库里。这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况。 8 | 9 | 这样就可以籍此将数据恢复到以前的版本,并可以查看数据的更改细节。 10 | 11 | 正因为如此,许多人将版本控制系统当作一种神奇的“时间机器”。 12 | -------------------------------------------------------------------------------- /02_history.md: -------------------------------------------------------------------------------- 1 | # 发展历史 2 | 3 | 早在2000年,CollabNet,Inc就开始寻找CVS替代产品的开发人员。 4 | 5 | CollabNet提供了一个名为CollabNet企业版(CEE)的协作软件套件。 6 | 7 | 这个软件套件的一个组成部分就是版本控制系统。尽管CEE在最初采用了CVS作为其版本控制系统,但是CVS的局限性从一开始就很明显,CollabNet知道,迟早要找到一个更好的替代品。 8 | 9 | 遗憾的是,CVS已经成为开源世界事实上的标准,很大程度上是因为没有更好的替代品,至少是没有可以自由使用的替代品。 10 | 11 | 所以CollabNet决定从头编写一个新的版本控制系统,这个系统保留CVS的基本思想,但是要修正其中错误和不合理的特性。 12 | 13 | 2000年2月,他们联系到OpenSource Development with CVS(Coriolis,1999)的作者Karl Fogel,并且询问他是否希望为这个新项目工作。 14 | 15 | 巧合的是,当时Karl正在与朋友Jim Blandy讨论设计一个新的版本控制系统。 16 | 17 | 1995年时,他们两人曾经开办了一个提供CVS支持的公司CyclicSoftware,尽管他们最终卖掉了公司,但还是天天使用CVS进行日常工作。 18 | 19 | 使用CVS时的挫折促使Jim认真的思考如何管理版本化的数据,并且他当时不仅使用了“Subversion”这个名字,并且已经完成了Subversion版本库的最初设计。 20 | 21 | 所以当CollabNet提出邀请的时候,Karl马上同意为这个项目工作,同时Jim也找到了他的雇主—RedHat软件公司—允许他到这个项目工作,并且没有限定最终的期限。 22 | 23 | CollabNet雇佣了Karl和BenCollinsSussman,详细设计工作从三月开始,在Behlendorf、CollabNet、JasonRobbins和GregStein(当时是一个独立开发者,活跃在WebDAV/DeltaV系统规范制订工作中)恰到好处的激励下,Subversion很快吸引了许多活跃的开发者,结果是许多对CVS有过失望经历的人很乐于为这个项目做些事情。 24 | 25 | 最初的设计小组设定了简单的开发目标。他们不想在版本控制方法学中开垦处女地,他们只是希望修正CVS。 26 | 27 | 他们决定Subversion应符合CVS的特性,并保留相同的开发模型,但不再重复CVS的一些显著缺陷。 28 | 29 | 尽管Subversion并不需要成为CVS的完全替代品,但它应该与CVS保持足够的相似性,以使CVS用户可以轻松的转移到Subversion上。 30 | 31 | 经过14个月的编码,2001年8月31日,Subversion能够“自己管理自己”了,开发者停止使用CVS保存Subversion的代码,而使用Subversion本身。 32 | 33 | 虽然CollabNet启动了这个项目,并且一直提供了大量的工作支持(它为一些全职的Subversion开发者提供薪水),但Subversion像其它许多开源项目一样,被松散的、透明的规则管理着,这样的规则激励着知识界的精英们。 34 | 35 | CollabNet的版权许可证完全符合Debian的自由软件方针。 36 | 37 | 也就是说,任何人都可以根据自己的意愿自由的下载、修改和重新发布Subversion,不需要CollabNet或其他人的授权。 -------------------------------------------------------------------------------- /03_why_use.md: -------------------------------------------------------------------------------- 1 | # 为什么使用svn 2 | 3 | 1. vss仅可在局域网内部使用,服务器仅作为一个文件服务器,不需要运行任何程序或者起 后台服务, 但必须要共享一个可写的文件夹。 4 | 这成为了目前局域网上最容易被病毒入侵的地方,必须定期做好病毒检查工作,安装病毒放火墙。安全性比较差。 5 | 6 | 2. TortoiseSVN是 Subversion在操作系统上的图形客户端程序,开源、免费 支持网络上进行跨平台离线修改。 -------------------------------------------------------------------------------- /04_compared_VSS.md: -------------------------------------------------------------------------------- 1 | # SVN与VSS比较 2 | 3 | * **支持重命名**(这对 Java 开发来说非常重要) 4 | 5 | 为了得到更好的代码,开发中需要经常进行重构,重构就经常涉及到文件的重构名,而重命名 VSS中是不被支持的。 6 | 7 | * **开发的时候不一定要锁定** 8 | 9 | 一方面导致重构不方便,另一方面,不能离线开发,使用 SVN就不同,可以带回家继续开发,回来后,提交就行了。 10 | 11 | * **多平台** 12 | 13 | 可以支持多个平台下的操作 14 | 15 | * **更好的客户端支持** 16 | 17 | Eclipse 中的 VSS Plugin 不如它的 SVN Plugin 好用。一个在 Windows 下用的 SVN客户端TortoiseSVN 也比VSS 的客户端好用(VSS 只有微软提供的一个 GUI 客户端)。 18 | 19 | * **更好地与外围工具集成** 20 | 21 | 各种各样的外围工具(主要是服务器端),满足多种需要。如果有需要,也可以自己写插件或管理脚本,开放的架构,允许我们这样做。 22 | 23 | * **方便** 24 | 25 | 一个例子:部署应用的时候,以前的做法是找出一个项目中修改过的文件,更新到服务器上去,可以在服务器上执行 svn export 命令,把代码库中的最新版本导出,完成部署(也可以替换回老版本)。 26 | 27 | * **速度与稳定性看起来都不错** 28 | 29 | 学习它的管理、它的工作方式,是值得的。而 VSS是一个已经被逐渐抛弃的软件。如果时间不是多得没处用,那么就把时间花在最值得花的东西上面。 -------------------------------------------------------------------------------- /05_working_mode.md: -------------------------------------------------------------------------------- 1 | # svn的工作模式(协同合作的两种模式) 2 | 3 | - **copy-edit-merge svn默认工作模式** 4 | 5 | 适用于纯文本文件的协同工作,TortoiseSVN自动合并 不同成员对同一文件的修改,如果修改有冲突,需要 人工取舍。 此模式适合软件开发这种工作。 6 | 7 | - **Lock-Modify-Unlock (锁模式)** 8 | 9 | 适用于纯文本文件及二进制文件的协同工作。比如 dwg,mcd,doc,ppt,xls等文件格式。 这种模式适合工程设计人员的合作。 -------------------------------------------------------------------------------- /06_support.md: -------------------------------------------------------------------------------- 1 | # Subversion支持 2 | 3 | - **版本化的目录** 4 | 5 | - **真实的版本历史** 6 | 7 | - **原子提交** 8 | 9 | - **可选的网络层** 10 | 11 | - **一致的数据操作** 12 | 13 | - **高效的分支和标签操作** 14 | 15 | - **可修改性** -------------------------------------------------------------------------------- /07_operation_mode.md: -------------------------------------------------------------------------------- 1 | # 运行方式 2 | 3 | svn服务器有2种运行方式:**独立服务器**和**借助apache运行**。两种方式各有利弊,用户可以自行选择。 -------------------------------------------------------------------------------- /08_data_storage.md: -------------------------------------------------------------------------------- 1 | # 数据存储 2 | 3 | svn存储版本数据有2种方式:BDB和FSFS 4 | 5 | - **BDB:**一种事务安全型表类型 6 | 7 | - **FSFS:**一种不需要数据库的存储系统 8 | 9 | 因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。 -------------------------------------------------------------------------------- /09_work_flow.md: -------------------------------------------------------------------------------- 1 | # 工作流程 2 | 3 | **集中式管理的工作流程** 4 | 5 | 集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。 6 | 7 | 所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上可以说是无法工作的。下面举例说明: 8 | 9 | 开始新一天的工作: 10 | 11 | 1. 从服务器下载项目组最新代码; 12 | 13 | 2. 进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码; 14 | > 很多人都有这个习惯,因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了 15 | 16 | 3. 下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。 17 | 18 | 这就是经典的svn工作流程,从流程上看,有不少缺点,但也有优点。 19 | 20 | ![Image of work_flow] 21 | (images/work_flow.png) -------------------------------------------------------------------------------- /10_safe.md: -------------------------------------------------------------------------------- 1 | # 安全性 2 | 3 | 1. SVN站在更高层次上对安全产品,从系统和控制的角度进行了"有机"和"无隙"的整合。 4 | 5 | 2. SVN是一个安全虚拟网络系统,它将系统整体的信息安全功能均衡合理地分布在不同的子系统中,使各子系统的功能得到最大限度的发挥,子系统之间互相补充,系统整体性能大于各子系统功能之和,用均衡互补的原则解决了"木桶原理"的问题。 6 | 7 | 3. SVN能在跨接Internet,Intranet,Extranet间的网络所有端点实现全面的安全,而且还能提供基于企业策略的信息管理机制以充分有效地利用有限的带宽。 8 | 9 | 4. SVN可以满足各种企业VPN的要求,通过为公司内部网络、远程和移动用户、分支机构和合作伙伴提供基于Internet的安全连接。 10 | 11 | 所以,我们可以将SVN看成是VPN、防火墙、基于企业策略的信息管理软件集成在一起的Internet安全的综合解决方案。 12 | 13 | 在这样一个网络系统中,所有互联网服务器端和客户端都是安全的,并有一个信息管理机制以不断地通过这个外部网络环境动态地分析及满足客户的特定带宽需求。 14 | 15 | **SVN提供了基于网络实现的eBusiness 应用的安全服务** 16 | 17 | 它包含: 18 | 19 | - 对多种应用进行全面的安全认证; 20 | 21 | - 支持多种认证及PKI; 22 | 23 | - 功能强大并对用户透明的通讯加密; 24 | 25 | - 面向用户的集中安全策略管理; 26 | 27 | - 统一跨接Internet、Intranet、Extranet的通讯。 -------------------------------------------------------------------------------- /11_system_structure.md: -------------------------------------------------------------------------------- 1 | # 体系结构 2 | 3 | - **带有防火墙的VPN网关** 4 | 它是一个将防火墙和VPN技术紧密结合的网关产品; 5 | 6 | - **SVN安全远程客户端软件包** 7 | 一个功能强大的VPN客户端软件,支持台式机用户、远程用户和移动用户,具有集中化管理的个人防火墙功能和VPN用户的安全认证功能; 8 | 9 | - **SVN证书管理模块** 10 | 一个用于SVN的完整PKI解决方案,它将完善的CA和LDAP目录服务器技术集成在一起; 11 | 12 | - **SVN硬件加密卡** 13 | 可以通过硬件技术实现功能强大的各种算法以提高VPN的速度和性能; 14 | 15 | - **SVN智能带宽管理模块** 16 | 一个基于企业策略的带宽管理解决方案,可以智能地管理有限的带宽资源,以确保用于企业重要应用的VPN性能可靠; 17 | 18 | - **SVN冗余管理模块** 19 | 通过冗余网关集群和防火墙VPN内的SVN冗余模块,对执行重要任务的VPN和防火墙应用在出现故障时实现无缝切换; 20 | 21 | - **自动地址转换模块** 22 | 一个自动管理IP地址和命名的解决方案,通过提供IP地址服务的跟踪和集中化管理,确保可靠地控制地址分配和提高TCP/IP管理效率; 23 | 24 | - **SVN安全服务器软件包** 25 | 专门保护单个应用服务器安全的VPN网关软件,它可以保护进行敏感操作的服务器免受攻击和未授权的访问,使客户端建立与服务器间的安全认证和支持交换加密数据的连接; 26 | 27 | - **SVN安全客户端软件包** 28 | 它将基于状态检测的防火墙和基于IPSec的VPN客户端软件集成在客户端机器上,通过提供集中管理的个人防火墙和对所有企业VPN用户的安全认证,增强客户端机器的安全性。 29 | 它与SVN安全远程客户端软件功能相比,增强了客户端的安全功能,如访问控制和安全初始化控制等。 -------------------------------------------------------------------------------- /12_assembly.md: -------------------------------------------------------------------------------- 1 | # 组件 2 | 3 | - **svn** 4 | 命令行客户端程序。 5 | 6 | - **svnversion** 7 | 此工具用来显示工作拷贝的状态(用术语来说,就是当前项目的修订版本)。 8 | 9 | - **svnlook** 10 | 直接查看Subversion版本库的工具。 11 | 12 | - **svnadmin** 13 | 建立、调整和修复Subversion版本库的工具。 14 | 15 | - **svndumpfilter** 16 | 过滤Subversion版本库转储数据流的工具。 17 | 18 | - **mod_dav_svn** 19 | ApacheHTTP服务器的一个插件,使版本库可以通过网络访问。 20 | 21 | - **svnserve** 22 | 一个单独运行的服务器程序,可以作为守护进程或由SSH调用。这是另一种使版本库可以通过网络访问的方式。 23 | 24 | - **svnsync** 25 | 一个通过网络增量镜像版本库的程序. -------------------------------------------------------------------------------- /13_windows_server.md: -------------------------------------------------------------------------------- 1 | # Windows SVN服务器的建立 2 | 3 | 两种方案: 4 | 5 | **1. VisualSVN Server** 6 | 7 | 安装更简单、更直观; 8 | 9 | 下载链接:[VisualSVN Server](http://www.visualsvn.com/server/download/) 10 | 11 | 12 | **2. 传统的Subversion 服务器程序** 13 | 14 | - 安装环境:Window XP professional 15 | 16 | - 软件:[服务端软件](http://subversion.tigris.org/) 17 | 18 | > 下载下来的服务器端是个 zip 压缩包,直接解压缩即可,比如我解压到 D:\subversion。 19 | 20 | **Subversion有三种运行方式:** 21 | 22 | Apache Http Server, 23 | Subversion Standalone Server, 24 | local方式。 25 | 26 | 下面分别介绍svn、http两种方式的安装方法。 -------------------------------------------------------------------------------- /14_svn_server.md: -------------------------------------------------------------------------------- 1 | # 基于svn协议的服务端 2 | 3 | 4 | **1.** 安装Subversion后,使用命令 svnadmin create "D:\MySVN" 创建svn资源库,资源库地址为D:\MySVN 5 | 6 | **2.** 打开 D:\MySVN\conf\svnserve.conf,去掉以下内容之前的注释符 7 | 8 | ``` 9 | [general] 10 | anon-access = none 11 | auth-access = write 12 | password-db = passwd 13 | realm = My First Repository 14 | ``` 15 | 16 | > 说明: 17 | anon-access = none 不允许匿名访问! 18 | auth-access = write 允许提交修改 19 | password-db = passwd 密码文件名字 20 | 21 | 如果 22 | 23 | ``` 24 | [general] 25 | anon-access = read → anon-access = none 26 | ``` 27 | 28 | **3.** 用记事本打开D:\MySVN\conf\passwd,添加用户名(user)和密码(passwd) 29 | 30 | ``` 31 | [users] 32 | user=password 33 | ``` 34 | 35 | 可以添加多个这样的用户名密码对。 36 | 37 | **4.** 创建svn服务,并启动,这样svn就会开机自动启动 38 | 39 | 在控制台下,输入如下命令: 40 | 41 | ``` 42 | sc create svnservice binpath= "\"D:\program 43 | files\Subversion\bin\svnserve.exe\" --service –r D:\MySVN” displayname= SVNService" depend= Tcpip 44 | ``` 45 | 46 | > 注意: 47 | 48 | a. 如果路径中包括空格,一定要用“\”处理“"”号, 49 | 例如svnserve.exe在c:\program files\subversion\中,则命令应该写为: 50 | binpath= \"c:\program files\subversion\bin\svnserve.exe\" 51 | 52 | b. sc对选项的格式还有要求,所有的“=”前不能有空格,而后面必须有空格。 53 | 例如depend= Tcpip不能写为depend = Tcpip或depend=Tcpip 54 | 55 | **5.** 经过上述四步的操作,就可以使用svn://localhost访问SVN服务器。 -------------------------------------------------------------------------------- /15_http_server.md: -------------------------------------------------------------------------------- 1 | # 基于http协议的服务端 2 | 3 | 基于Apache Http Server的Subversion,有以下好处: 4 | 5 | - 能使用WebDAV协议 6 | 7 | - 能使用浏览器作为客户端工具浏览源码仓库。 8 | 9 | - 可以很容易的支持SSPI(Windows域认证)和LDAP,这些都是Apache本身就支持的。 10 | 11 | - 能得到比较完善的Apache安全认证系统,比如SSL加密连接。 12 | 13 | > 目前SVN1.4.6(当前最新版)暂不支持Apache2.2以上版本,请使用Apache2.0版本进行配置。 14 | 15 | 如果先安装Apache2.0,然后在安装Subversion1.4.6,则Subversion的安装会提示是否配置Apache服务器,选择允许配置。 16 | 17 | 则以下Apache的配置步骤可以省略。 18 | 19 | **1.** 安装Apache服务器 20 | 21 | **2.** 检查Apache的modules目录是否包含`mod_dav_svn.so`以及 `mod_authz_svn.so`,如果没有,从Subversion的bin目录中拷贝这两个文件到modules目录。 22 | > 如果先安装Apache,然后安装Subversion,则会自动拷贝这两个模块。 23 | 24 | **3.** 在Apache的httpd.conf配置文件中LoadModule位置的最后添加如下两行: 25 | 26 | ``` 27 | LoadModule dav_svn_module modules/mod_dav_svn.so 28 | LoadModule authz_svn_module modules/mod_authz_svn.so 29 | ``` 30 | 31 | 并且去掉`LoadModule dav_module modules/mod_dav.so`之前的#号 32 | 33 | 34 | **4.** 如果不执行第2步的拷贝,那么在第3步新添加的两个LoadModule中使用绝对路径; 35 | 36 | **5.** 在httpd.conf配置文件的最后添加以下参数: 37 | 38 | ``` 39 | 40 | DAV svn SVN 41 | Path D:\MySVN 42 | AuthType Basic 43 | AuthName "Subversion repositories" 44 | AuthUserFile D:\MySVN\conf\passwd 45 | AuthzSVNAccessFile D:\MySVN\conf\authz 46 | Require valid-user 47 | 48 | ``` 49 | 50 | 其中: 51 | 52 | - `` 中的svn为浏览器中需要输入的访问地址 53 | 54 | - `SVNPath D:\MySVN` 指定svn仓库的物理位置 55 | 56 | - `AuthUserFile D:\MySVN\conf\passwd` 指定svn仓库的密码文件 57 | 58 | - `AuthzSVNAccessFile D:\MySVN\conf\authz` 指定svn仓库的权限设置文件 59 | 60 | **6.** 重启Apache服务器,然后就可以使用http://localhost:8080/svn访问svn仓库。其中8080是Apace服务器设置的端口. -------------------------------------------------------------------------------- /16_password.md: -------------------------------------------------------------------------------- 1 | # SVN密码管理 2 | 3 | SVN使用svn协议以及http协议的密码处理是有所不同的,svn使用明文,http则可以可以使用md5加密,对应于conf/passwd文件,两者的形式也不同。 4 | 5 | - **基于svn协议的passwd文件** 6 | 7 | ``` 8 | [users] 9 | Larry = larry 10 | ``` 11 | 12 | 在conf/passwd文件中增加用户名和密码对就可以。 13 | 14 | - **基于http协议的passwd文件**(缺少[users]头,用户名和密码的分隔为分号): 15 | 16 | ``` 17 | larry1:$apr1$9i......$46q2xMws37UiwyL1w8MkN 18 | ``` 19 | 20 | * 可以通过手动编辑的方式增加用户名和密码(可以是明文) 21 | 22 | * 使用Apache的htpasswd工具创建用户 23 | 24 | 创建第一个用户 `htpasswd -cm d:\Mysvn\conf\passwd user1` 25 | 26 | 回车后会要求输入密码 27 | 28 | 创建第二个用户 `htpasswd -m d:\Mysvn\conf\passwd user1` -------------------------------------------------------------------------------- /17_management.md: -------------------------------------------------------------------------------- 1 | # SVN权限管理 2 | 3 | 实例: 4 | 5 | XXX公司是一家电子元器件设备供应商,其中有个ARM部门,专门负责ARM芯片的方案设计、销售,并在北京、上海各设立了一个办事处。 6 | 7 | 对于工作日志,原先采用邮件方式发给经理,但是这种方式有个缺点,那就是不具备连续性,要看以前的日志必须一封一封邮件去查看,很麻烦。 8 | 9 | 于是就想到利用Subversion, 让员工在自己电脑上编辑日志,然后利用svn传送回来,既方便员工自己编写日志,又方便对日志的归档处理, 10 | 11 | 而且提交日志的时候只需要执行一下 svn commit 即可,比发送邮件还要简单的多。 12 | 13 | 部门文档的目录结构如下部门文档的目录结构如下: 14 | 15 | ``` 16 | test 17 | ├─diary 18 | │ ├─headquarters 19 | │ ├─beijing 20 | │ └─shanghai 21 | ├─ref 22 | └─temp 23 | ``` 24 | 25 | - **test:**部门名称 26 | 27 | - **diary:**工作日志目录 28 | 29 | - **headquarters:**总部工作日志目录 30 | 31 | - **beijing:**北京办日志目录 32 | 33 | - **hanghai:**上海办日志目录 34 | 35 | - **ref:**公司公共文件参考目录 36 | 37 | - **temp:**临时文件目录 38 | 39 | ## 人员情况 40 | 41 | - morson,公司总经理,不习惯使用电脑,更喜欢传统的纸与笔,以及面对面的交流 42 | 43 | - michael,arm事业部的部门经理,没事的时候喜欢弄点儿新技术,用svn来管理日志,就是他想出来的主意 44 | 45 | - scofield,北京办人员,老员工,为人油滑难管 46 | 47 | - lincon,上海办人员,老员工,大老实人一个 48 | 49 | - linda,总部协调员、秘书,文笔不错,长得也不错 50 | 51 | - rory,单片机技术员,技术支持 52 | 53 | ## 访问权限需求分析 54 | 55 | - 允许总经理、部门经理读取所有文件。顺便给他们开放写权限,以便体现对他们职位的尊重,虽然对于某些文件来说,他们若拥有“写”权限其实也没什么用处 56 | 57 | - 除部门经理外,所有其他人员,均只能看到本办事处人员工作日志 58 | 59 | - 不允许匿名访问 - ref目录只允许经理和秘书读写,对其他人只读 60 | 61 | - temp目录人人都可以随意读写 62 | 63 | **在服务器端d:\svndata\test\conf配置svnserve.con** 64 | 65 | ``` 66 | [general] 67 | password-db = passwd.conf 68 | anon-access = none 69 | auth-access = write 70 | authz-db = authz.conf 71 | ``` 72 | 73 | **在服务器端d:\svndata\test\conf配置passwd.conf进行用户创建** 74 | 75 | ``` 76 | [users] 77 | morson = ShowMeTheMoney 78 | michael = mysecretpassword 79 | scofield = hellolittilekiller 80 | lincon = asyouknows111 81 | rory = 8809117 82 | linda = IlikeWorldCup2006 83 | ``` 84 | 85 | **在服务器端d:\svndata\test\conf配置authz.conf进行用户创建** 86 | 87 | > 注意:在权限设置中在权限设置中,用户名必须顶格,不能留有空格不能留有空格! 88 | 89 | ``` 90 | [groups] 91 | g_vip = morson 92 | g_manager = michael 93 | g_beijing = scofield 94 | g_shanghai = lincon 95 | g_headquarters = rory, linda 96 | g_docs = linda 97 | 98 | [/] 99 | @g_manager = rw 100 | * = r 101 | 102 | [/diary/headquarters] 103 | @g_manager = rw 104 | @g_headquarters = rw 105 | @g_vip = r 106 | * = 107 | 108 | [/diary/beijing] 109 | @g_manager = rw 110 | @g_beijing = rw 111 | @g_vip = r 112 | * = 113 | 114 | [/diary/shanghai] 115 | @g_manager = rw 116 | @g_shanghai = rw 117 | @g_vip = r 118 | * = 119 | 120 | [/ref] 121 | @g_manager = rw 122 | @g_docs = rw 123 | * = r 124 | 125 | [/temp] 126 | * = rw 127 | ``` 128 | 129 | 这样SVN的配置权限设置完毕。 130 | -------------------------------------------------------------------------------- /18_server_monitor.md: -------------------------------------------------------------------------------- 1 | # 服务器端监视 2 | 3 | Subversion是通过Hooks 来控制每次Transaction的行为,有Pre-Commit, Post-Commit 等。 4 | 5 | 一般情况下我们希望在提交代码后,Subversion可以自动发送邮件给组里的每个成员, 这种情况下可以通过post-commit这个脚本来完成。 6 | 7 | 该脚本存放在资源库(Repository)的Hooks目录下,以.tmpl后缀结尾,在Windows平台改成.bat,.cmd或.exe。 8 | 9 | - 当一个Transaction成功完成后,会调用post-commit.exe,并传递如下两个参数,根据这两个参数调用svnlook (Subversion提供的工具) 可以获取相应的信息。 10 | 11 | ``` 12 | set REPOS=%1set REPOS=%1 13 | set REV=%2set REV=%2 14 | ``` 15 | -------------------------------------------------------------------------------- /19_package.md: -------------------------------------------------------------------------------- 1 | # 安装必须的软件包 2 | 3 | - yum install subversion (SVN服务器) 4 | 5 | - mysql-server (用于codestriker) 6 | 7 | - httpd mod_dav_svn mod_perl (用于支持WEB方式管理SVN服务器) 8 | 9 | - sendmail (用于配置用户提交代码后发邮件提醒) 10 | 11 | - wget gcc-c++ make unzip perl* (必备软件包) 12 | 13 | - ntsysv vim-enhanced (可选) -------------------------------------------------------------------------------- /20_linux_server.md: -------------------------------------------------------------------------------- 1 | # 基本的SVN服务器配置 2 | 3 | **1. 新建一个目录用于存储SVN所有文件** 4 | 5 | ``` 6 | # mkdir /home/svn 7 | ``` 8 | 9 | **2. 新建一个版本仓库** 10 | 11 | ``` 12 | # svnadmin create /home/svn/project 13 | ``` 14 | 15 | **3. 初始化版本仓库中的目录** 16 | 17 | ``` 18 | # mkdir project project/server project/client project/test (建立临时目录) 19 | # svn import project/ file:///home/svn/project -m "初始化SVN目录" 20 | # rm -rf project (删除临时建立的目录) 21 | ``` 22 | 23 | **4. 添加用户** 24 | 25 | 要添加SVN用户非常简单,只需在/home/svn/project/conf/passwd文件添加一个形如“username=password"的条目就可以了。 26 | 为了测试,我添加了如下内容: 27 | 28 | ``` 29 | [users] 30 | # harry = harryssecret 31 | # sally = sallyssecret 32 | pm = pm_pw 33 | server_group = server_pw 34 | client_group = client_pw 35 | test_group = test_pw 36 | ``` 37 | 38 | **5. 修改用户访问策略** 39 | 40 | /home/svn/project/conf/authz记录用户的访问策略,以下是参考: 41 | 42 | ``` 43 | [groups] 44 | project_p = pm 45 | project_s = server_group 46 | project_c = client_group 47 | project_t = test_group 48 | 49 | [project:/] 50 | @project_p = rw 51 | * = 52 | 53 | [project:/server] 54 | @project_p = rw 55 | @project_s = rw 56 | * = 57 | 58 | [project:/client] 59 | @project_p = rw 60 | @project_c = rw 61 | * = 62 | 63 | [project:/doc] 64 | @project_p = rw 65 | @project_s = rw 66 | @project_c = rw 67 | @project_t = rw 68 | * = 69 | ``` 70 | 71 | 以上信息表示,只有pm有根目录的读写权,server_group能访问server目录,client_group能访问client目录,所有人都可以访问doc目录. 72 | 73 | **6. 修改svnserve.conf文件,让用户和策略配置升效** 74 | 75 | svnserve.conf内容如下: 76 | 77 | ``` 78 | [general] 79 | anon-access = none 80 | auth-access = write 81 | password-db = /home/svn/project/conf/passwd 82 | authz-db = /home/svn/project/conf/authz 83 | ``` 84 | 85 | **7. 启动服务器** 86 | 87 | ``` 88 | # svnserve -d -r /home/svn 89 | ``` 90 | 91 | **8. 测试服务器** 92 | 93 | ``` 94 | # svn co svn://192.168.60.10/project 95 | Authentication realm: 92731041-2dae-4c23-97fd-9e1ed7f0d18d 96 | Password for 'root': 97 | Authentication realm: 92731041-2dae-4c23-97fd-9e1ed7f0d18d 98 | Username: server_group 99 | Password for 'server_group': 100 | svn: Authorization failed ( server_group没用根目录的访问权 ) 101 | ``` 102 | 103 | ``` 104 | # svn co svn://192.168.60.10/project 105 | Authentication realm: 92731041-2dae-4c23-97fd-9e1ed7f0d18d 106 | Password for 'root': 107 | Authentication realm: 92731041-2dae-4c23-97fd-9e1ed7f0d18d 108 | Username: pm 109 | Password for 'pm': 110 | A project/test 111 | A project/server 112 | A project/client 113 | Checked out revision 1. ( 测试提取成功 ) 114 | ``` 115 | 116 | ``` 117 | # cd project/server 118 | # vim main.c 119 | # svn add main.c 120 | # svn commit main.c -m "测试一下我的C程序,看什么看,不行啊??" 121 | Adding main.c 122 | Transmitting file data . 123 | Committed revision 2. ( 测试提交成功 ) 124 | ``` 125 | -------------------------------------------------------------------------------- /21_linux_http.md: -------------------------------------------------------------------------------- 1 | # 配置SVN服务器的HTTP支持 2 | 3 | ## 转换SVN服务器的密码 4 | 5 | 6 | 由于SVN服务器的密码是明文的,HTTP服务器不与支持,所以需要转换成HTTP支持的格式。用一个Perl脚本完成这个工作. 7 | 8 | 脚本内容如下: 9 | 10 | ``` 11 | # cd /home/svn/project/conf/ 12 | # cat PtoWP.pl 13 | #!/usr/bin/perl 14 | # write by huabo, 2009-11-20 15 | 16 | use warnings; 17 | use strict; 18 | 19 | #open the svn passwd file 20 | open (FILE, "passwd") or die ("Cannot open the passwd file!!!\n"); 21 | 22 | #clear the apache passwd file 23 | open (OUT_FILE, ">webpasswd") or die ("Cannot open the webpasswd file!!!\n"); 24 | close (OUT_FILE); 25 | 26 | #begin 27 | foreach () { 28 | if($_ =~ m/^[^#].*=/) { 29 | $_ =~ s/=//; 30 | `htpasswd -b webpasswd $_`; 31 | } 32 | } 33 | 34 | # ./PtoWP.pl ( 先给该脚本加可执行权限,然后执行以转换密码 ) 35 | Adding password for user pm 36 | Adding password for user server_group 37 | Adding password for user client_group 38 | Adding password for user test_group 39 | 现在目录下会多一个webpasswd文件。 40 | ``` 41 | 42 | ## 修改httpd.conf,添加关于SVN服务器的内容 43 | 44 | 45 | 编辑/etc/httpd/conf/httpd.conf,在最后添加如下信息: 46 | 47 | ``` 48 | 49 | DAV svn 50 | SVNPath /home/svn/project/ 51 | AuthType Basic 52 | AuthName "svn for project" 53 | AuthUserFile /home/svn/project/conf/webpasswd 54 | AuthzSVNAccessFile /home/svn/project/conf/authz 55 | Satisfy all 56 | Require valid-user 57 | 58 | ``` 59 | 60 | ## 启动HTTPD服务器 61 | 62 | 63 | ``` 64 | # service httpd restart 65 | Stopping httpd: [FAILED] 66 | Starting httpd: [ OK ] 67 | ``` 68 | 69 | -------------------------------------------------------------------------------- /22_linux_email.md: -------------------------------------------------------------------------------- 1 | # 配置邮件提醒支持 2 | 3 | ## 安装Perl模块Module::Build 4 | 5 | ``` 6 | # wget http://search.cpan.org/CPAN/authors/id/D/DA/DAGOLDEN/Module-Build-0.36_11.tar.gz 7 | # tar xvf Module-Build-0.36_11.tar.gz 8 | # cd Module-Build-0.36_11 9 | # perl Build.PL 10 | # ./Build 11 | # ./Build test 12 | # ./Build install 13 | # cd .. 14 | ``` 15 | 16 | ## 安装Perl模块Authen::SASL 17 | 18 | ``` 19 | # wget http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/Authen-SASL-2.15.tar.gz 20 | # tar xvf Authen-SASL-2.15.tar.gz 21 | # cd Authen-SASL-2.15 22 | # perl Makefile.PL 23 | # make test 24 | # make install# cd .. 25 | ``` 26 | 27 | ## 安装Perl模块Net::SMTP_auth 28 | 29 | ``` 30 | # wget http://search.cpan.org/CPAN/authors/id/A/AP/APLEINER/Net-SMTP_auth-0.08.tar.gz 31 | # tar xvf Net-SMTP_auth-0.08.tar.gz 32 | # cd Net-SMTP_auth-0.08 33 | # perl Makefile.PL 34 | # make test 35 | # make install 36 | # cd .. 37 | ``` 38 | 39 | ## 安装Perl模块SVN::Notify 40 | 41 | ``` 42 | # wget http://search.cpan.org/CPAN/authors/id/D/DW/DWHEELER/SVN-Notify-2.80.tar.gz 43 | # tar xvf SVN-Notify-2.80.tar.gz 44 | # cd SVN-Notify-2.80 45 | # perl Build.PL 46 | # ./Build 47 | # ./Build test 48 | # ./Build install 49 | # cd .. 50 | ``` 51 | 52 | ## 启动邮件服务器 53 | 54 | ``` 55 | # service sendmail restart 56 | Shutting down sendmail: [FAILED] 57 | Starting sendmail: [ OK ] 58 | Starting sm-client: [ OK ] 59 | ``` 60 | 61 | ## 配置自动发邮件脚本 62 | 63 | 修改post-commit脚本,以支持邮件通知功能: 64 | 65 | ``` 66 | # cd /home/svn/project/hooks/ 67 | # vim post-commit 68 | ``` 69 | 70 | 内容如下: 71 | 72 | ``` 73 | #!/bin/sh 74 | REPOS="$1" 75 | REV="$2" 76 | ``` 77 | 78 | ``` 79 | /usr/bin/svnnotify --repos-path "$1" --revision "$2" --to caodaijun@pica.com --from caodaijun@feinno.com --handler "HTML::ColorDiff" --with-diff --smtp localhost --smtp-user root --smtp-pass 5201314318 -c "UTF-8" -g zh_CN -o raw --svnlook /usr/bin/svnlook --subject-prefix '[SVN Update]' 80 | ``` 81 | 82 | - to参数代表接收邮件的地址,可以有多个; 83 | 84 | - from参数是虚拟的,代表你的发送地址,一般情况下,这个参数 不重要,但如果接收者的邮件服务器有反垃圾邮件的功能,需要判定源地址的话,这个参数是否合法就显得很重要了。 85 | 86 | 再给该脚本添加可执行权限: 87 | 88 | ``` 89 | # chmod +x post-commit 90 | ``` 91 | 92 | > 再次提交时,就会给指定邮件地址发信了。 -------------------------------------------------------------------------------- /23_linux_other.md: -------------------------------------------------------------------------------- 1 | # 其它常用配置 2 | 3 | ## 强制写log脚本 4 | 5 | 配置pre-commit文件,要求用户每次更新文件都必须写log: 6 | 7 | ``` 8 | # cd /home/svn/project/hooks/ 9 | # vim pre-commit 10 | ``` 11 | 12 | 文件内容如下: 13 | 14 | ``` 15 | #!/bin/sh 16 | REPOS="$1" 17 | TXN="$2" 18 | SVNLOOK=/usr/bin/svnlook 19 | LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c` 20 | if [ "$LOGMSG" -lt 5(要求的log长度,依实际需要修改) ]; 21 | then 22 | echo -e "\nEmpty log message not allowed. Commit aborted!" 1>&2 23 | exit 1 24 | fi 25 | ``` 26 | 27 | > 配置完成后,给本件加上可执行权限。再提交代码时,就必须按要求写注释 28 | 29 | ## 可修改log脚本 30 | 31 | 配置pre-revprop-change文件,此文件在show log中修改log时会运行,得到修改的权限,否则会报错: 32 | 33 | ``` 34 | DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent. At least one property change failed; repository is unchanged 35 | ``` 36 | 37 | ``` 38 | # cd /home/svn/project/hooks/ 39 | # vim pre-revprop-change 40 | ``` 41 | 42 | 文件内容如下: 43 | 44 | ``` 45 | REPOS="$1" 46 | REV="$2" 47 | USER="$3" 48 | PROPNAME="$4" 49 | if ["$PROPNAME" = "svn:log"];then exit 0;fi 50 | exit 1 51 | ``` 52 | 53 | > 配置完后加可执行权限升效。 -------------------------------------------------------------------------------- /24_linux_backup.md: -------------------------------------------------------------------------------- 1 | # 备份管理 2 | 3 | svn服务器的定期备份是很重要的,最简单的方式是定时备份仓库目录。 4 | 5 | **1. 新建备份目录** 6 | 7 | ``` 8 | # mkdir /opt/project_backup 9 | ``` 10 | 11 | **2. 编写备份脚本** 12 | 13 | ``` 14 | # cd /home/svn/ 15 | # vim project_backup.sh 16 | ``` 17 | 18 | 内容如下: 19 | 20 | ``` 21 | #!/bin/bash 22 | #write by huabo, 2009-11-20 23 | ``` 24 | 25 | ``` 26 | cd /home/svn 27 | now=`/bin/date +%Y%m%d` 28 | /bin/tar czvf "project_backup_$now.tar.gz" project/ && rm -rf /opt/project_backup/* && /bin/mv project_backup_*.tar.gz /opt/project_backup/ 29 | if [ $? == 0 ] 30 | then 31 | result="OK!!" 32 | else 33 | result="False!!" 34 | fi 35 | ``` 36 | 37 | ``` 38 | #send mail to administrator 39 | /bin/mail caodaijun@pica.com -s "project_backup_$now" < 给该脚本添加可执行权限。 -------------------------------------------------------------------------------- /25_mac_server.md: -------------------------------------------------------------------------------- 1 | # Mac OS 10.8 SVN服务器的建立 2 | 3 | Mac 10.8开始,不再默认安装svn,需要自行安装 4 | 5 | 如果安装了XCode,会随同安装svn(AppStore里可直接下载) 6 | 7 | **更省事的办法:** 8 | 9 | **1. 安装homebrew** 10 | 11 | 官网链接 [homebrew](http://brew.sh/index_zh-cn.html) 12 | 13 | 打开终端Terminal,粘贴下面的命令: 14 | 15 | ``` 16 | ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)" 17 | ``` 18 | 19 | 安装过程中,如果出现此警告 20 | 21 | ``` 22 | Warning: Install the "Command Line Tools for Xcode": http://connect.apple.com 23 | ``` 24 | 25 | 请打开xcode以后,点击菜单栏的: 26 | 27 | ``` 28 | Xcode -> Preferences… -> Downloads 29 | ``` 30 | 31 | 选中`Command Line Tools for Xcode`,然后安装即可也可以直接去苹果官网下载。 32 | 33 | **2. 安装svn** 34 | 35 | 输入:`brew svn install` 36 | 37 | > 安装过程很简单,几乎没有提示 38 | 39 | **3. 配置svn服务** 40 | 41 | 1)首先,创建一个svn库的文件夹,如:/svn/repository/ 42 | 43 | 2)在终端输入 44 | 45 | ``` 46 | svnadmin create /svn/repository/ 47 | ``` 48 | 49 | 这个命令在/svn/repository/文件夹下,创建了需要的文件,然后简单编辑就可以用了 50 | 51 | ![Image of mac_svn1] 52 | (images/mac_svn1.png) 53 | 54 | 进入conf文件夹 55 | 56 | ![Image of mac_svn2] 57 | (images/mac_svn2.png) 58 | 59 | 首先编辑 svnserve.conf 60 | 61 | ![Image of mac_svn3] 62 | (images/mac_svn3.png) 63 | 64 | 保存后,其他两个文件参考里面的内容编辑即可 65 | 66 | 3)启动 67 | 68 | ``` 69 | svnserve -d -r /svn/repository/ 70 | ``` 71 | 72 | 结束:kill -9 svnserve 73 | 74 | 4)测试 75 | 76 | 可以使用svn命令行,也可以在Windows下用Tortoise SVN测试 77 | 78 | 地址:svn://192.168.0.1 79 | -------------------------------------------------------------------------------- /26_windows_install.md: -------------------------------------------------------------------------------- 1 | # Windows安装 SVN 客户端 2 | 3 | Subversion的客户端有两类,一类是websvn等基于web的,一种是以TortoiseSVN为代表的客户端软件。 4 | 5 | 前者需要web服务器的支持,后者需要用户在本地安装客户端,两种都有免费开源软件供使用。 6 | 7 | 官方网站:[下载链接](http://subversion.tigris.org/) 8 | 9 | **软件准备** 10 | 11 | - VisualSVN Server:Subversion服务器版。 12 | 13 | - TortoiseSVN:Subversion客户端。 14 | 15 | - AnkhSvn:VS上使用SVN的插件。 -------------------------------------------------------------------------------- /27_vsvn_install.md: -------------------------------------------------------------------------------- 1 | # VisualSVN Server安装 2 | 3 | - 点击VisualSVN-Server-2.1.2.msi,按下图进行安装 4 | 5 | ![Image of vsvn1] 6 | (images/vsvn1.png) 7 | 8 | ![Image of vsvn2] 9 | (images/vsvn2.png) 10 | 11 | ![Image of vsvn3] 12 | (images/vsvn3.png) 13 | 14 | ![Image of vsvn4] 15 | (images/vsvn4.png) 16 | 17 | ![Image of vsvn5] 18 | (images/vsvn5.png) 19 | 20 | ![Image of vsvn6] 21 | (images/vsvn6.png) 22 | 23 | -------------------------------------------------------------------------------- /28_tsvn_install.md: -------------------------------------------------------------------------------- 1 | # TortoiseSVN安装 2 | 3 | TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录。 4 | 5 | 文件保存在中央版本库,除了能记住文件和目录的每次修改以外,版本库非常像普通的文件服务器。 6 | 7 | 你可以将文件恢复到过去的版本,并且可以通过检查历史知道数据做了哪些修改,谁做的修改。 8 | 9 | 这就是为什么许多人将 Subversion和版本控制系统看作一种“时间机器”。 10 | 11 | - TortoiseSVN安装步骤如下: 12 | 13 | ![Image of tsvn1] 14 | (images/tsvn1.png) 15 | 16 | ![Image of tsvn2] 17 | (images/tsvn2.png) 18 | 19 | ![Image of tsvn3] 20 | (images/tsvn3.png) 21 | 22 | ![Image of tsvn4] 23 | (images/tsvn4.png) -------------------------------------------------------------------------------- /29_asvn_install.md: -------------------------------------------------------------------------------- 1 | # AnkhSvn安装 2 | 3 | AnkhSVN是一款在VS中管理Subversion的插件,您可以在VS中轻松的提交、更新、添加文件,而不用在命令行或资源管理器中提交。 4 | 5 | 而且该插件属于开源项目。 6 | 7 | ![Image of asvn1] 8 | (images/asvn1.png) 9 | 10 | ![Image of asvn2] 11 | (images/asvn2.png) -------------------------------------------------------------------------------- /30_pull_out.md: -------------------------------------------------------------------------------- 1 | # 迁出配置库内容 2 | 3 | **1.** 在本地硬盘上建立一个文件夹“SVN”,并在文件夹“SVN”中建立一个子文件夹(子文件夹为空文件夹), 4 | 5 | 子文件夹的名称可以根据本公司配置库路径下的对应文件夹名称进行定义。例如在SVN中建立一个test子文件夹。 6 | 7 | **2.** 鼠标选中文件夹“test”右键选择“SVN Checkout…”。 8 | 9 | ![Image of checkout] 10 | (images/checkout.png) 11 | 12 | **3.** 在弹出的窗口中URL of repository栏中输入您要访问的配置库路径,如http:///test(此路径为实验路径,输入时依具体配置库路径而定,可以为根目录的路径也可以为子目录的路径,目录选择要适当) 13 | 14 | > 备注:在Revision栏中选择“HEAD revision”项只能获得所输入路径下的最新版本文件。 15 | 16 | 选择“Revision”项可以输入或选择此路径下的任意历史版本文件。 17 | 18 | **4.** 在弹出的窗口Authentication中的Username栏输入用户名,在Password栏输入用户密码,可选择Save authentication复选框保存用户名和密码。 -------------------------------------------------------------------------------- /31_new_warehouse.md: -------------------------------------------------------------------------------- 1 | # 新建仓库 2 | 3 | 我们在Repositories鼠标右键打开菜单,点击Create New Repository 4 | 5 | ![Image of repositories1] 6 | (images/repositories1.png) 7 | 8 | 在弹出的新建仓库窗口中, 9 | 10 | ![Image of repositories2] 11 | (images/repositories2.png) 12 | 13 | 我们输入仓库的名称,系统会给我们显示访问对应使用Http协议访问的URL地址,当然我们还是可以使用SVN协议来访问该服务器。 14 | 15 | 我们还可以选中Create default structure选项来生成默认的trunk,branches,tags目录 点击ok,创建完成。 16 | 17 | ![Image of repositories3] 18 | (images/repositories3.png) -------------------------------------------------------------------------------- /32_add_users.md: -------------------------------------------------------------------------------- 1 | # 添加用户 2 | 3 | 在subversion中配置权限一直是一个比较麻烦的操作,对conf,passwd,auth文件的修改难倒了不少人,论坛中有关配置权限的问题比比皆是,但是到了VisualSVN一切问题都那么轻松。 4 | 5 | 我们选择Users模块,鼠标右键打开菜单 6 | 7 | ![Image of users1] 8 | (images/users1.png) 9 | 10 | 点击create user..打开添加用户窗口,输入用户名和密码确认即可用户添加操作完成 11 | 12 | ![Image of users2] 13 | (images/users2.png) 14 | 15 | ![Image of users3] 16 | (images/users3.png) 17 | 18 | 用户会被列在Users模块中,并且你可以在用户名上鼠标右键菜单中完成对密码重置和用户删除的操作。 19 | 20 | 用户的相关配置会单独放在仓库外由VisualSVN管理,当然密码是密文的,安全多了。 -------------------------------------------------------------------------------- /33_add_group.md: -------------------------------------------------------------------------------- 1 | # 添加组 2 | 3 | 我们在设置访问权限的时候一般都是通过组的概念来实现的,我们在Groups上鼠标右键打开菜单,选择Create Group,添加组 4 | 5 | ![Image of group1] 6 | (images/group1.png) 7 | 8 | 填写用户组的名字,并且添加该组的用户 9 | 10 | ![Image of group2] 11 | (images/group2.png) 12 | 13 | 点击add.在弹出的窗口中选择需要的用户 14 | 15 | ![Image of group3] 16 | (images/group3.png) 17 | 18 | 点击ok,完成用户组的添加 19 | 20 | ![Image of group4] 21 | (images/group4.png) 22 | 23 | 在用户组上右键打开Edit可以对组内的用户进行添加或删除 -------------------------------------------------------------------------------- /34_add_file.md: -------------------------------------------------------------------------------- 1 | # 增加文件 2 | 3 | 首先新建目录: 4 | 我们在工作目录中新建一个目录,例如document 5 | 6 | 我们有2种方式来添加目录: 7 | 8 | **1. 打开菜单选择add功能** 9 | 10 | ![Image of add] 11 | (images/add.png) 12 | 13 | 在弹出的add窗口中会列出所有待添加的文件和目录 14 | 15 | ![Image of document] 16 | (images/document.png) 17 | 18 | 我们这里只需要点击ok即可,如果有不需要添加的内容,将其勾除 添加成功后我们可以看到 19 | 20 | ![Image of three] 21 | (images/three.png) 22 | 23 | 该目录的图标从通用的文件夹变为带红色惊叹号的文件夹,注意这个时候我们并没有把该目录添加到服务器上,只是在本地做了一个添加的标记而已,然后我们使用commit操作完成 24 | 25 | ![Image of three2] 26 | (images/three2.png) 27 | 28 | 在打开的提交操作窗口,这里列出了需要操作的对象和状态,输入提交信息 29 | 30 | ![Image of commit] 31 | (images/commit.png) 32 | 33 | 确认后,document目录被添加至服务器上 34 | 35 | ![Image of path] 36 | (images/path.png) 37 | 38 | 再次强调SVN的revision是针对操作的,每一次操作revision加1 39 | 40 | 现在我们的document目录也变成绿色小勾的正常状态了 41 | 42 | ![Image of green] 43 | (images/green.png) 44 | 45 | **2. 直接打开菜单选择commit功能** 46 | 47 | TortoiseSVN支持这样的快捷操作,你可以直接选择commit,客户端会帮助你检查有哪些变动,例如我们再添加一个Tools目录,直接选择commit。 48 | 49 | 在弹出的commit窗口中,我们可以看到tools目录是一个non-versioned的状态,我们选择这个目录,并且添加Message,确定 。 50 | 51 | ![Image of tools1] 52 | (images/tools1.png) 53 | 54 | 同样可以完成将tools添加到服务器上的操作 55 | 56 | ![Image of tools2] 57 | (images/tools2.png) 58 | 59 | - **新建文件:** 60 | 对于SVN来说文件和目录是同一种性质的内容,所以文件的添加方式和目录完全相同我们这里就不详细介绍了,我们新建一个readme.txt的空文件到document目录下,然后在该目录中点击commit,确认后该文件被添加到服务器上 61 | 62 | ![Image of tools3] 63 | (images/tools3.png) -------------------------------------------------------------------------------- /35_update.md: -------------------------------------------------------------------------------- 1 | # 更新文件 2 | 3 | 当你从配置库中迁出相应目录后,他人对服务器上此目录内容进行了修改, 4 | 5 | 你需要再次获取改动内容到你本地硬盘空间目录(即先前已迁出的目录)的过程称为更新。 6 | 7 | 更新可以针对一个文件、几个选中的文件或者整个文件目录。 选中要被更新的文件,右键选择“SVN Update”项,如下图所示: 8 | 9 | ![Image of test] 10 | (images/test.png) 11 | 12 | 点击“SVN Update”后会弹出窗口显示更新的进度,如下图所示: 13 | 14 | ![Image of update] 15 | (images/update.png) 16 | 17 | 若上述框中的有文件出现亮红,说明来自配置库的内容与你本地修改内容合并时出现了冲突,后面课程会讲到解决冲突。 18 | 19 | -------------------------------------------------------------------------------- /36_delete.md: -------------------------------------------------------------------------------- 1 | # 删除文件 2 | 3 | 删除目录也有2种方式 4 | 5 | 1. 通过命令delete删除 6 | 7 | 2. 先手工在资源管理器中删除,再commit 相关操作参考新建目录 8 | -------------------------------------------------------------------------------- /37_edit.md: -------------------------------------------------------------------------------- 1 | # 修改文件 2 | 3 | 现在修改document文件,例如添加内容hello world,保存退出: 4 | 5 | 我们会发现文件的状态会变为红色惊叹号,标识该文件已经修改 6 | 7 | ![Image of readme] 8 | (images/readme.png) 9 | 10 | 将修改的文件提交至服务器只需要使用commit确认即可 11 | 12 | ![Image of readme2] 13 | (images/readme2.png) 14 | 15 | 文件状态为modified我们附加操作信息后确认即可 16 | 17 | ![Image of readme3] 18 | (images/readme3.png) 19 | 20 | 修改成功,我们修改了readme.txt文件 -------------------------------------------------------------------------------- /38_compare.md: -------------------------------------------------------------------------------- 1 | # 比较版本差异 2 | 3 | - **本地更改内容与更改前内容比较** 4 | 如果你想看到你本地的文件内容有哪些更改,鼠标选中文件右键选择“TortoiseSVN”的“Diff”项,系统弹出差异内容。 5 | 6 | - **本地更改内容与历史版本的比较** 7 | 如果你想查看你本地的文件内容与其历史版本之间的差异,鼠标选中文件右键选择“TortoiseSVN”的“Show log”项显示日志对话框,在日志对话框选择要比较的历史版本,后右键选择“Compare with working copy”项。 8 | 9 | - **两个历史版本的比较** 10 | 如果你要查看文件任意已提交的两个历史版本之间的差异,在上述日志对话框中选择你要比较的两个版本,右键选择“Compare revisions”项,系统弹出差异内容。 11 | 12 | - **与另外一个分支/标签之间的比较** 13 | 如果你想查看文件的某一分支(假如你在主线上开发)有哪些修改,选文件的同时按住Shift键,右键选择“TortoiseSVN”的“Diff with URL”。 14 | 15 | - **比较两个文件差异** 16 | 如果你想查看同一目录下两个没有关系的文件差异,选中这两个文件,右键选择“TortoiseSVN”的“Diff”项,系统弹出这两个文件的差异内容。 17 | 18 | - **比较两个文件夹差异** 19 | 如果你想查看两个不同的文件夹之间的差异,需使用版本库浏览器打开此目录,选中要比较的两个文件夹,右键选择“Compare revisions”项。 20 | 21 | - **比较两个图像差异** 22 | 如果你想查看两个不同的图像之间的差异,选中要比较的两个图像或者选中被修改的图像,右键选择“TortoiseSVN”的“Diff”项,系统弹出这两个图像的差异内容。 -------------------------------------------------------------------------------- /39_undo.md: -------------------------------------------------------------------------------- 1 | # 撤销更改 2 | 3 | 在修改了某些文件后(文件未上传到配置库),需要返回到修改前的状态. 4 | 5 | 则选中文件夹test右键选择“TortoiseSVN”的“Revert...”项进行撤销, 6 | 7 | 本地硬盘上的文件将恢复到修改前的内容,修改的内容将被删除。 8 | -------------------------------------------------------------------------------- /40_lock.md: -------------------------------------------------------------------------------- 1 | # 锁定和解锁 2 | 3 | 当项目需要时可以在你本地硬盘中将你迁出的内容进行锁定,选中要被锁定的文件右键选择`TortoiseSVN`的`Get lock...`项进行锁定(锁定后他人将无法修改此文件),系统弹出锁定信息框,解锁时选中被锁定的文件右键选择`TortoiseSVN`的`Release lock`项进行解锁。 4 | -------------------------------------------------------------------------------- /41_rename.md: -------------------------------------------------------------------------------- 1 | # 重命名文件 2 | 3 | 鼠标选中文件右键选择`TortoiseSVN`的`rename...`项,在New name框中输入新文件名后点击“OK”按钮,将出现重命名后的文件,原文件被删除,将它们提交后重命名生效。 -------------------------------------------------------------------------------- /42_synchronous.md: -------------------------------------------------------------------------------- 1 | # 获取历史文件 2 | 3 | - 查看历史文件 4 | 鼠标选中文件夹test右键选择“TortoiseSVN”的`Show log`项,系统弹出此路径下的所有文件版本信息,如下图所示: 5 | 6 | ![Image of look] 7 | (images/look.png) 8 | 9 | 此时也可双击文件查看修改的内容(比较上一版本所修改的内容)。 10 | 11 | - 获取历史文件 12 | 鼠标选中文件夹右键选择“TortoiseSVN”的“update item to revision ”项,后系统提示需要选择下载的版本,如下图所示: 13 | 14 | ![Image of get] 15 | (images/get.png) 16 | 17 | 操作完成后,再去看看document文件,是不是内容都没了,通过这样的方法,我们可以在版本历史中任意回溯。 18 | 19 | - 版本同步 20 | 作为一个支持并行开发的配置管理工具,我们如何获得别人修改的内容,这里我们使用update命令。 21 | 我们在需要同步的目录上点击鼠标右键点击update,我们即可获得服务器上最新内容的同步。 22 | 23 | ![Image of synchronous] 24 | (images/synchronous.png) 25 | 26 | 27 | -------------------------------------------------------------------------------- /43_check.md: -------------------------------------------------------------------------------- 1 | # 检查冲突 2 | 3 | **冲突:**是指团队协同工作时,当多人同时修改同一个文件,造成本地 文件与SVN系统中的文件版本不一致,而导致文件无法提交的情况; 4 | 5 | 在SVN上,我们对于文件的修改权限是相同的,谁都可以去修改文件并且提交,那么自然就出现更新冲突的问题。 6 | 7 | 例如文件readme.txt用户甲是在revision 5上修改的,在他提交前,用户乙已经将该文件修改提交为revision 8 了, 8 | 9 | 那么现在甲用户提交修改后的版本会怎么样呢?我们可以在SVN上模拟一下这个操作,生成2个用户,我们使用2个工作目录来执行。 10 | 11 | 用户甲先获得最新的该文件版本,hello world内容,然后用户乙也做同样的操作,乙在获得该文件后修改内容,添加乙修改的内容,并提交。 12 | 13 | 然后甲用户再修改内容提交,添加甲修改的内容,我们可以得到以下错误: 14 | 15 | ![Image of erorr] 16 | (images/erorr.png) 17 | 18 | 系统提示我们先更新,更新后我们会得到以下内容: 19 | 20 | ![Image of erorr2] 21 | (images/erorr2.png) 22 | 23 | -------------------------------------------------------------------------------- /44_resolve_conflict.md: -------------------------------------------------------------------------------- 1 | # 解决冲突 2 | 3 | **遇到冲突时,需要update该文件。** 4 | 5 | 面对文件冲突,可以选择以下三种方式解决冲突: 6 | 7 | **1. 手动合并冲突文件** 8 | 9 | **2. 使用工具解决冲突** 10 | 11 | 如图所示,对比两个版本的文件,解决冲突工具中会列出两个版本冲突的部分,并让您选择使用哪个版本的内容: 12 | 13 | ![Image of tools] 14 | (images/tools.png) 15 | 16 | **3. 用revert放弃所做的修改** 17 | 18 | ![Image of revert] 19 | (images/revert.png) 20 | 21 | > 通过上面所说的三种方法, 解决冲突后。要选择 resolved 解决后,再选择commit提交到SVN,这样我们就将更新冲突解决,并且确保了后提交的内容没有覆盖前提交的内容。 22 | 23 | -------------------------------------------------------------------------------- /45_ignore.md: -------------------------------------------------------------------------------- 1 | # 忽略无需版本控制的文件 2 | 3 | 在你给配置库中提交内容时,会有一些文件和目录不需要进行版本控制,只需要在你本地硬盘保存即可,这可能包括一些由编译器生成的文件,如`*.obj,*.lst`等。此时可采用添加相应文件到该项目的忽略列表的方法解决。 4 | 5 | 选中本地硬盘中无需提交到配置库的文件(此文件在本地硬盘的父目录是处于版本控制下的),右键选择“TortoiseSVN”的`Add to ignore list`项,点击`Add to ignore list`项中的项目.txt.bak代表只忽略这一个文件,若点击`*.bak`代表忽略所有具有`*.bak`后缀的文件。 6 | 7 | 如果你同时选择多种文件进行忽略时,就没有子菜单了,仅显示待忽略的个数。 -------------------------------------------------------------------------------- /46_remove.md: -------------------------------------------------------------------------------- 1 | # 去除 SVN 标志 2 | 3 | 选中需要取消SVN标记(脱离版本控制)的文件夹(其子文件夹也要取消相应标记)右键选择“TortoiseSVN”的`Export…`项, 4 | 5 | 系统弹出导出路径的信息框,如下图所示: 6 | 7 | ![Image of export] 8 | (images/export.png) 9 | 10 | 选定你要导出的路径,若选择E盘则会保存一份干净的文件到E盘。 11 | 12 | 选择上图中的`Export unversioned files too`复选框表示将本地不处于版本控制下的文件一起导出。 13 | 14 | 也可将每个文件目录下(包括子文件目录下)的.svn文件删除解决此问题。 15 | 16 | -------------------------------------------------------------------------------- /47_blame.md: -------------------------------------------------------------------------------- 1 | # 查看文件每行的修改信息 2 | 3 | 如果需要精确地知道谁修改了文件的哪一行,选中文件右键选择“TortoiseSVN”的`Blame…`项,系统提示需要选择的版本范围,如下图所示: 4 | 5 | ![Image of blame] 6 | (images/blame.png) 7 | 8 | 在上图中输入起始版本和目标版本,点击“OK”按钮后,显示文本内容、版本和修改人。 9 | 10 | 11 | -------------------------------------------------------------------------------- /48_switch.md: -------------------------------------------------------------------------------- 1 | # 重置访问路径 2 | 3 | 在你的本地硬盘选中已从配置库中获取的文件,右键选择“TortoiseSVN”的`Switch…`项,系统提示需要选择配置库中的路径。 -------------------------------------------------------------------------------- /49_Relocate.md: -------------------------------------------------------------------------------- 1 | # 本地路径转换 2 | 3 | 举例说明,选中本地jxmtp2_c文件夹,右键选择“TortoiseSVN”的`Relocate...`项,在弹出框中输入需转换的路径,如http:///svn/jxmtp2_c,点击OK。 4 | 5 | 即可将本地jxmtp2_c文件夹的路径从http:///svn/jxmtp2_c转换到http:///svn/jxmtp2_c。此转换无需重新下载即可实现路径转换。 6 | -------------------------------------------------------------------------------- /50_browse_repository.md: -------------------------------------------------------------------------------- 1 | # 浏览版本库 2 | 3 | 在本地任意位置右键选择“TortoiseSVN”的`Repo-browser`项,如下图所示: 4 | 5 | ![Image of browser] 6 | (images/browser.png) 7 | 8 | 在URL框中输入你要访问的路径,点击“OK”按钮后,选中某一文件右键进行相关操作。 9 | 10 | 如果要在版本库浏览器中移动一个文件,只用左键拖它到要去的位置。 11 | 12 | 如果要复制/移动一个文件或文件夹到一个新的位置并重命名,可以右键拖或者按住右键拖文件,而不用左键拖。 13 | 14 | 这样,会显示对话框来为该文件或文件夹重命名。 -------------------------------------------------------------------------------- /51_build_tag.md: -------------------------------------------------------------------------------- 1 | # 建立标签 2 | 3 | 鼠标选中主线目录右键选择“TortoiseSVN”的`Branch/tag…`项,系统弹出有关标签路径的信息。 4 | 5 | 在To URL栏中输入标签目录,如http:///test/空中充值项目/标签/V1.0.0.0(输入的V1.0.0.0可自动生成,无需事先建立V1.0.0.0文件夹),点击“OK”按钮建立V1.0.0.0版本标签。 6 | -------------------------------------------------------------------------------- /52_branch.md: -------------------------------------------------------------------------------- 1 | # 建立分支 2 | 3 | - **建立分支** 4 | 分支建立方法和标签建立方法相同。 5 | 6 | - **合并分支** 7 | 首先保证你在分支上的修改已经全部提交。鼠标选中主线文件夹右键选择“TortoiseSVN”的`Merge…`项,系统弹出有关分支合并的信息,在From框中选择URL(如http:///test/空中充值项目/分支)点击show log选择起始版本。 8 | 在To框中选择URL(与From框中路径相同)和版本号(需合并的版本,若是最新版本可直接选择HEAD Revision)。 9 | 点击`Merge`后,即完成将分支修改内容合并到主线目录的工作。 10 | 最下面的按钮介绍:“Diff”显示出所有发生变化的文件列表,双击具体文件可以查看分支文件与主线文件的区别。 11 | 12 | > “Unified diff”显示分支和主线两版本树之间所有文件的内容的变化。 13 | 14 | > “Dry run”能显示真正合并时的状态信息,但并没有做任何的合并操作。 15 | 16 | - **查看版本分支图** 17 | 选中要查看的文件,右键选择“TortoiseSVN”的“Revision graph”项,系统弹出有关版本分支的结构图。 -------------------------------------------------------------------------------- /53_clear.md: -------------------------------------------------------------------------------- 1 | # 清除用户名等信息 2 | 3 | 当你的SVN客户端记录了你访问配置库的用户名和密码后,需要清除所记录的内容。 4 | 5 | 右键选择“TortoiseSVN”的`Settings`项,系统会弹出有关设置的信息框, 6 | 7 | 选择`Saved Data`项在右侧显示框中点击`Authentication data`的`Clear`按钮清除用户名和密码。 8 | -------------------------------------------------------------------------------- /54_install.md: -------------------------------------------------------------------------------- 1 | # 安装 SVN 插件 2 | 3 | 以Eclipse3.4.2为例,不同版本的Eclipse对应不同版本的SVN插件。 4 | 5 | 方法一:直接上网下载 6 | 7 | [SVN官网](http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA) 8 | 9 | 分别放入Eclipse的plugins和feature目录中 10 | 11 | 方法二:直接解压到 Eclipse 安装目录 12 | 13 | **1.** 打开eclipse,在菜单栏中选择Help→Software Updates→Find and Install; 14 | 15 | **2.** 选择Search for new features to install,点击Next进入下一步; 16 | 17 | **3.** 点击“New Remote Site”按钮,在弹出的对话框中输入: 18 | 19 | ``` 20 | name:svn url:http://subclipse.tigris.org/update_1.4.x 21 | ``` 22 | 23 | 点击OK,关闭对话框,并点击Finish按钮,eclipse自动下载插件安装程序; 24 | 25 | **4.** 下载完插件之后,进入安装画面。 26 | 27 | **5.** 选择所要安装的SVN插件内容,这里去掉第二个选项Subclipse Integrations,点击下一步; 28 | 29 | **6.** 选择 “I accept the terms in the license agreements”并点击Next,直到点击Finish即可,进入下一步。 30 | 31 | **7.** 开始安装SVN插件,安装完成之后,重启eclipse。 -------------------------------------------------------------------------------- /55_checkout.md: -------------------------------------------------------------------------------- 1 | # 配置 ECLIPSE 提交目录 2 | 3 | 1. 在菜单栏中选择`Window→Open Perspective→Other`打开Myeclipse试图列表。这个时候Myeclipse的视图列表中,就出现了“SVN Repository Exploring”一项。 4 | 5 | 2. 打开"SVN Repository Exploring”视图。在左边空白区域,单击右键`→New→Repository Location`。 6 | 7 | 3. 在Url一栏中输入svn://IP, 点击Finish按钮。 8 | 9 | 4. 选择要下载的项目右键选择checkout 就把项目下载到本地了。 -------------------------------------------------------------------------------- /56_basics.md: -------------------------------------------------------------------------------- 1 | # 基本操作 2 | 3 | 1. **提交工程** 4 | 右击工程->小组->共享项目->选择SVN->选择svn://127.0.0.1(如果没有,则创建一个新的资源库)->下一步->完成 5 | 6 | 2. **下载工程** 7 | 在SVN资源库透视图下,点开svn://127.0.0.1,会显示出现在本机SVN上的所有工程,右击你想下载的工程->检出为->下一步->完成 8 | 9 | 3. **操作工程** 10 | * 同步:在MyEclipse J2EE透视图下,右击你要同步的工程->小组->与资源库同步->这时会进入同步透视图,会显示出本机与SVN上内容有不同的文件,双击文件名,会显示出两个文件中哪里不同; 11 | 12 | * 提交:在同步透视图下有"灰色向右的箭头,表示你本机修改过",右击该文件,可以选择提交操作; 13 | 14 | 4. **覆盖/更新** 15 | 在同步透视图下有"蓝色向左的箭头,表示你本机修改过",右击该文件,可以选择覆盖/更新操作; 16 | 17 | 5. **图标说明** 18 | * 灰色向右箭头:本地修改过 19 | * 蓝色向左箭头:SVN上修改过 20 | * 灰色向右且中间有个加号的箭头:本地比SVN上多出的文件 21 | * 蓝色向左且中间有个加号的箭头:SVN上比本地多出的文件 22 | * 灰色向右且中间有个减号的箭头:本地删除了,而SVN上未删除的文件 23 | * 蓝色向左且中间有个减号的箭头:SVN上删除了,而本地未删除的文件 24 | * 红色双向箭头:SVN上修改过,本地也修改过的文件 25 | 26 | 6. **一些遇到的出错信息** 27 | 28 | 出现`svnserve.conf:12: Option expected`错误: 29 | 30 | 你打开svnserve.conf文件中的第12行,该错误是由于该行的前面有空格引起的,把左边多出的空格删除掉即可; 31 | 在上面讲的3.2步输入URL(svn://127.0.0.1/SVN_PRJ)点下一步出现"svn://127.0.0.1/SVN_PRJ non-existent in revision '7'"错误,URL错了,应该输入svn://127.0.0.1即可 -------------------------------------------------------------------------------- /57_install.md: -------------------------------------------------------------------------------- 1 | # 安装配置 2 | 3 | 官网下载SVN客户端,这里使用的是TortoiseSVN, 4 | 如图,安装时必须自定义选择 command line 否则不会安装的 5 | 6 | ![Image of as1] 7 | (images/as1.png) 8 | 9 | ![Image of as2] 10 | (images/as2.png) 11 | 12 | 安装完成后,打开 IDE 的 setting 配置面板: 13 | 14 | ![Image of as3] 15 | (images/as3.png) 16 | 17 | - 如上图路径 Version Control 下的 Subersion 设置: 18 | Use Command Line Client 选择浏览到你本地安装 TortoiseSVN 的 svn.exe 文件路径。 19 | 如下图:(注意输入框最右侧有个浏览的按钮,有可能没显示出来,拉伸窗口即可见) 20 | 21 | ![Image of as4] 22 | (images/as4.png) 23 | 24 | ![Image of as5] 25 | (images/as5.png) 26 | 27 | 配置好之后,安装即完成。 28 | 29 | 30 | -------------------------------------------------------------------------------- /58_import.md: -------------------------------------------------------------------------------- 1 | # 导入、签出 SVN 2 | 3 | ![Image of import] 4 | (images/import.png) 5 | 6 | 在 CVS 菜单下 有个 Import into Version Control 选择 svn ; 7 | 8 | 签出操作也差不多,也可以在新建项目中从 svn 签出并生成项目; 9 | 10 | > 另外:最下面一个栏目 Browse VCS Repository 可以浏览远程SVN 服务器上的文件并进行删除等操作。 11 | 12 | -------------------------------------------------------------------------------- /59_ignore_file.md: -------------------------------------------------------------------------------- 1 | # Ignore 指定忽略文件或目录 2 | 3 | AndroidStudio 的 Setting 面板中配置的 ignore 似乎没什么效果, 4 | 5 | 下面先看看忽略掉的目录的显示效果(比较暗的黄绿颜色) 6 | 7 | ![Image of setting] 8 | (images/setting.png) 9 | 10 | - 在 Setting 中的配置,主要忽略的目录和文件: 11 | 系统默认有两三个文件和目录,自己添加的 .gradle .idea build 目录 12 | 13 | ![Image of setting2] 14 | (images/setting2.png) 15 | 16 | - 通过 TortoiseSVN 来添加忽略: 17 | 18 | ![Image of setting3] 19 | (images/setting3.png) 20 | 21 | - 对于更新和提交:向上的绿色是commit ,向下的蓝色 是 update 22 | 23 | ![Image of setting4] 24 | (images/setting4.png) 25 | 26 | > 如果遇到 ignore 或其他设置无效等意外情况,可以尝试重启 androidstudio 或执行下 svn 的 update 试试 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /60_attention.md: -------------------------------------------------------------------------------- 1 | # SVN 注意事项 2 | 3 | **1.** 采用 “ Lock-Modify-Unlock ”这种模式进行协同工作,需要多进行的两个步骤: 4 | 5 | ``` 6 | Get Lock(锁定文件) 7 | Commit(提交,提交成功后程序自动把锁释放掉) 8 | ``` 9 | 10 | **2.** 合理选择提交频度和时机: 11 | 12 | 两次提交之间尽量进行同一类操作,比如,统改图层后提交一次,统改标注线 型后再提交一次。 13 | 14 | > 目的:一旦业主要求有反复,我们也很容易把以前工作成果 从库中提出来,减少返工。 15 | 建议一小时左右提交一次。养成按时提交的习惯。 16 | 17 | **3.** check out 和export的区别 18 | 19 | ``` 20 | check out 方式获得文件后,文件仍处于SVN版本控制中 21 | export 导出当前版本的数据,文件脱离SVN版本控制 22 | ``` -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | svn 教程 2 | ======== 3 | SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。 4 | 5 | 在Subversion管理下,文件和目录可以超越时空。 6 | 7 | Subversion将文件存放在中心版本库里。这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况。 8 | 9 | 这样就可以籍此将数据恢复到以前的版本,并可以查看数据的更改细节。 10 | 11 | 本教程全面讲解了SVN在不同平台下的安装与使用,并不断更新和完善,让其成为最权威的《 SVN 教程 》供大家使用。 12 | 13 | ![Image of Subversion] 14 | (images/Subversion.jpg) 15 | 16 | ps. 本篇权威教程还在不断完善,欢迎每一个人参与贡献。 17 | -------------------------------------------------------------------------------- /TOC.md: -------------------------------------------------------------------------------- 1 | * [介绍](README.md) 2 | * [svn是什么](01_what_svn.md) 3 | * [发展历史](02_history.md) 4 | * [为什么使用svn](03_why_use.md) 5 | * [SVN与VSS比较](04_compared_VSS.md) 6 | * [svn的工作模式(协同合作的两种模式)](05_working_mode.md) 7 | * [Subversion支持](06_support.md) 8 | * [运行方式](07_operation_mode.md) 9 | * [数据存储](08_data_storage.md) 10 | * [工作流程](09_work_flow.md) 11 | * [安全性](10_safe.md) 12 | * [体系结构](11_system_structure.md) 13 | * [组件](12_assembly.md) 14 | * [Windows SVN服务器的建立](13_windows_server.md) 15 | * [基于svn协议的服务端](14_svn_server.md) 16 | * [基于http协议的服务端](15_http_server.md) 17 | * [SVN密码管理](16_password.md) 18 | * [SVN权限管理(实例)](17_management.md) 19 | * [服务器端监视](18_server_monitor.md) 20 | * Linux下 SVN服务器的建立 21 | * [安装必须的软件包](19_package.md) 22 | * [基本的SVN服务器配置](20_linux_server.md) 23 | * [配置SVN服务器的HTTP支持](21_linux_http.md) 24 | * [配置邮件提醒支持](22_linux_email.md) 25 | * [其它常用配置](23_linux_other.md) 26 | * [备份管理](24_linux_backup.md) 27 | * [Mac OS 10.8 SVN服务器的建立](25_mac_server.md) 28 | * [Windows安装 SVN 客户端](26_windows_install.md) 29 | * [VisualSVN Server安装](27_vsvn_install.md) 30 | * [TortoiseSVN安装](28_tsvn_install.md) 31 | * [AnkhSvn安装](29_asvn_install.md) 32 | * [迁出配置库内容](30_pull_out.md) 33 | * [新建仓库](31_new_warehouse.md) 34 | * 添加用户及访问权限 35 | * [添加用户](32_add_users.md) 36 | * [添加组](33_add_group.md) 37 | * 维护工作文件 38 | * [增加文件](34_add_file.md) 39 | * [更新文件](35_update.md) 40 | * [删除文件](36_delete.md) 41 | * [修改文件](37_edit.md) 42 | * [比较版本差异](38_compare.md) 43 | * [撤销更改](39_undo.md) 44 | * [锁定和解锁](40_lock.md) 45 | * [重命名文件](41_rename.md) 46 | * [获取历史文件](42_synchronous.md) 47 | * [检查冲突](43_check.md) 48 | * [解决冲突](44_resolve_conflict.md) 49 | * [忽略无需版本控制的文件](45_ignore.md) 50 | * [去除 SVN 标志](46_remove.md) 51 | * [查看文件每行的修改信息](47_blame.md) 52 | * [重置访问路径](48_switch.md) 53 | * [本地路径转换](49_Relocate.md) 54 | * [浏览版本库](50_browse_repository.md) 55 | * [建立标签](51_build_tag.md) 56 | * [建立分支](52_branch.md) 57 | * [清除用户名等信息](53_clear.md) 58 | * ECLIPSE 集成 SVN 59 | * [安装 SVN 插件](54_install.md) 60 | * [配置 ECLIPSE 提交目录](55_checkout.md) 61 | * [基本操作](56_basics.md) 62 | * Android Studio配置SVN 63 | * [安装配置](57_install.md) 64 | * [导入、签出 SVN](58_import.md) 65 | * [Ignore 指定忽略文件或目录](59_ignore_file.md) 66 | * [SVN 注意事项](60_attention.md) 67 | -------------------------------------------------------------------------------- /images/Subversion--200.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/Subversion--200.jpg -------------------------------------------------------------------------------- /images/Subversion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/Subversion.jpg -------------------------------------------------------------------------------- /images/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/add.png -------------------------------------------------------------------------------- /images/as1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/as1.png -------------------------------------------------------------------------------- /images/as2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/as2.png -------------------------------------------------------------------------------- /images/as3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/as3.png -------------------------------------------------------------------------------- /images/as4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/as4.png -------------------------------------------------------------------------------- /images/as5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/as5.png -------------------------------------------------------------------------------- /images/asvn1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/asvn1.png -------------------------------------------------------------------------------- /images/asvn2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/asvn2.png -------------------------------------------------------------------------------- /images/blame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/blame.png -------------------------------------------------------------------------------- /images/browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/browser.png -------------------------------------------------------------------------------- /images/checkout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/checkout.png -------------------------------------------------------------------------------- /images/commit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/commit.png -------------------------------------------------------------------------------- /images/document.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/document.png -------------------------------------------------------------------------------- /images/erorr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/erorr.png -------------------------------------------------------------------------------- /images/erorr2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/erorr2.png -------------------------------------------------------------------------------- /images/export.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/export.png -------------------------------------------------------------------------------- /images/get.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/get.png -------------------------------------------------------------------------------- /images/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/green.png -------------------------------------------------------------------------------- /images/group1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/group1.png -------------------------------------------------------------------------------- /images/group2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/group2.png -------------------------------------------------------------------------------- /images/group3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/group3.png -------------------------------------------------------------------------------- /images/group4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/group4.png -------------------------------------------------------------------------------- /images/import.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/import.png -------------------------------------------------------------------------------- /images/look.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/look.png -------------------------------------------------------------------------------- /images/mac_svn1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/mac_svn1.png -------------------------------------------------------------------------------- /images/mac_svn2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/mac_svn2.png -------------------------------------------------------------------------------- /images/mac_svn3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/mac_svn3.png -------------------------------------------------------------------------------- /images/path.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/path.png -------------------------------------------------------------------------------- /images/readme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/readme.png -------------------------------------------------------------------------------- /images/readme2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/readme2.png -------------------------------------------------------------------------------- /images/readme3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/readme3.png -------------------------------------------------------------------------------- /images/repositories1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/repositories1.png -------------------------------------------------------------------------------- /images/repositories2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/repositories2.png -------------------------------------------------------------------------------- /images/repositories3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/repositories3.png -------------------------------------------------------------------------------- /images/revert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/revert.png -------------------------------------------------------------------------------- /images/setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/setting.png -------------------------------------------------------------------------------- /images/setting2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/setting2.png -------------------------------------------------------------------------------- /images/setting3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/setting3.png -------------------------------------------------------------------------------- /images/setting4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/setting4.png -------------------------------------------------------------------------------- /images/synchronous.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/synchronous.png -------------------------------------------------------------------------------- /images/test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/test.png -------------------------------------------------------------------------------- /images/three.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/three.png -------------------------------------------------------------------------------- /images/three2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/three2.png -------------------------------------------------------------------------------- /images/tools.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/tools.png -------------------------------------------------------------------------------- /images/tools1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/tools1.png -------------------------------------------------------------------------------- /images/tools2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/tools2.png -------------------------------------------------------------------------------- /images/tools3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/tools3.png -------------------------------------------------------------------------------- /images/tsvn1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/tsvn1.png -------------------------------------------------------------------------------- /images/tsvn2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/tsvn2.png -------------------------------------------------------------------------------- /images/tsvn3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/tsvn3.png -------------------------------------------------------------------------------- /images/tsvn4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/tsvn4.png -------------------------------------------------------------------------------- /images/update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/update.png -------------------------------------------------------------------------------- /images/users1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/users1.png -------------------------------------------------------------------------------- /images/vsvn1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/vsvn1.png -------------------------------------------------------------------------------- /images/vsvn2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/vsvn2.png -------------------------------------------------------------------------------- /images/vsvn3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/vsvn3.png -------------------------------------------------------------------------------- /images/vsvn4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/vsvn4.png -------------------------------------------------------------------------------- /images/vsvn5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/vsvn5.png -------------------------------------------------------------------------------- /images/vsvn6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/vsvn6.png -------------------------------------------------------------------------------- /images/work_flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jikexueyuanwiki/svn-bak/362798c3782255a62865151e35df52445c5827b9/images/work_flow.png --------------------------------------------------------------------------------