目录
Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据。 这些数据放置在一个中央资料档案库(repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。
如果两个程序员同时修改了同一个文件, SVN 可以合并这两个程序员的改动,实际上SVN管理源代码是以行为单位的,就是说两个程序员只要不是修改了同一行程序,SVN都会自动合并两种修改。如果是同一行,SVN 会提示文件 Conflict, 冲突,需要手动确认。
SVN 分为客户端、服务端,SVNBucket 就是一个 SVN 的服务端,负责托管 SVN 的代码。
我们需要使用 SVN 的客户端来跟服务端打交道。
在 Windows 上,我们推荐使用 TortoiseSVN,可视化的操作界面,集成右键菜单,非常方便。
也叫乌龟SVN,是当前 Windows 上最流行的 SVN 客户端,没有基础的人也能快速的学会
如果你还没有 TortoiseSVN 可以查看 TortoiseSVN安装和汉化教程
更多其他 SVN客户端下载
下面我们就以 TortoiseSVN 作为客户端来讲解如何使用,服务端我们使用 SVNBucket
SVN Chekout...
右键 SVN Update 更新代码,这样就能把其他人提交的代码同步到自己电脑上了
提交代码也很简单,右键SVN Commit...
,填入提交描述,就可以把本地提交的代码提交到服务器了。
在提交代码前我们应该update
下代码,这是个好习惯,可以避免覆盖别人的代码和代码冲突。
有时候某些目录或者文件我们不想提交到 SVN 服务器,这时我们可以忽略这些文件。
下面演示忽略 temp 目录和 *.map 文件
撤销忽略,文件的操作方式步骤是一样的,目录的有点不一样,请看下面演示
有时候我们本地修改了一些文件,但是突然又不需要了,想丢弃本地的修改回去SVN上最新的版本怎么操作呢?
右键选中需要撤销的文件,TortoiseSVN->Revert 就可以丢弃本地修改了。
已经提交到SVN仓库的代码发现改错了,还能后悔撤回吗?
Revert to this version
,这样就回去了指定的版本commit
下撤销后的代码到SVN仓库我们建议每个仓库的根目录都创建trunk、branches、tags目录,这是经典的 SVN 目录结构,方便开发和维护
个人比较喜欢的开发模式是,开发时都在trunk
写代码,上线产品后就创建分支到branches
目录,线上版本出问题了,我们应该在对应的分支上进行修复,并且把修复后的代码合并到主干上。
以上面的目录结构为例子,我们从当前主干创建一个分支出去,表示1.0版本,操作步骤如下:
/branches/online1.0
,填写注释,选择最用最新的版本开分支,如下:假设我们在分支上修复了一个线上的BUG,需要把代码那个代码合并到主干来,操作步骤:
show log
merge revision to ...
SVN 的这个指定提交记录合并功能非常的方便,我们日常中经常会遇到线上出问题需要修复,修复后把代码合并到主干的情况。
注意:你在分支上的什么目录点击合并,那就需要定位到主干的对应目录合并,不然会出错。
另外如果你有大量的代码需要合并或者不知道哪些提交记录需要合并,可以使用Beyond Compare
来进行对比合并,也是非常方便的,视频教程使用BeyondCompare做复杂代码合并。
右键TortoiseSVN => Switch => 选择需要切换的分支,点击确定就可以了
如果您的仓库地址变了,是不是需要重新checkout一份代码呢?
快速更换:右键点击仓库根目录 => TortoiseSVN => relocate,修改仓库地址,点击确定后就修改好了
如果还有不明白的地方,你还可以查看 SVN 视频教程
这个命令会把 SVN 服务器上的代码下载到我们电脑上,checkout 也可以简写为 co
svn checkout svn://svnbucket.com/xxx/xxx # 指定存储目录 svn checkout svn://svnbucket.com/xxx/xxx save-dir # 指定用户名密码。 svn checkout svn://svnbucket.com/xxx/xxx --username xxxx --password xxx |
此命令可以把我们本地的修改提交到 SVN 服务器,这样其他同事就能更新到我们的代码了。
commit 可以简写为 ci,-m 参数后面跟的是本次提交的描述内容
# 描述是必须的,但是可以填写空字符串,不指定 svn commit -m "提交描述" # 只提交指定文件或目录 svn commit /path/to/file-or-dir -m "提交指定文件" # 指定后缀的所有文件 svn commit *.js -m "提交所有 js 文件" |
执行此命令后会把其他人提交的代码从 SVN 服务器更新到我们自己电脑上,update 也可以简写为 up
# 更新到最新 svn update # 更新到指定版本的代码。特别是最新版本代码有问题时,我们可以用这个命令回到之前的版本 svn update -r xxx # 仅更新指定文件或者目录 svn up /path/to/file-or-dir |
新建的文件,我们需要用 add 命令把它们加入 SVN 的版本管理,然后我们才可以提交它。
注意:添加后还需要进行提交喔。
# 添加指定文件或目录 svn add /path/to/file-or-dir # 添加当前目录下所有 php 文件 svn add *.php |
此命令会从 SVN 移除版本控制,移除后你需要提交一下
svn delete /path/to/file-or-dir # 删除版本控制,但是本地依旧保留文件 svn delete /path/to/file-or-dir --keep-local |
# 查看当前目录的日志 svn log # 查看指定文件或目录的提交日志 svn log /path/to/file-or-dir # 查看日志,并且输出变动的文件列表 svn log -v # 限定只输出最新的 5 条日志 svn log -l 5 |
# 查看当前工作区的改动 svn diff # 查看指定文件或目录的改动 svn diff /path/to/file-or-dir # 本地文件跟指定版本号比较差异 svn diff /path/to/file-or-dir -r xxx # 指定版本号比较差异 svn diff /path/to/file-or-dir -r 1:2 |
# 撤销文件的本地修改 svn revert test.php # 递归撤销目录中的本地修改 svn revert -R /path/to/dir |
SVN 的忽略是通过设置目录的属性 prop 来实现的,添加后会有一个目录属性变动的修改需要提交,记得要提交一下喔,这样其他人也有了这个忽略配置。
# 忽略所有 log 文件。注意最后有个点号,表示在当前目录设置忽略属性。 svn propset svn:ignore "*.log" . # 递归忽略 global-ignores svn propset svn:global-ignores "*.log" . # 从文件读取忽略规则,一行一个规则。 svn propset svn:ignore -F filename.txt . # 打开编辑器修改忽略属性 svn propedit svn:ignore . # 查看当前目录的属性配置 svn proplist . -v # 删除当前目录的忽略设置 svn propdel svn:ignore . |
忽略仅对还未添加到版本库的文件生效,已经在版本库里的文件,添加忽略后是不会自动删除的也不会忽略,需要手动 delete 命令删除下才行。
TortoiseSVN 添加忽略会更加简单,也会自动执行删除命令。
任何时候,你可以用下面的命令查看当前工作目录的 SVN 状态喔,会列出来哪些文件有变动。
svn status svn status /path/to/file-or-dir #也可以简写为 svn st |
这个命令我们经常在 SVN 出现报错时可以执行一下,这样就会清理掉本地的一些缓存
svn cleanup |
svn info |
svn ls # 指定版本号 svn ls -r 100 |
# 查看指定版本的文件内容,不加版本号就是查看最新版本的 svn cat test.py -r 2 |
显示文件的每一行最后是谁修改的(出了BUG,经常用来查这段代码是谁改的)
svn blame filename.php |
如果你的 SVN 地址变了,不需要重新 checkout 代码,只需要这样重定向一下就可以了。
svn switch --relocate 原 SVN 地址 新 SVN 地址 |
# 创建分支,从主干 trunk 创建一个分支保存到 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 switch svn://svnbucket.com/test/branches/online1.0 # 删除分支 svn rm http://svnbucket.com/repos/branches/online1.0 |
# 查看SVN帮助 svn help # 查看指定命令的帮助信息 svn help commit |
参考文章:
https://www.runoob.com/svn/svn-intro.html
文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr
文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc
文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8
文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束
文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求
文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname
文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立
文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码
文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词
文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限
文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定
文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland