svn 基础 入门 (Good!)

摘要:
服务基本工作周期1.更新工作副本。签出是指从配置管理系统的文件库中获取一个副本作为自己的工作副本,并对该工作副本执行自己的工作。在svn中,动作命令“checkin”是。Svnversion:此工具用于显示工作副本的状态。Svnadmin:用于创建、调整和修复版本库的工具。svn配置基于最后配置的apache目录:/usr/share/apache2svnhttp://subversion.apache.org/download/configure&&make&&install $./ configure--with apxs=/usr/share/apache2/bin/apxs--prefix=/usr/share/subversion--with apr=/usr/share/apache2--with apr-util=/usr/share/papache2--with ssl--with zlib--enable mainframe mode$make$makeinstall为了便于理解,以下所有命令都使用绝对路径。有关详细信息,请参阅svnbook。
前言: 软件不能完全解决因沟通造成的问题。 
什么是 svn

subversion的版本库是一种文件服务器,它记录每一次改变,每个文件的改变,甚至是目录树本身的改变,例如文件和目录的添加、删除和重新组织。一般情况下,客户端从版本库中获取的数据是文件系统树中的最新数据。但是客户端也具备查看文件系统树以前任何一个状态的能力。举个例子,客户端有时会对一些历史性问题感兴趣,比如“上星期三时的目录结构是什么样的?”或者“谁最后一个修改了这个文件,都修改了什么?”这些都是版本控制系统的核心问题:设计用来记录和跟踪数据变化的系统。
总而言之,svn实现了代码备份,历史查看,协同开发,权限管理。

版本库、工作副本及修订版本(repository & working copy & revision)
利用svn管理一个项目前,我们会将包含源码文件的目录提交,导入(import)到版本库(存储所有修订版本历史记录的地方)。我们在开发工作中,便从版本库中导出一个工作副本(从配置管理系统的文件库中取出的保存在本地的文件副本),在此副本上进行工作(文件修改),而在工作完成后提交,更新版本库,产生新的修订版本号(从版本控制系统中可以找到从文件创建到最后一次提交的每一个修订版本号对应的每一个版本)。

svn基本工作周期
1. 更新工作副本update working copy)。(ps: 此处update并不是指modify和change涵义的更新,而是指将本地版本号小的替换为服务器上版本号更大的文件,即 更新的版本文件。)
2. 修改代码。编辑存在的文件的内容应该是最频繁的动作了。不仅仅是修改文件,有时候也需要添加、删除、复制或移动文件和目录。(add delete copy move)
3. 查看修改记录。(status diff)。
4. 修正错误。当发现改动过的工作副本因为编辑而添加了错误,最好的处理就是恢复到修改前的状态。(revert)
5. 解决冲突(合并多人的更改)。不仅仅只有一个人在对文件进行编辑,必须避免冲突及更改丢失。(update,resolve)
6. 提交更改。当作的更改提交并接受后,便更新了版本库(版本号+1)。

check in & check out & commit & update
检入(svn commit) 指将自己的工作副本提交到配置管理系统的文件库中,使得他人可以从文件库中获取你的最新修改版本。检出(svn checkout) 指从配置管理系统的文件库中取出一个副本作为自己的工作副本,并在这个工作副本上进行自己的工作。 每次执行svn update时,当前工作副本会更新为代码库内保存的最新版本。而在工作副本进行的修改并不会在版本库中而在检入提交修改后,就会在版本库添加新的版本。其他工作者利用update就可以得到最新版本的工作副本。
svn中,"check in"(检入)这个动作命令为(svn commit)。不同工具中的对等词如下:
SVN VSS CVS
commit checkin commit
update getLatestVersion checkout/updateselection
版本库访问方式
可以通过多种方式访问:本地磁盘访问,或各种各样不同的网络协议。一个版本库地址永远都只是一个URL。
模式 访问方法
file:/// 直接版本库访问(本地磁盘)
http:// 通过配置Subversion的Apache服务器的WebDAV协议
https:// 与http://相似,但是包括SSL加密。
svn:// 通过svnserve服务自定义的协议
svn+ssh:// 与svn://相似,但通过SSH封装

