重新写一篇,发现svn有了中文版教程,一下兴致就上头。正好新项目要搭建svn环境,开一篇复习复习。发誓一定写完整!


真正开始搭建才发现上面链接里的教程并没什么用,因为需要搭建版本库使用的系统是ubuntu,而上面的教程是基于windows系统

环境与依赖

系统:Ubuntu 18.04

使用HTTP协议访问SVN存储库需要安装:Apache 2

使用HTTPS协议访问SVN存储库需要安装:Apache 2 + OpenSSL

SVN简介

不同于GitHub,SVN版本控制使用集中式的管理方法,需要一台主机作为中心服务器。因此一般会使用服务器作为中心主机,在中心主机上搭建版本库,其他主机从中心主机上拉取代码,修改,并上传修改后的代码到中心主机。

SVN安装

sudo apt install subversion

svn版本库用户命令简要

svn命令由svn+子命令+选项+参数构成,大部分子命令都会以文件或者文件夹作为参数,并且对文件夹中的文件递归执行命令。因此如果子命令中没有提供参数,svn默认在当前目录(包括当前目录)递归执行命令

下面的内容只是非常简要地指出了命令的大概操作,具体使用细节请直接svn 命令 --help查看。

svn --help:查看帮助

svn checkout:从版本库中导出工作副本

svn update/up:将版本库的修改合并到工作副本中,一般是在commit前先update一下

svn add PATH:添加文件/文件夹到版本控制,此时未上传至服务器

svn commit [PATH]:提交添加的文件/文件夹到服务器,服务器会生成一个更新的代码版本

svn export:导出一个无版本控制的文件副本,需要指定导出版本

svn import:将未纳入版本控制的文件提交到版本

svn list/ls:列出版本库中的目录内容

svn cleanup [PATH]:递归清理工作副本,移除写锁,恢复未完成的操作等

svn copy/cp:从仓库或当前工作文档中拷贝文件或目录

svn delete/del/remove/rm:从版本库中删除文件和目录

svn diff:显示两个修改或路径之间的本地更改或差异

svn info:显示有关本地或远程项目的信息

svn lock:锁定版本库中的路径,使得其他用户不能向其提交修改

svn unlock:解除工作副本或URL的锁定

svn merge:合并多个修改到一个工作副本中

svn mkdir:创建纳入版本控制的新目录

svn move/mv/rename/ren:移动/重命名工作副本或仓库中的项目

svn upgrade:升级工作副本的元数据存储格式

svn status:显示本地修改的文件列表

svn auth

svn log

svn mergeinfo

svn patch

svn propdel

svn propedit

svn propget

svn proplist

svn propset

svn relocate

svn resolve

svn resolved

svn revert

svn switch

svn blame/praise/annotate/ann

svn changelist

svn cat

svn版本库管理者命令简要

版本库管理者使用命令是svnadmin 子命令 路径 参数,与svn使用者的命令不同,注意区分

svnadmin crashtest:在 REPOS_PATH 打开存储库,然后中止,从而模拟在持有打开的存储库句柄时崩溃的进程

svnadmin create:创建一个新的,空的仓库

svnadmin dump:将文件系统的内容以“dumpfile”可移植格式转储到标准输出,向标准错误发送反馈

svnadmin hotcopy:热拷贝(?hot copy)一个仓库

svnadmin info:打印仓库信息

svnadmin load:加载dump后的文件,并作为一个新的修订到文件系统中。如果仓库之前是空的,那么UUID将会默认改成文件中的第一个;如果指定了 --revision,则将加载的修订限制为仅转储流中修订号与指定范围匹配的修订

svnadmin lock:通过 USERNAME 设置 COMMENT-FILE 中的注释来锁定 PATH

svnadmin lslocks:打印所有锁的描述

svnadmin lstxns:打印所有未提交事务的名称

svnadmin pack:将版本库压缩为更搞笑的存储模型

svnadmin recover:在存储库上运行恢复过程

svnadmin rmlocks:无条件移除已锁仓库上的锁

svnadmin rmtxns:删除事务

svnadmin setuuid:重设仓库的UUID

svnadmin unlock:在验证与锁关联的令牌与 TOKEN 匹配后,解锁锁

svnadmin upgrade:将存储库升级到支持的最新架构的版本

svnadmin verify:确认仓库中存储的数据

svnadmin setrevprop

svnadmin setlogs

svnadmin list-unused-dblogs

svnadmin list-dblogs

svnadmin freeze

svnadmin deltify

