SVN 初探
- 什么是SVN?
Apache Subversion 通常被缩写成 SVN,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。
- SVN的下载安装?(window)
下载地址:svn下载
这里讲解 Mac 上操作 SVN, window使用 tortoisesvn 操作 SVN 可以参照这里:tortoisesvn具体操作SVN。
Mac具体操作以及常用终端命令?
注: Mac系统自带SVN所以不需要下载。
- checkout到本地 (远程拉取代码)
svn checkout path(服务器目录)
例:svn checkout svn:192.168.1.1/XXXX
简写:svn co
- 查看当前工作区的状态
svn status
(1)svn status path(目录下的文件和子目录的状态,正常状态不显示)
【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】
(2)svn status -v path(显示文件和子目录状态)
第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
简写:svn st
- 查看文件详细信息
svn info
svn info path
例:svn info test.html
- 查看文件列表,可以指定-r查看,查看指定版本号的文件列表
svn ls
svn ls -r 100
5. 添加文件
svn add file
例:svn add test.html(添加test.html)
- 提交代码
// 更新
svn update [-r] m path
例如:
svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
简写:svn up
*** 跟Git一样,公司协作开发,防止意外,先拉后推。***
// 提交
svn commit -m 'add test file' test.html
简写:svn ci
- 查看日志信息
svn log path
例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化
8. 删除文件
svn delete path -m "delete test file"
例如:svn delete svn://192.168.1.1/pro/domain/test.php -m "delete test file"
或者直接svn delete test.php 然后再svn ci -m 'delete test file',推荐使用这种
简写:svn (del, remove, rm)
- 比较差异
svn diff path(将修改的文件与基础版本比较)
例如:svn diff test.php
svn diff -r m:n path(对版本m和版本n比较差异)
例如:svn diff -r 200:201 test.php
简写:svn di
- 将两个版本之间的差异合并到当前文件
svn merge -r m:n path
例如:svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)
- 回滚(恢复本地修改)
revert PATH…
取消所有的本地编辑。
恢复一整个目录的文件,可以使用--depth=infinity选项
注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复被删除的目录
- 切换当前项目到指定分支
服务器上更新新版本我们经常就用这个命令来把当前代码切换到新的分支
svn switch svn://svnbucket.com/test/branches/online1.0
- 解决冲突
svn resolved PATH…
移除工作副本的目录或文件的“冲突”状态。
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的相关文件,然后让 PATH 可以再次提交。
- 重定向仓库地址到新地址
svn switch --relocate 原svn地址 新svn地址
- 创建分支,从主干创建一个分支保存到branches/online1.0
svn cp -m "描述内容" http://svnbucket.com/xxxx http://svnbucket.com/xxxx/branches/online1.0
- 合并主干上的最新代码到分支上
cd branches/online1.0
svn merge http://svnbucket.com/xxxx
- 分支合并到主干
svn merge --reintegrate http://svnbucket.com/xxxxx/branches/online1.0
- 删除分支
svn rm http://svnbucket.com/xxxxx/branches/online1.0
- 查看SVN帮助
svn help
# 查看指定命令的帮助信息
svn help commit
- 加锁/解锁
1 svn lock -m “LockMessage“ [--force] PATH
2 例如:svn lock -m “lock test file“ test.php
3 svn unlock PAT
- Mac上面svn通过终端回退版本到某个版本号
- 要回退/回滚版本,有很多版本,这里先介绍用update操作的方法。
(1)首先通过“ls”操作可以查看当前目录的文件。
通过“cd 文件名”操作可以进入到某个文件夹,文件夹输入一部分后,如果是唯一的,则可以按Tab键来补全文件夹名。
进入到使用svn进行版本管理的工程文件夹后。
使用以下语句可以查看当前本地文件的版本号:
svn info
当然查出来的不止是版本号信息了。
使用以下语句进行版本回退:
svn update -r 版本号
这样就可以更新到某个版本,比如要去往版本号为20190925的版本:
svn update -r 20190925
这样就可以开始版本替换了。
在替换过程中,有可能会出现冲突,svn会给出处理的快捷键:
按s可以查看各个快捷键的说明:
我们选择“tf”就可以了,表示全部以服务器的代码为准。
这样就可以回退到相应的版本了。
要回到现在的版本也是一样的操作。
- Mac 上面新建文件夹,提交到SVN远程?
- 在本地修改 添加/新建 了文件夹或者静态资源,如果单纯的 svn up 更新后,直接 svn commit -m " 描述 ",出现问题就是实际上并没有在 远程 SVN上创建成功,或者你可以使用 svn status 查看,如果有 一系列文件列表,并且你会发现你创建的文件夹前面标注[?],说明没有提交成功。如下:
// 解决方法:
svn add 所创建的文件夹名称
标注由[?]变为[A],此时在本地说明创建成功。
然后执行 svn commit -m '描述内容' 出现以下过程,说明文件在远程SVN上面提交成功
Mac上类似 window上的tortoisesvn工具?
- 相对于window上的tortoisesvn可视工具来说,Mac 终端代码不是那么直观,习惯就好了。
SnailSVNLite官网
其实也没必要去官网,App Store就可以。直接搜
- 配置:
- 在Apple Store下载SvnSnail: Lite版本(需输入apple id)
- 打开SnailSVN
- 点击General,打开系统设置(Open System Preference),勾上SnailSVNLite: Finder Extensions
- 点击SVN Settings,选择paths
- 创建.ssh路径,先打开终端Terminal,然后输入 mkdir .ssh,创建完成后就可以paths中选择你刚刚创建的.ssh,再依次选择bin以及6. Applications路径。/Users/xxx/.ssh, /urs/local/bin, /Applications
- 新建一个文件夹svn-workspace作为工作路径
- 点击SnailSVN Lite左上角的File->Svn Checkout,输入SVN的Url,检出项目的路径svn-workspace,点击确定,弹出验证框,输入帐号密码即可。
- 结束
- 另外:
SnailSVN 是最像 TortoiseSVN 小乌龟的 Apache Subversion(SVN)客户端,与 Finder 紧密集成。
SnailSVN 允许你从 Finder 的上下文菜单中快速访问各种最常用的 SVN 功能。
SnailSVN 为 Finder 中的 SVN 工作副本文件添加状态图标,并在文件改动时自动更新状态图标,工作副本中文件的状态一目了然。
安装好以后,需要在“系统偏好设置 » 扩展 » Finder”中启用“SnailSVN 扩展”,才能在Finder里右键菜单看到。