svn组件
svn:命令行客户端程序。
svnversion:此工具用来显示工作副本(当前项目的修订版本)的状态。
svnlook:直接查看版本库的工具。
svnadmin:建立、调整和修复版本库的工具。
svndumpfilter:过滤版本库转储数据流的工具。
mod_dav_svn:Apache的一个插件,使版本库可以通过网络访问。
svnserve:一个单独运行的服务器程序,可以作为守护进程或由SSH调用。这是另一种使版本库可以通过网络访问的方式。
svnsync:一个通过网络增量镜像版本库的程序。

svn配置
基于上次配置的apache目录为/usr/share/apache2 (http://blog.csdn.net/ottocho/article/details/7247992)
下载svn http://subversion.apache.org/download/
configure && make && install
$ ./configure --with-apxs=/usr/share/apache2/bin/apxs
--prefix=/usr/share/subversion --with-apr=/usr/share/apache2
--with-apr-util=/usr/share/apache2 --with-ssl --with-zlib
--enable-maintainer-mode
$ make
$ make install
为便于理解,以下全部使用绝对路径。下文$行为命令,#行为注释。#注释行通常为其紧随几行命令的解释与注解。以下为一个可以使用的配置方法,介绍了联合apahce使版本库可以通过网络访问的方法。具体解释请参考svnbook。
# 创建新的版本库
$ /usr/share/subversion/bin/svnadmin create /home/ottocho/svn
# 把路径/home/ottocho/src/下的文件导入到你创建的版本库中去,提交后的修订版本号为1。
$ /usr/share/subversion/bin/svn import /home/ottocho/src/ file:///home/ottocho/svn -m "lib"
# 去除其他人对该目录的权限
$ chmod 700 /home/ottocho/svn
# 增加用户 利用apache的工具htpasswd生成用户文件
# /usr/share/apache2/bin/htpasswd /home/ottocho/svn/conf/authfile ottocho
# 以上命令用以修改用户密码
$ /usr/share/apache2/bin/htpasswd -c /home/ottocho/svn/conf/authfile ottocho
# 分配权限
$ vim /home/ottocho/svn/conf/authz
# 版本库所有人为只读,ottocho用户为读写权限。添加内容如下:
[/]
* = r
ottocho = rw
# 修改Apache配置文件,/usr/share/apache2/conf/httpd.conf添加内容如下:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

DAV svn
SVNPath /home/ottocho/svn
AuthzSVNAccessFile /home/ottocho/svn/conf/authz
AuthType Basic
AuthName "Subversion.zoneyump"
AuthUserFile /home/ottocho/svn/conf/authfile #用户文件在此
Require valid-user

设置完成后,就可以
$ /usr/share/apache2/bin/apachectl start
将这个。重启Apache,就可以通过
http://localhost/svn 来访问版本库了
# 以下请注意区分版本库的URL格式(如上文)及文件路径区别。
# 检出一个工作副本进行工作:
$ /usr/share/subversion/bin/svn checkout file:///home/ottocho/svn /home/ottocho/workdir/src
# 确认导入的项目是否正确:
$ /usr/share/subversion/bin/svn list --verbose file:///home/ottocho/svn
# 输出版本库的最新修订版本信息,包括作者、时间、日志字数和日志内容等。
# 可以在命令后面接 “--revision 版本号” 来指定某一个修订版的显示。
$ /usr/share/subversion/bin/svnlook info /home/ottocho/svn
# 显示版本库的具体树形结构,后面的 “--show-ids” 选项指定显示每一个显示元素的修改版本 ID。
$ /usr/share/subversion/bin/svnlook tree /home/ottocho/svn --show-ids

svn基本功能及命令:
1. import:
svn import 项目文件夹 版本库URL
2. checkout: (co)
svn co 版本库URL [检出位置]
svn co -r 12 版本库URL # 出第12版的 projcets code
3. list: (ls)
svn ls 版本库URL
#以下命令在工作副本中进行
4. update: (up) 更新成最新版本
SVN_CHECKOUT_DIR$ svn up
5. commit: (ci), 将目前所做的修改提交版本库
SVN_CHECKOUT_DIR$ svn ci filename -m "here is a log" #尽量写log,这对团队有很大帮助。
6. status: (st), 看目前文件/结构与版本库的区别
SVN_CHECKOUT_DIR$ svn st
7. add: 将文件/目录新增入版本库
SVN_CHECKOUT_DIR$ svn add file_name
SVN_CHECKOUT_DIR$ svn add directory_name
8. mv: 修改版本库文件名
SVN_CHECKOUT_DIR$ svn mv filename new_filename
9. revert: 还原修改, 回到前一版状态(未 commit 前可用)
SVN_CHECKOUT_DIR$ svn revert [file|directory]
10. diff: 历史版本比较
SVN_CHECKOUT_DIR$ svn diff -r N:M
11. lock: 锁定文件
SVN_CHECKOUT_DIR$ svn lock filename
12. unlock: 解锁文件
SVN_CHECKOUT_DIR$ svn unlock filename

svn文件状态
?: 文件不存在版本库中
A: 此次新增的文件
C: 此文件已经有人修改,无法合并,需要人工并入
D: 此次移除的文件
M: 此文件有修改過
U: 此文件有被更新過

免责声明:文章转载自《svn 基础 入门 (Good!)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇在事务中执行批量复制操作SqlBulkCopy,SqlTransaction .Android连载29-持久化技术下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Django model update的各种用法介绍

Django开发过程中对表(model)的增删改查是最常用的功能之一,本文介绍笔者在使用model update过程中遇到的那些事 model update常规用法 假如我们的表结构是这样的 class User(models.Model): username = models.CharField(max_length=255, unique=Tr...

Windows下FFmpeg各版本库文件下载

ffmpeg主要是基于linux开发,当然它也支持windows,不过并不支持visual studio系列IDE(因为它使用了大量C99特性,而vs不支持C99)。 要想在windows上使用 一可通过下载源码并编译,编译方法有两个,后者比较简单 1、在Windows下通过mingw或cygwin来编译 2、在linux上构建windows交叉编译环境来...

纯前端版本号策略

近日在做的一个全静态项目,没有任何服务器逻辑,所以版本号策略也采用了纯前端的解决方案. 说实在话,其实都是被逼的,我只要修改一下服务器配置加简单的逻辑判断就可以了,但是后端工程师懒的搞,觉着巨复杂. 说到版本号,其实涉及到版本号有三个问题要考虑:版本发布问题 缓存和版本回滚问题 切换开发和维护环境的问题 其实方案很简单,类似于svn的版本策略,也就是如果有...

[0] C#软件项目版本号的命名规则及格式介绍

版本控制比较普遍的 3 种命名格式 :  一、GNU 风格的版本号命名格式 :  主版本号 . 子版本号 [. 修正版本号 [. 编译版本号 ]]  英文对照 : Major_Version_Number.Minor_Version_Number[.Revision_Number[.Build_Number]]  示例 : 1.2.1, 2.0, 5.0....

记录IDEA回退,远程库未回退问题

在使用IDEA的reset时,会出现本地代码虽然回退了,但是远程代码库并未回退到对应的版本。简单说,本地回退了,远程库未回退。这时候我们就需要使用命令行操作方式了。 1、在log上找到要恢复的版本号 使用git log查看需要恢复到的版本号。拿到git log version版本号。 git log git log 2、在客户端执行如下命令(执行...

java bean 转换工具

考量要素: 1.简单的约定优于配置的同名属性copy 2.嵌套属性copy 3.flattern(扁平化)支持,要支持N层结构的copy到一层结构。 4.性能 如下这个网页,里面提到了好多工具。 http://stackoverflow.com/questions/1432764/any-tool-for-java-object-to-object-map...