svnadmin delrevprop

搭建版本库

创建svn用户组

  1. 查看当前组:sudo cat /etc/group
  2. 创建svn组:sudo groupadd -g 666 svn,其中666是可以任意设置,不重复就好
  3. 查看组内成员:members svn
  4. 查询当前用户:whoami
  5. 查询所有用户信息:cat /etc/passwd,shadow是密码文件;以冒号分割;从左到右含义分别是:用户名:密码占位符(x 表示用户需要密码登录):用户标识号(UID):组标识号(GID):注释性描述:主目录:登录的 shell
  6. 添加当前户到组:sudo gpasswd -a sysadmin svn
  7. 添加www-data用户到组:sudo gpasswd -a www-data svn

创建svn项目文件夹

一般会在/srv/svn、/usr/local/svn、/home/svn等地方创建svn文件,然后在svn文件夹内创建项目文件夹,不同项目建立不同的文件夹,但均放在svn文件夹下;在这里创建的svn文件夹,里面包含的各个项目的文件夹并没有存储代码文件,而是存储的存储了历史版本代码的封装文件

如果问,如何在服务器上修改和编辑实体代码,并上传到版本库,那么你可以在服务器任何一个你想存放代码的位置,使用svn从版本库中拉取代码即可,即在服务器上拉取服务器存储的代码

创建svn仓库

sudo svnadmin create 项目文件夹绝对路径

执行该命令后项目文件夹会有一些svn自带的文件和文件夹,

更正文件夹限权

sudo chown -R www-data:svn 项目文件夹
sudo chmod -R g+rws 项目文件夹

添加原始代码

在做完上面的工作后,版本控制库已经建立完毕

如果想在服务器做到像远程主机那样修改、提交代码,或者想添加一份原始代码到服务器,那么服务器和远程主机均可以,只是服务器拉取版本库代码跟远程拉取的命令不同

一个在服务器本地提交代码的例子

  • 假设
    假设服务器上的版本库中没有代码

  • 流程

    1. 在一个你期望存放代码的地方打开终端
    2. 使用本地拉取命令:sudo checkout file:///absolute/path/of/your/project/in/svn/folder,此时从svn文件夹下拷贝了一个工作副本
    3. 将代码复制粘贴进2生成的文件夹
    4. 执行svn add *添加文件
    5. 执行svn commit -m "first time add code, this is version 1",即可在服务器上将代码提交到服务器的版本库

一个在远程主机提交代码的例子

  • 假设
    假设服务器上的版本库中没有代码

  • 流程

    1. 在一个你期望存放代码的地方打开终端
    2. 使用远程访问命令:svn checkout svn+ssh://username@hostname/absolute/path/of/your/project/in/svn/folder,此时从svn文件夹下拷贝了一个工作副本
    3. 将代码复制粘贴进2生成的文件夹
    4. 执行svn add *添加文件
    5. 执行svn commit -m "first time add code, this is version 1",即可在远程主机上将代码提交到服务器的版本库

访问方法

上面是在存放版本库的服务器搭建仓库,下面是其他主机访问服务器的方法。访问方法一共有五种:

  • 本地访问:一般是在服务器上自身访问自己
  • http访问
  • https访问
  • svn访问
  • svn+ssh访问

在这里只讲svn+ssh的访问方法,其他方法的细节见参考链接的第一条。

本机直接访问

该方法只用于访问来自同一台机器(服务器自己访问自己)的svn,在版本库搭建好后,在期望存放代码的地方直接打开终端,使用下面的命令,即可拉取代码:

svn checkout file:///absolute/path/to/your/project
svn checkout file://localhost/absolute/path/to/your/project

上面两个命令的区别在于file冒号后的斜杠(/)数量,使用///就不需要再加上主机名,使用//则需要加上主机名

svn+ssh访问

使用该方法的前提是能够在终端中使用ssh远程登录服务器。如果满足上面的条件,则

  1. 先在本地主机中新建一个存放项目副本的文件夹
  2. svn checkout svn+ssh://username@hostname/absolute/path/to/your/project projectName

即可拉取远程服务器上的文件/文件夹到本机,后续修改后,直接add+commit提交到远程服务器即可

参考链接

SVN on Linux
HTTP和HTTPS的区别

