项目开发过程中经常会使用代码管理Versions 或者命令行、但是对SVN 命令掌握也不太全,所以利用文档记录一下
克隆代码:svn checkout svn://192.168.1.1/test
简写svn co
svn add file
增加所有文件
svn add . --no-ignore --force
svn commit -m "test"
简写:svn ci
更新到某个版本
svn update -r m path
svn update 如何不增加路径、默认将当前目录以及子目录下的所有文件都更新到最新版本。
svn update -r xxx 将版本库中的文件还原到版本xxx
svn update (更新过程中如果有冲突或者过期,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
简写:svn up
svn add * --force
错误提示:
svn: '/Users/XXX/Desktop/svn/xxxx@2x.png' is scheduled for addition, but is missing
错误原因:
产生问题的原因是有一个文件已经加入到版本库中,但是后来在文件系统中又移除了这个文件,所以不能够提交。
解决方法:
svn revert /Users/XXX/Desktop/svn/xxxx@2x.png
加锁/解锁 处理
svn lock -m ““ [--force] PATH
例如:svn lock -m “lock test file“
svn unlock PATH
查看文件或者目录状态
1)svn status path(查看状态)
?:不在svn的控制中
M:内容被修改
C:发生冲突
A:预定加入到版本库;
K:被锁定
简写:svn st
删除文件
svn delete path -m “delete test fle“
例如:svn delete svn://192.168.1.1/test/ -m “delete test file”
或者直接svn delete
svn ci -m ‘delete test file
简写:svn (del, remove, rm)
查看日志
svn log path
例如:svn log 显示这个文件的所有修改记录,及其版本号的变化
查看文件详细信息
svn info path
例如:svn info
10、比较差异
svn diff path
例如:svn diff
svn diff -r dev1:dev2 path(对版本dev1和版本dev2的差异)
例如:svn diff -r dev1: dev2
简写:svn di
将两个版本之间的差异合并到当前文件
svn merge -r dev1: dev2 path
例如:svn merge -r dev:dev2
SVN 帮助
svn help
svn help ci
版本库下的文件和目录列表
svn list path
显示path目录下的所有属于版本库的文件和目录
简写:svn ls
创建纳入版本控制下的新目录
svn mkdir: 创建纳入版本控制下的新目录。
用法: 1、mkdir PATH…
mkdir URL…
解释说明
创建版本控制的目录。
每一个以工作副本 PATH 指定的目录,都会创建在本地端,
每个以URL指定的目录,都会透过立即提交于仓库中创建。
在这两个情况下,所有的中间目录都必须事先存在。
恢复本地修改(撤消)
svn revert: 恢复原始未改变的工作副本文件
revert:
用法: revert PATH…
注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复
被删除的目录
代码库URL变更
svn switch (sw): 更新工作副本至不同的URL。
用法: 1、switch URL [PATH]
2、switch –relocate FROM TO [PATH...]
更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将
服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的
方法。
改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动
(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用
这个命令更新工作副本与仓库的对应关系。
解决冲突
svn resolved: 移除工作副本的目录或文件的“冲突”状态。
用法: resolved PATH…
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突
输出指定文件或URL的内容。
svn cat 目标[@version]…如果指定了版本,将从指定的版本开始查找。
svn cat -r dev filename > filename (dev 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)
回滚的操作过程如下:
保证我们拿到的是最新代码:
svn update
假设最新版本号是dev1。
然后找出要回滚的确切版本号:
svn log [something]
假设根据svn log日志查出要回滚的版本号是dev2,此处的something可以是文件、目录或整个项目
如果想要更详细的了解情况,可以使用svn diff -r dev1:dev2 [something]
回滚到版本号dev1:
svn merge -r dev2:dev1 something
为了保险起见,再次确认回滚的结果:
svn diff [something]
发现正确无误,提交。
提交回滚:
svn commit -m "Revert revision from rdev2 to dev1,because of ..."
提交后版本变成了dev3。
将以上操作总结为三条如下:
svn update,svn log,找到最新版本(latest revision)
找到自己想要回滚的版本号(rollbak revision)
用svn merge来回滚:svn merge -r : something
批量解决冲突
svn st | grep -v ">" | grep C | awk '{print $2}' | grep -v "+" | xargs svn resolved
查看最近log
svn log | head -n 100