1. 安装 svn yum install subversion 安装svn扩展
2. mkdir /svnroot 创建svn文件夹
3. svnadmin create /svnroot/imooc 创建版本库 (绝对路径)
4. cd /svnroot 进入svn目录
5. svnadmin create imooc2 创建版本库(相对路径)
6. rm -rf /imooc2 (删除版本库 请再三确保版本库没用了)
7. conf/ 文件简介
authz 配置用户组以及用户组权限
passwd 配置用户名和密码
svnserve.conf 配置默认权限、权限配置文件及密码配置文件
8. 概念说明:
更新 从服务器上下载最新的文件
提交 从本地上传最新的文件
9. 修改配置文件 svnserve.conf
# anon-access = read 未经验证用户(没有用户名密码)可以干什么(更新)
# auth-access = write 通过验证的用户可以干什么
注: 去掉这两行注释 可选值有3个 none 什么都干不了 read 可以更新 write 允许提交和更新代码
# password-db = passwd 指定用户名及密码配置文件路径
# authz-db = authz 指定权限分组配置文件路径
注: 去掉这两行注释 路径支持绝对和相对 默认为conf文件下同级文件 修改后注意文件需要读写权限
10. 修改配置文件 password (存放当前版本库用户名和密码) 增加相应用户名和密码 (顶格写 千万别有空格)
11. 修改配置文件 authz
[aliases] 别名 暂时先不管
[groups] 组配置
@组名 = 用户,用户 @必须加
[/] 版本库根目录
@组名 = 权限
[imooc:/]
只针对指定版本库制定权限
cdd = rw 对单个用户制定权限
[repos:/xxx] 版本库下文件夹制定权限
* = r 所有人都有r权限
例:
[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil,
Ltd./OU=Research Institute/CN=Joe Average
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
dev = cdd
[/]
@dev = rw
[imooc:/]
@dev = rw
cdd = rw
12. svnserve -d -r /svnroot/imooc/ 启动版本库
svnserve -d -r /svnroot/hello --listen-port 3691 启动另一个版本库修改其端口号
13. svn co svn://127.0.0.1 连接svn (回到你自己想要的目录下)
svn co svn://127.0.0.1:3692 cdd1 连接svn 指定端口号和目录
14. ls -a 能查看到 .svn 证明成功
附: windows svn客户端下载地址
链接:http://pan.baidu.com/s/1mhXpNRE 密码:v4gh
15. windows操作: 新建一个文件夹右键检出 地址例: svn:// xxxx
文件夹里有.svn隐藏文件 就妥了
16. svn开机启动
vim /etc/rc.d/rc.local
/usr/bin/svnserve -d -r /svnroot/imooc (加入一行)
chmod +x rc.local 给下执行权限
checkout 检出 检出文件包含.svn文件夹
svn checkout svn://127.0.0.1/imooc
export 导出 导出文件不包含.svn文件夹
客户端命令
add 添加到版本控制
svn add index.html 一次添加一个文件
svn add js --non-recursive 只添加文件夹 不添加下面的文件
svn add * 添加所有文件 如果文件夹已经存在 则不扫描里面文件
svn add * --force 添加所有文件 强制执行 有文件夹也扫描里面文件
commit = ci 把记录提交到服务器
svn ci -m "new message" * 把所有记录提交到服务端
update up 更新 (系统只会更新一次文件 想强制更新 加* 或者删除文件重新更新)
svn up 获取服务器上最新的数据
svn up -r 1 index.html svn up -r 版本号 文件名
svn up * 强制更新所有文件
delete del remove rm
svn rm contact.html 从版本库中删除一个文件
diff di 版本差异比较
svn di index.html svn di 需要比较的文件
例子:
Index: index.html 对比的文件
===================================================================
--- index.html (revision 3) -号代表最后一次获取的内容 revision3 版本3
+++ index.html (working copy) +号表示工作副本中修改的内容
@@ -0,0 +1,11 @@ -0,0 存在差异的文件行号 +1,11 本地文件存在差异的行号
+<html> 存在差异的内容
+ <head>
+ <meta charset="UTF-8">
- <title>title</title> 会把减号的内容删除
+ <title>index title</title> 会把加号的内容添加进去
+ </head>
+ <body>
+ <p>This is the 1st line content in index.html.</p>
+ <p>This is the 1st line content in index.html.</p>
+ <p>This is the 1st line content in index.html.</p>
+ </body>
+</html>
svn di -r 2 index.html 比较当前文件和版本2文件的差异
svn di -r 1:3 index.html 比较版本1和版本3文件的差异
svn di 扫描所有文件 列出有修改的所有文件的对比
mkdir 创建目录并增加到版本控制
svn mkdir abc svn mkdir 文件夹名 创建一个文件夹 并上传到版本库中
cat 不检出工作副本直接查看制定文件
svn cat svn://127.0.0.1/index.html svn cat svn完整路径+要看的文件
revert 工作副本还原 (默认情况下只会扫描当前目录)
svn revert index.html 复原index.html 到版本库上最新版本
svn revert * 复原所有文件到版本库上最新版本
svn revert --recursive * 递归扫描所有文件复原到版本库上最新版本
文件冲突
Select: (p) postpone, (df) diff-full, (e) edit, p 延迟处理 df 显示差异 e 编辑
(mc) mine-conflict, (tc) theirs-conflict, mc 保留我的版本 tc保留他人的版本
(s) show all options:
df 例:
<title>title</title>
</head>
<body>
+<<<<<<< .mine
+ <p>I am B</p> 自己的版本
+=======
+ <p>I am a</p> 对方的版本
+>>>>>>> .r5
<p>This is the 1st line content in index.html.</p>
<p>This is the 1st line content in index.html.</p>
<p>This is the 1st line content in index.html.</p>
</body>
</html>
解决冲突
svn resolve --accept [base | working | mine-conflict | theirs-conflict | mine-full | theirs-full] [conflicting file]
base 将[your_file].merge-left.[version]做为最终结果
working 把[your_file]解决冲突后的结果做为最终结果
mine-conflict 将[your_file].working做为最终结果
theirs-conflict 将[your_file].merge-right.[version]做为最终结果
mine-full 将所有[your_file].working做为最终结果
theirs-full 将所有[your_file].merge-right.[version]做为最终结果
resolved 告诉服务器冲突已经解决
svn resolved index.html 告诉服务器你的冲突解决了 svn resolved 文件名
lock 锁定
svn lock index.html 锁定index.html 锁定过程中别人无法提交 自己提交后默认会解锁
unlock 解锁
svn unlock index.html 解除锁定 解除后其他人能正常操作
svn ci -m ‘’ --no-unlock index.html 提交后不解除锁定
进阶应用
ls list 列出当前目录下处于版本控制的所有文件
svn ls 列出当前目录下处于版本控制的所有文件 不会列出文件夹下的文件
svn ls --recursive 列出当前目录下处于版本控制的所有文件包括文件夹下子文件
svn ls -v 列出文件的详细信息
svn ls -v --recursive 递归列出文件和文件夹下的子文件的详细信息
st status 列出工作副本中的文件(夹)的状态
svn st 列出工作副本中的文件(夹)的状态
例:
? test.html
参数:
? 无版本控制
D 已被标记从版本库中删除
M 已经被编辑过
A 已被标记增加到版本控制中
R 文件被替换
C 文件存在冲突
! 文件缺失
log 查看提交日志(来自svn ci 的 -m 参数)
svn log 列出版本更新记录 以及备注信息
svn log index.html 只列出index.html 的版本更新记录
info 工作副本及文件(夹)的详细信息
svn info 查看工作副本及文件(夹)的详细信息
svn info index.html 只查看index.html的详细信息
svn info --xml 查看工作副本及文件(夹)的详细信息以xml格式显示
多版本库解决办法
1. 指定端口号例:
svnserve -d -r /svnroot/hello --listen-port 3691 启动时指定端口号
svn co svn://127.0.0.1:3691 连接时指定端口号
2. 创建版本库父级
svnserve -d -r /svnroot/ 启动版本库指定父级目录
svn co svn://127.0.0.1/imooc 连接时指定版本库文件夹 进行连接
cp copy 复制命令
本地->本地
svn cp index.html cpindex.html 复制并上传到版本库
svn cp -r 4 index.html index4.html 复制版本4的文件到版本库
本地->版本库
svn cp index.html svn://127.0.0.1/imooc/target1.html -m "copy a file" 直接复制到版本库 不经过本地文件 (不支持跨库操作)
svn cp -r 4 index.html svn://127.0.0.1/imooc/target1.html -m "copy a file" 指定某版本直接复制到版本库 不经过本地文件(不支持跨库操作)
版本库->本地
svn cp svn://127.0.0.1/imooc/index.html demo.html 从版本库中复制文件到本地 并加入版本库
svn cp svn://127.0.0.1/hello/index.html demo2.html 跨版本库复制文件到本地 并加入版本库
版本库->版本库
svn cp svn://127.0.0.1/imooc/ svn://127.0.0.1/imooc/trunk -m "set a trunk" 从版本库赋值到版本库 不能跨版本库 所有只能复制到子目录 主干版本
svn cp svn://127.0.0.1/imooc/ svn://127.0.0.1/imooc/brank -m "set a brank" 从版本库赋值到版本库 不能跨版本库 所有只能复制到子目录 分之版本
推荐 新建版本库时 默认创建上面2个版本库
svn 管理员操作
hooks/ 钩子
start 数据传输开始之前
pre 数据传输之后写入数据之前
post 写入版本库之后
使用方法 赋值一份钩子 去掉.tmpl 在里面写自己的shell脚本
例:
修改文件:post-commit chmod +x post-commit 记得给执行权限
svn info svn://47.93.0.92/imooc --xml >> /usr/local/nginx/html/repo.xml
killall svnserve svnserve -d -r imooc 结束进程 重启svn版本库
丢弃与精简版本库
killall svnserve 停止服务
svnadmin dump /svnroot/imooc/ -r 6:16 > ~/imooc.repo 复制版本库6~16 保存到制定文件 svnadmin dump 服务器路径
svnadmin create /svnroot/newimooc/ 创建版本库
svnadmin load svnroot/newimooc/ < ~/imooc.repo 导入版本库
cp -av /svnroot/imooc/conf/* /svnroot/newimooc/conf/ 复制所有配置文件
rm -rvf /svnroot/imooc 删除版本库
svnserve -d -r /svnroot/ 启动新版本库
svn checkout svn://127.0.0.1/imooc 用户重新检出版本库
版本库迁移
1. 复制版本库第一条到最新一条 然后到新服务器导入 重新运行
2. 打包版本库文件 到新版本库解压运行
svn switch(sw) --relocate svn://127.0.0.1/word svn://127.0.0.1/newword
svn 从入门到放弃
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 【蝴蝶效应】 蝴蝶效应:上个世纪70年代,美国一个名叫洛伦兹的气象学家在解释空气系统理论时说,亚马逊雨林一只蝴蝶...
- 文案收心,让客户找你购买的秘密全在这里.. “别告诉我互联网有多么神奇 也别把它看的难以掌控和错综复杂 那个牛逼的...
- 【业务技能】 1看了红军写的这些标语,我都羞于起标题了 宣传工作做到细致入微 1、标语口号简单直接,冲击力强。 2...