服务器端的安装和配置
apt get install
- 创建代码仓库
cd ~/zz/test_svn
mkdir myCode
svnadmin create myCode
- 配置
zz@ubuntu:~/test_svn/myCode$ tree -L 1
.
├── conf
├── db
├── format
├── hooks
├── locks
└── README.txt
4 directories, 2 files
修改svnserve.conf文件,将下列配置项前面的#和空格都去掉
# 去掉注释
auth-access = write
password-db = passwd
authz-db = authz
# 修改
anon-access = none
修改passwd文件
修改passwd文件,在[users]下面添加账号和密码,如:
[users]
henry = 725
cathy = 111
roger = 121
修改authz文件,配置用户组和权限
将不同的用户进行分组,对组中用户进行统一管理
[groups]
topgroup = henry,cathy
[/]
@topgroup = rw
启动服务
zz@ubuntu:~/test_svn$ svnserve -d -r ./myCode/
客户端配置
- 项目代码导入
zz@ubuntu:~/test_svn$ svn import /home/zz/code/train svn://localhost/mycode/prj --username=henry --password=725 -m"初始化导入"
Adding /home/zz/code/train/searchTrain.py
Adding /home/zz/code/train/stations.py
Committing transaction...
Committed revision 1.
- 项目代码拉取
sudo svn checkout svn://localhost/mycode/prj /usr/local/svnrep/ --username=cathy --password=111
常用的几个svn的命令
- 拉代码
svn co svn+ssh://xxxxxxx
- 更新
# 更新到最新的版本
svn update
# 更新到某一个版本
svn update -r xxxx
- 查看版本的信息
svn log | less
svn log -v | less
- 查看变更
比如,拉下来一份代码,然后在本地修改了一些,想看一下哪些文件修改了。
svn st
svn st -q
A 新增
D 删除
M 修改
R 替代
C 冲突
I 忽略
? 未添加到版本管理
! 文件丢失
- 还原 revert( 修改过的东西没有提交 commit )
丢弃掉本地的更改
## 还原一个文件
svn revert xxxx.c
## 还原一个目录
svn revert -R xxxx # -R 表示递归
svn revert -R . # 将当前目录下面的修改过的文件丢弃掉
- merge
查看指定版本的文件
svn cat -r 3 readme.md # 查看指定版本文件
- 查看变更
svn diff # 对比当前本地的工作拷贝文件(working copy)和缓存在.svn下的版本库文件的区别
svn diff -rA # 对比当前本地的工作拷贝文件(working copy)和任意版本A的差异
svn diff -rA:B # 对比任意历史版本A和任意历史版本B的差异
- 提交代码
svn commit -m 'xxxxx'
- 查看某个版本提交了哪些文件
svn log -r2138 -v
- 查看某个版本改动的较上一个版本改动了哪些文件
svn diff -c 2138
- 把某个文件还原到历史上的某一个版本
# svn log myfile.py
svn up -r 147 myfile.py
- 查看当前目录下面哪些文件在版本库中
svn list
- svn提交之后回滚
svn已经commit之后,需要回滚
1. 找到自己提交错误的版本号,比如1000
2. svn merge回滚:svn merge -r 10000:9999 ./
svn 冲突的时候的解决办法
冲突的原因:
在update 到 commit 之间,只要有人commit 同一份文件,那么我的 commit 就会出现冲突,提示 提交不成功。
选择的做法有:
选择: (p) 推迟,(df) 显示全部差异,(e) 编辑,
(mc) 我的版本, (tc) 他人的版本,
(s) 显示全部选项:
如果选择p:
test.php.mine test.php.r123 test.php test.php.r107
.mine 是我的修改,尚未update前的 test.php。
.r107 是别人提交前的版本,尚未导致冲突的版本。
.r123 是别人提交后的版本,导致冲突的版本。
# 文件冲突原因:
当两个或者两个以上开发人员同时修改一个文件的同一个地方,就会出现冲突
# eg:
A和B两位工程师,版本库最新版本为10,A和B checkout,版本都是10,没问题
A 修改文件test的第一行为 A,然后提交到版本库,没问题,此时版本号已经是11了
B 修改文件test的第一行为 B, 然后提交到版本库,svn提示需要更新本地工作区副本至最新版本11
然后B执行 svn update , 又报错,提示文件冲突,需要手动解决,选择p
这时候工作区出现了4个文件
test test.mine test.r10 test.r11
test 冲突后的文件,主要就是手动修改此文件就行
test.mine B修改后的文件test
test.r10 B提交前的版本,也就是没有导致冲突的版本
test.r11 A提交后的版本,就是A修改的文件test, 导致冲突
## 分两种情况
1. A和B讨论后,决定保留A的修改,放弃B的修改:
svn resolve --accept theirs-full test
svn ci -m '保留A的更改'
1. A和B讨论后,决定保留B的修改,放弃A的修改:
svn resolve --accept working test
svn ci -m '保留B的修改'
# svn resolve 用法
svn resolve --accept base FILE/DIR # 保留test.r10
svn resolve --accept working FILE/DIR # 保留test
svn resolve --accept mine-full FILE/DIR # 保留test.mine
svn resolve --accept theirs-full FILE/DIR # 保留test.r11
svn resolve --accept mine-conflict FILE/DIR # 冲突部分以test.mine的为准
svn resolve --accept theirs-conflict FILE/DIR # 冲突部分以test.r11的为准
参考:
-
svn 配置 https://blog.csdn.net/tojohnonly/article/details/79765583
-
svn 命令 https://blog.csdn.net/yangzhongxuan/article/details/7018168
-
一个不错的svn教程 : https://www.zfl9.com/svn.html#more
svn log 可不读
svn: E220001: Item is not readable
解决 : https://blog.csdn.net/test1280/article/details/71022915
网友评论