使用命令行操作svn

简介: 使用命令行操作svn

因为项目使用了Jenkins构建,要将构建结果通过svn上传到指定仓库。

所以就必须使用命令行操作svn

检出仓库

svn checkout repo_url desk_path    # 检出到指定的磁盘目录
svn checkout repo_url ./           # 检出到当前工作目录
复制代码

查看仓库信息

svn info
复制代码

添加文件到版本控制

svn add file_fullpath              # 完整的磁盘目录
svn add file_relative_path         # 相对于工作目录
svn add file1 file2 file3 ...      # 添加多个文件
复制代码

如果重复添加会提示

Uncaught Error Error: Command failed with exit code 1: svn add version.json 
svn: warning: W150002: 'version.json' is already under version contr
复制代码

这时候就需要检查下文件的状态svn st file,返回值如下:

  • 空字符串表示和服务器完全同步
  • ?开头表示未在版本控制
  • A开头表示本地已经添加到版本控制中,但是还没有提交
  • M开头表示本地发生了修改

添加文件到版本控制之前,先根据文件状态,再决定是否添加

提交文件

svn commit file1 file2 file3 -m "log" # log测试发现不支持空格
复制代码

如果文件没有发生变化,也是可以提交的,svn会自动过滤掉无须提交的文件

file1必须是本地文件,也就是svn的工作目录必须是一个有效的仓库

svn commit -m "将1.json提交到远程仓库" ./1.json http://192.168.1.39:8080/svn/1.json
svn: E205000: Try 'svn help commit' for more information
svn: E205000: Commit targets must be local paths
svn: E205000: 'http://192.168.1.39:8080/svn/1.json' is not a local path
复制代码

提交文件到指定目录

如果要导入指定文件到指定的SVN目录 可以使用import指令

svn import                  [PATH]     URL
svn import -m "import_file" ./1.json   svn_repo/1.json  # 文件对文件
svn import -m "import_dir"  ./dir      svn_repo/dir     # 目录对目录
复制代码
  • 如果PATH是文件,会在仓库中创建相同的文件
  • 如果PATH是目录,会将目录中的所有内容提交到URL

如果版本库中存在该文件,再次import会触发错误E160020

导出

usage: 1. export [-r REV] URL[@PEGREV] [PATH]
       2. export [-r REV] PATH1[@PEGREV] [PATH2]
复制代码
  1. URL指定的仓库中导出一个干净的目录树到PATH,默认导出到HEAD版本,也可以手动指定导出REV版本。如果省略PATH,本地目录名为URL的最后一段目录。
  2. PATH1REV版本导出到PATH2中,如果不指明REV,则会使用PATH1的本地最高版本。 如果省略了PATH2,本地目录名会使用PATH1的最后一级目录。 如果不指明REV,本地所有的修改将会保留。 不在版本控制的文件不会复制。

如果指定,PEGREV将确定目标首先在哪个修订中 抬起头来。

SVN错误码

错误码 原因
205007 提交代码的时候缺少日志,加上-m参数即可
E160020 文件已经存在仓库,

svn: E155036: The working copy at is too old

2018 VisualSVN 3.8

.svn/format svn version
7 svn1.3
8 svn1.4
9 svn1.5
从1.6开始使用entries
.svn/entries svn version
--- ---
10 svn1.6
12 svn1.7
svn: E155036: Please see the 'svn upgrade' command
svn: E155036: The working copy at ''is too old (format 8) to
work with client version '1.13.0 (r1867053)' (expects format 31).
You need to upgrade the working copy first.
复制代码

Jenkins subversion使用的format是8,是一个很老的版本,

发现每个目录下都有.svn文件,这个目录结构是svn1.6及其以下版本检出时的结构。

很明显,Jenkins内置的svn版本低于1.6,而system安装的svn版本是1.13,使用1.6checkout,再使用1.13操作svn,就会出现这个问题。

去插件管理里面,查看Subversion插件和当前的Jenkins无法匹配

网络异常,图片无法展示
|

没办法,Jenkins不敢动,暂时就这样吧,手动svn upgrade`下就行了

subversion的参数

Repository depth : 检出和更新命令的深度选项。默认值为无穷大infinity。

  • empty: 仅包括操作的直接目标,而不包括其任何文件或目录子级。
  • files: 包括操作的直接目标及其任何直接文件子级。
  • immediates: 包括操作的直接目标及其任何直接文件或目录子级。目录子级本身将为空。
  • infinity: 包括直接目标、它的文件和目录子级、它的子级等等,直到完全递归。
  • as-it-is: 从当前工作副本中获取工作深度,所以允许使用--set depth选项手动设置更新深度。

Check-out Strategy: 检出策略

Use 'svn update' as much as possible:

尽可能使用“svn update”,使构建速度更快。但这会导致在新的构建开始时,来自先前构建的工件仍然保留。

Always check out a fresh copy

首先删除所有内容,然后执行“svn checkout”。虽然这需要时间来执行,但它可以确保工作区处于原始状态。

Do not touch working copy, it is updated by other script

此选项允许使用本机svn客户端来更新工作副本,以避免javasvn客户端速度慢。使用“pre-scm buildstep”插件更新工作副本。

Emulate clean checkout by first deleting unversioned/ignored files, then 'svn update'

Jenkins将首先删除所有未版本化/修改的文件/目录,以及“svn:ignore”忽略的文件/文件夹,然后执行“svn update”。这模拟了新的检出行为,而无需完全检出。

Use 'svn update' as much as possible, with 'svn revert' before update

在执行“svn更新”之前,请执行“svn-revert”。这会稍微减慢构建速度,但这会防止文件被构建修改。

总结

想要将文件提交到其他仓库,最灵活的做法:

  • 新建一个目录
  • 把目标仓库检出到目录
  • 执行update更新仓库
  • 把修改的文件copy到目录
  • 执行svn add操作
  • 执行svn commit 操作



目录
相关文章
|
22天前
|
数据安全/隐私保护 Windows
svn篇1:svn下载安装
svn篇1:svn下载安装
|
9月前
|
数据可视化 测试技术 PHP
SVN常用命令、TortoiseSVN使用详解
SVN常用命令、TortoiseSVN使用详解
213 0
|
12月前
|
存储 开发工具 数据安全/隐私保护
Liunx安装Git并配置免密拉取
Liunx安装Git并配置免密拉取
139 0
|
Linux
SVN 常用命令
检查 svn 是否已安装 安装好后 输入 svn --version 检查 svn --version 请在任何不清楚的时候使用 svn help 查看帮助 svn help 查看对应命令的帮助文档 svn help <subcommand> svn基本操作 版本库下的文件和目录列表 **查看项目 list (ls) ** 简写:svn ls 用法:svn list path svn list svn://xxx/abc 表示可以在不下载文件到本地目录的情况下来察看目录中的文件 导入操作 import 将源文件夹内容 导入到对应目标文件夹内容。将 demo1 中的所有内容,上传到服务
126 0
|
Linux
Linux安装svn
Linux安装svn
163 0
Linux安装svn
|
PHP 调度 开发工具
svn 命令行使用总结
SVN的全程是subversion,SVN版本控制软件可以解决 协助开发 、远程开发 和 版本回退 三个问题。 SVN是输入C/S服务类软件,有客户端和服务端。
208 0
|
Linux 开发工具 数据安全/隐私保护
|
搜索推荐 Shell vr&ar