svn常用指令

187 阅读4分钟

前言

平时开发大家一般都是用的git、sourcetree,分布式的架构,以及非常便利免费的工具,非常受大家青睐,但是也有的项目组比较老,他们的技术可能还是使用的svn仓库管理,有时候难免要使用到,这时候我们要不就下载svn工具,例如:cornerstone,要不就使用命令行(当然比较推荐工具),但也要熟悉svn,毕竟如果有时候自己要部署代码到服务器的时候,可能还是使用命令更多哈

svn 也有比较常用的工具,例如:cornerstone,但本人不经常用,只是某些项目合作需要用到,之前用破解版,更新完电脑之后安装不上去了(😅),试用版本特殊时候凑合用着也行,平时就用命令就行了

svn常用指令

拉取svn仓库,直接复制我们的仓库名字就行了,无论是 svn、http开头都没问题

# checkout代码
svn co svn://svnbucket.com/xxx/xxx

大多仓库为了安全是需要账号密码的,我们在我们的指令后、仓库名前指定我们的用户名密码即可

svn co --username username --password password url

从远端拉取更新代码

# 更新代码
svn up 

添加文件,可以将我们修改的文件添加进去,单独用的比较少

# 添加新文件到版本库
svn add filename

# 添加当前目录下所有php文件
svn add *.php

递归添加当前目录下的所有新文件(只能添加和修改,对于删除则无效),常用

//添加功能默认会忽略文件夹,因此要加上一系列后缀
svn add . --no-ignore --force  //添加所有文件,包括新创建的文件夹 推荐使用

提交到远端

# 提交代码
svn commit -m "提交描述" 

除了添加和修改,有时也会用到删除,需要主动 delete 才算是提交了删除更新,

# 删除指定文件(文件只能手动删除指定路径文件/文件夹,删除后在commit即可)
svn delete page/login

svn delete page/login --force //有时候需要强制删除

查看某个文件或者某个版本log

# 查看log
svn log
# 查看指定文件的所有log
svn log test.php
# 查看指定版本号的log
svn log -r 100 

撤销更改,慎用

# 撤销本地文件的修改(还没提交的)
svn revert test.php
svn revert -r 目录名
# 撤销目录下所有本地修改
svn revert --recursive 目录名 

查看当前工作区的更新了哪些代码

# 查看当前工作区的所有改动
svn diff

# 查看当前工作区test.php文件与最新版本的差异
svn diff test.php  

# 指定版本号比较差异
svn diff -r 200:201 test.php

# 查看当前工作区和版本301中bin目录的差异
svn diff -r 301 bin 
# 显示文件的每一行最后是谁修改的(出了BUG,经常用来查这段代码是谁改的)
svn blame filename.php
# 查看指定版本的文件内容,不加版本号就是查看最新版本的
svn cat test.py -r 2

查看那些文件更新了

# 查看当前工作区的状态
svn status

查看svn信息

# 查看svn信息
svn info

查看文件列表

# 查看文件列表,可以指定-r查看,查看指定版本号的文件列表
svn ls 
svn ls -r 100

清理文件锁定,用的不多,当你有些操作失败,不妨尝试一下

# 清理
svn cleanup

分支管理

# 切换当前项目到指定分支。服务器上更新新版本我们经常就用这个命令来把当前代码切换到新的分支
svn switch svn://svnbucket.com/test/branches/online1.0

# 重定向仓库地址到新地址
svn switch --relocate 原svn地址 新svn地址 

# 创建分支,从主干创建一个分支保存到branches/online1.0
svn cp -m "描述内容" http://svnbucket.com/repos/trunk http://svnbucket.com/repos/branches/online1.0

# 合并主干上的最新代码到分支上
cd branches/online1.0
svn merge http://svnbucket.com/repos/trunk 

# 分支合并到主干
svn merge --reintegrate http://svnbucket.com/repos/branches/online1.0

# 删除分支
svn rm http://svnbucket.com/repos/branches/online1.0 

设置忽略

//直接打开下面用户svn目录文件,找到 gobal-ignores 在里面设置全局忽略即可,仅适用于本机当前用户
~/.subversion/config


创建.svnignore提交后,其他人方可生效,其他人拉取后也可以应用忽略(使用指令不一定有效哈)
在该文件里面填写自己的目录、文件即可,例如文件内这样编写:
test.txt
miniprogram_npm
node_modules
.DS_Store

提交方能生效
svn commit -m "svn-ignores"


其中`pattern`是你想要忽略的文件或文件夹的名称或通配符模式,`TARGET`是目标目录的路径。
svn propset svn:ignore 'pattern' [TARGET]

例如:使用`svn propset`命令设置忽略
svn propset svn:ignore 'test.txt' .

如果要忽略多个文件或文件夹,可以一次设置多个模式,模式之间使用换行符分隔。
svn propset svn:ignore "
test.txt
foldername
" .

设置完`svn:ignore`属性后,需要提交这个属性变更才能生效。
svn commit -m "svn-ignores"

svn帮助相关,如果又忘记指令,可以参考

# 查看SVN帮助
svn help

# 查看指定命令的帮助信息
svn help commit