svn总结
mac自带svn服务,我们可以在本地搭建svn服务器,用来代码版本管理
一、配置SVN
1.创建代svn文件夹
在桌面创建svn版本管理文件夹:mkdir /Users/mac/desktop/svn
或者手动创建文件夹svn
2.创建仓库
cd /Users/mac/desktop/svn
svnadmin create repository
如果没有任何提示,直接回到可以输入的状态就表明创建成功。
进入 /Users/mac/desktop/svn 可以看到我们已经成功创建了 repository文件夹
3.如何关闭svn服务器
打开活动监视器
搜索svn
点击左上角X按钮 退出svn
4.配置SVN
进入repository文件夹中的conf文件夹
- authz 文件 配置用户权限,如用户分组,不同用户读写权限皮遏制
- password 文件 配置用户账号和密码
- svnserve.conf 主要是svn进程配置。
打开 svnserve.conf,找到以下的四行
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
把每一行前面的#和空格都删掉
打开 password,在[users]下面添加账号和密码
wbb = 123456
fbz = 123456
twf = 123456
打开authz,配置用户组和权限
我们可以将在passwd里添加的用户分配到不同的用户组里,以后的话,就可以对不同用户组设置不同的权限,没有必要对每个用户进行单独设置权限。
在[groups]下面添加组名和用户名,多个用户之间用逗号(,)隔开
如:
[groups]
top = wbb
normal = fbz,twf
一个top组,组中只有一个成员wbb,
一个normal组,组中有两个成员fbz,twf
使用[/]代表svn服务器中所有资源库
[/]
@top = rw
top组中的成员都有读写权限
如果是用户 不用加@
[/]
fbz = rw
如果让twf用户,在iOS/testProject文件夹中只拥有 只读权限
[/repository:iOS/testProject]
twf = r
配置ignore
vi ~/.subversion/config
如果”.subversion”目录不存在,请运行”svn status”命令,虽然此命令会失败,但是会为你创建所需要的文件。
在下面添加:
global-ignores = build *~.nib *.so *.pbxuser *.myode *.perspective* .DS_Store xcuserdata build *.mode1v3 *.pbxuser *.moved-aside DerivedData Pods Podfile.lock
# global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo
二、SVN命令
import命令
本地代码import到版本库
bogon:~ chenshuangchou$ svn import /Users/chenshuangchou/Desktop/BuickIOS/Buickhousekeeper https://192.168.21.248:8443/svn/BuickIOS/ -m "initial import"
本地代码导入到本地svn服务器
把我们的项目导入到svn服务器中
svn import 项目文件路径 svn服务器地址 用户名 密码 导入说明
svn import /Users/mac/desktop/svnTestProject svn://localhost/repository/iOS/svnTestProject --username=wbb --password=123456 -m"导
checkout命令
从版本库checkout出来,这个目录就相当于被激活,内部跟服务器地址关联。
bogon:~ chenshuangchou$svn checkout https://192.168.21.248:8443/svn/BuickIOS/ /Users/chenshuangchou/Desktop/BuickIOS
注意:只有从服务器checkout的文件夹内才可以使用svn记录版本
最简单的办法就是,在服务器创建一个项目文件夹,把服务器文件夹checkout到本地,然后把我们自己的项目文件全部挪到这个文件夹,这样就可以使用svn来管理了。
commit命令
提交内容到版本库
commit -m "添加了一个油耗柱状图"
提交到版本库成功的话,
Adding (bin) 。。。。
Committed revision 3.
update命令
更新版本库到本地,更新指定目录,svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
svn update
Updated to revision 3.
回退到版本2:
svn update -r 2
回退成功的话
Updated to revision 2.
查看svn 状态:
svn status
?:不在svn的控制中;
M:内容被修改;
C:发生冲突;
A:预定加入到版本库;
K:被锁定
svn status -v path
显示所有文件的修改信息,在查看状态的同时,显示本地当前版本号,最后一次修改的版本号和修改人,分别在前
M Desktop/BuickIOS1/.git/index
? Desktop/BuickIOS1/.git/objects/1c/7d8324a67dcd866bd0b4122b01b924a0e77128
? Desktop/BuickIOS1/.git/objects/75/1826a72a4afd4b15faf73a0b6e4166d3bbec01
? Desktop/BuickIOS1/.git/objects/a4/1c23190a65cda6a64a95bef22a9264ad64d90e
? Desktop/BuickIOS1/.git/objects/b3/df5dbb592745d9744adf7a32ed2bb39370c78e
M Desktop/BuickIOS1/Buickhousekeeper/AppDelegate.h
? Desktop/BuickIOS1/Buickhousekeeper/lastmouth_color1.png
? Desktop/BuickIOS1/Buickhousekeeper/lastmouth_color2.png
? Desktop/BuickIOS1/Buickhousekeeper/lastmouth_color3.png
? Desktop/BuickIOS1/Buickhousekeeper/lastmouth_color4.png
M Desktop/BuickIOS1/Buickhousekeeper.xcodeproj/project.pbxproj
M Desktop/BuickIOS1/Buickhousekeeper.xcodeproj/project.xcworkspace/xcuserdata/chenshuangchou.xcuserdatad/UserInterfaceState.xcuserstate
delete命令
svn delete path -m " delete test fle "
删除一个空白的文件夹:
svn delete /Users/chenshuangchou/Desktop/BuickIOS/branches
D Desktop/BuickIOS/branches
显示删除成功
添加文件
svn add 文件名
批量添加 http://www.cnblogs.com/sky-heaven/p/5534104.html
svn st | grep '^\?' | tr '^\?' ' ' | sed 's/[ ]*//' | sed 's/[ ]/\\ /g' | xargs svn add
svn revert 取消所有的本地编辑。
概要
子命令Svn revert PATH...描述
Reverts any local changes to a file or directory and resolves any conflicted states. Svn revert will revert not only the contents of an item in your working copy, but also any property changes. Finally, you can use it to undo any scheduling operations that you may have performed (e.g., files scheduled for addition or deletion can be “unscheduled”).
选项
--changelist ARG
--depth ARG
--quiet (-q)
--recursive (-R)
--targets FILENAME
下面我们来看一下子命令Svn revert例子:
丢弃对一个文件的修改:
$ Svn revert foo.c
Reverted foo.c
如果你希望恢复一整个目录的文件,可以使用--depth=infinity选项:
$ Svn revert --depth=infinity .
Reverted newdir/afile
Reverted foo.c
Reverted bar.txt
最后,你可以取消预定的操作:
$ svn add mistake.txt whoops
A mistake.txt
A whoops
A whoops/oopsie.c
$ Svn revert mistake.txt whoops
Reverted mistake.txt
Reverted whoops
$ svn status
? mistake.txt
? whoops。SVN的子命令Svn revert的一些相关问题就介绍到这里,请你关注本节的其他文章介绍。
查看提交说明
svn log
svn log -l 4
三、svn 错误和解决
错误:Item is not readable
没有读权限
解决:去svnserve.conf 中设置 anon-access = none
四、svn 基本概念
版本库
Subversion 使用集中的数据库,它包含了所有的版本控制文件及其完整历史。这个数据库就是版
本库。版本库通常位于运行 Subversion 服务器的文件服务器上,向 Subversion 客户端(例如TortoiseSVN,提供需要的数据。如果只备份一个东西,请备份版本库,因为它是你数据的主副本。
工作副本
这是实际工作的地方。每一个开发者在自己的电脑上都有属于自己的工作副本,有时可以将其理解
为沙箱。你可以将最新的版本从版本库上取下来,在本地的副本上工作而不影响其他人,如果对更
改满意就可以将其提交到版本库中。
两种版本模型
1.锁定-修改-解锁 方案
2.复制-修改-合并 方案 需要程序员手工合并
版本库的URL
file:// 直接版本库访问(本地磁盘或者网络磁盘)。
http:// 通过 WebDAV 协议访问支持 Subversion 的 Apache 服务器。
https:// 与 http:// 相似,但是用 SSL 加密。
svn:// 通过未认证的 TCP/IP 自定义协议访问 svnserve 服务器。
svn+ssh:// 通过认证并加密的 TCP/IP 自定义协议访问 svnserve 服务器。
工作副本怎样跟踪版本库
对于工作副本的每一个文件,Subversion 在管理目录 .svn/ 记录两项关键的信息:
• 工作文件的基准版本(叫做文件的工作版本)和
• 一个本地副本最后更新的时间戳。
给定这些信息,通过与版本库通讯,Subversion可以告诉我们工作文件是处与如下四种状态的那一种:
- 未修改且是当前的
文件在工作目录里没有修改,在工作版本之后没有修改提交到版本库。svn commit 操作不做任何事情,svn update 不做任何事情。
- 本地已修改且是当前的
工作副本已经修改,从基准版本之后没有修改提交到版本库。本地修改没有提交,因此 commit 会成功的提交,update 不做任何事情。
- 本地未修改且过时
这个文件在工作副本没有修改,但在版本库中已经修改了。这个文件应当更新到最新公共版
本。commit 不做任何事情,update 将会更新工作副本到最新的版本。
- 本地已修改且过时
这个文件在工作副本和版本库中都被修改了。提交 该文件将会因为 过时 而失败。该文件应该先更新; 更新 命令将会尝试合并公共更改和本机更改。如果 Subversion 不能顺利的自动完成合并,则需要用户解决冲突。
svn目录结构
我们在一些著名开源项目的版本库中,通常可以看到 trunk, branches, tags 等三个目录。由于 SVN 固有的特点,目录在 SVN 中并没有特别的意义,但是这三个目录却在大多数开源项目中存在,这是因为这三个目录反映了软件开发的通常模式。
1.trunk
trunk 是主分支,是日常开发进行的地方。
2.branches
branches 是分支。一些阶段性的 release 版本,这些版本是可以继续进行开发和维护的,则放在 branches 目录中。又比如为不同用户客制化的版本,也可以放在分支中进行开发。
3.tags
tags 目录一般是只读的,这里存储阶段性的发布版本,只是作为一个里程碑的版本进行存档。
要使用这样的结构,在建立项目版本库时,可首先建好项目文件夹,并在其中建立 trunk, branches, tags 三个空的子目录,再将项目文件夹连同这三个子目录一起导入版本库。这样在 trunk 中开始进行开发,当需要建立 branch 或 tag 时,使用 SVN 的 copy 操作进行。其中 tags目录需要只读,可以使用 SVN 中的 authz 文件控制该目录的访问权限为只读。