「SVN」Ubuntu 版本库搭建+使用 完整教程相关推荐

  1. 「SVN」ubuntu svn自动忽略了.a.so等文件

    问题描述 系统:Ubuntu 18.04 直接使用命令svn add *添加代码到版本库,commit后才发现.a .so的文件没有添加上去,导致编译项目代码的时候编译不通过 解决办法 在home目录 ...

  2. VisualSVN Server版本库搭建

    VisualSVN Server版本库搭建 VisualsvnServer用途: 软件开发公司的代码是公司的核心,是公司最需要保护的文件资源,为了防止公司代码的泄露,放到公网的免费版本控制服务器商虽然 ...

  3. 「SVN」svn:将服务器关闭后报错Unable to connect to a repository at URL xxx

    问题描述 系统:ubuntu 18.04 在服务器上搭建了版本库,关闭服务器后,再次使用svn list命令后报了标题的错,报错截图如下: 解决流程 哦很快就找到了,原因是我删了svn里的一个文件: ...

  4. 「SVN」Linux下svn使用命令

    原文链接:https://blog.csdn.net/return9/article/details/89042359 Window下SVN安装以及使用 TortoiseSVN下载:https://w ...

  5. 「Caffe」python版本caffe编译

    参考链接: 深度学习文章1:Caffe安装教程:Ubuntu16.04(CPU) 环境 系统:Ubuntu 18.04 python版本:3.6.9,来自pycharm基于系统python3自建的虚拟 ...

  6. 「3」Java开发环境搭建

    1.JRE和JDK的概念 ●什么是JRE和JDK? ●JRE(Java Runtime Environment-Java运行环境).所有的Java程序都要在JRE下才能运行.它包括了JVM(Java ...

  7. 「Python」ubuntu使用make命令安装python(带详细解释和防坑指南)

    1. 从官网下载Python包 官网链接:Python 从上面链接选择一个python版本,下载压缩包 2. 解压Python压缩包 随便解压在什么位置,因为最终会安装在另一个目录,所以解压的文件夹随 ...

  8. 一个「神奇」的Python库,99%的人都爱!

    背景介绍 今天介绍Python中一个超级神奇的库,99%人用过都喜欢它,剩下的1%没用过! 在如今的大数据时代,数据的价值可想而知.有时候为了做测试,需要模拟真实的环境,但是又不能直接使用真实数据,就 ...

  9. ubuntu 局域网dns服务器_「bind9」ubuntu下配置bind9为局域网的DNS服务器 - seo实验室...

    bind9 一.配置bind9服务器之前,先了解这些知识点: 1.DNS解析过程详解:http://www.cnblogs.com/liyuanhong/articles/7353974.html 2 ...

最新文章

  1. 解决国内GitHub加载慢的问题
  2. mysql连接编程环境_C++连接MySQL(一):环境配置和实例
  3. 重复制造业之成本核算
  4. Intellij IDEA 新建一个EJB工程(三)
  5. 手机做服务器性能咋样,服务器性能不足 怎样才能逼出最强状态
  6. binlog数据库不写入binlog_京东智联云MySQL数据库如何保障数据的可靠性?
  7. 《网络攻防实践》 课程教学
  8. python3.7操作kafka_python操作kafka
  9. java 十进制与二进制,八进制,十六进制之间的转换
  10. 190809每日一次
  11. 自控原理学习笔记-反馈控制系统动态模型(2)-结构图及信号流图
  12. 企业报表系统搭建很难?其实选对工具就成功了一半
  13. 小朋友Stem课程制作3D打印无人机
  14. 16天记住7000考研单词
  15. 优秀后端架构师必会知识:史上最全MySQL大表优化方案总结...
  16. [CC2642r1] ble5 stacks 蓝牙协议栈 介绍和理解 TI协议栈下载
  17. Android集成GMS服务及GMS认证方案
  18. VINS fusion软件架构分析(4)---后端处理processMeasurements()功能函数概览
  19. java网络程序设计 聊天室之私聊、群聊和清屏功能的实现
  20. Redis 之 subscribe 订阅模式封装

热门文章

  1. linux ps mp,Linux中的命令ps(ps -aux)
  2. 数据库系统概论期末复习以及知识整理
  3. Java8 EnumMap 源码分析
  4. wxWidgets:wxInitDialogEvent类用法
  5. boost::statechart模块测量 BitMachine 的事件处理性能的测试程序
  6. boost::proto模块实现构建算术表达式的简单示例 带有占位符的评估器的测试程序
  7. boost::geometry模块实现显示不同类型的点的测试程序
  8. boost::coroutine2模块实现协程的测试程序
  9. GDCM:gdcm::LTComp的测试程序
  10. GDCM:模板空白图片的测试程序