SVN魔法笔记:工作中不可或缺的命令宝典

简介: SVN魔法笔记:工作中不可或缺的命令宝典

SVN服务端的搭建

CentOS 7 安装SVN服务器端程序

安装命令

yum install -y subversion

验证

svn --version

创建并配置版本库

创建版本库目录

mkdir -p /var/svn/repository

在版本库目录下创建具体项目目录

mkdir helloworld

创建SVN版本库

svnadmin create /var/svn/repository/helloworld

查看效果

  • conf :是这个仓库的配置文件(仓库的用户访问账号、权限等)
  • db :是所有版本控制的数据存放文件
  • hooks :放置hook脚本文件的目录
  • locks :用来放置subversion见艰苦锁定数据的目录,用来追踪存取文件库的客户端

配置SVN的服务

SVN默认的端口是 3690

客户端请求服务器端的 helloworld 项目的URL地址:svn://ip:3690/helloworld

修改服务的配置(将我们创建的版本库交给SVN服务管理)

vim /etc/sysconfig/svnserve

修改路径为你之前创建的版本库根目录

启动SVN的服务

查看SVN服务

systemctl list-unit-files | grep svn

设置开机自启

systemctl enable svnserve.service

启动服务

systemctl start svnserve.service

验证服务是否启动成功

SVN的权限管理

在服务器端的版本库配置文件夹下有三个配置文件

authz :分配权限的配置文件

[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
# 用户组
[groups]
chengdu = user1,user2
beijing = user3
# 针对版本库根目录设置权限
[/]
@beijing = rw
# 设置指定版本库权限
[/helloworld]
@chengdu = rw
user5 = r
# * = 表示除了上述配置权限的用户之外,其他用户没有任何权限
* = 

passwd :设置用户名密码的配置文件

### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.
[users]
user1 = passwd01
user2 = 123456
user3 = abcdefg
user4 = aaaa
user5 = bbbb

svnserve.conf :版本库服务配置文件

### Visit http://subversion.apache.org/ for more information.
[general]
### The anon-access and auth-access options control access to the
### repository for unauthenticated (a.k.a. anonymous) users and
### authenticated users, respectively.
### Valid values are "write", "read", and "none".
### Setting the value to "none" prohibits both reading and writing;
### "read" allows read-only access, and "write" allows complete 
### read/write access to the repository.
### The sample settings below are the defaults and specify that anonymous
### users have read-only access to the repository, while authenticated
### users have read and write access to the repository.
anon-access = none
# 开启授权访问
auth-access = write
### The password-db option controls the location of the password
### database file.  Unless you specify a path starting with a /,
### the file's location is relative to the directory containing
### this configuration file.
### If SASL is enabled (see below), this file will NOT be used.
### Uncomment the line below to use the default password file.
password-db = passwd
### The authz-db option controls the location of the authorization
### rules for path-based access control.  Unless you specify a path
### starting with a /, the file's location is relative to the the
### directory containing this file.  If you don't specify an
### authz-db, no path-based access control is done.
### Uncomment the line below to use the default authorization file.
authz-db = authz
### This option specifies the authentication realm of the repository.
### If two repositories have the same authentication realm, they should
### have the same password database, and vice versa.  The default realm
### is repository's uuid.
# realm = My First Repository
### The force-username-case option causes svnserve to case-normalize
### usernames before comparing them against the authorization rules in the
### authz-db file configured above.  Valid values are "upper" (to upper-
### case the usernames), "lower" (to lowercase the usernames), and
### "none" (to compare usernames as-is without case conversion, which
### is the default behavior).
# force-username-case = none
[sasl]
### This option specifies whether you want to use the Cyrus SASL
### library for authentication. Default is false.
### This section will be ignored if svnserve is not built with Cyrus
### SASL support; to check, run 'svnserve --version' and look for a line
### reading 'Cyrus SASL authentication is available.'
# use-sasl = true
### These options specify the desired strength of the security layer
### that you want SASL to provide. 0 means no encryption, 1 means
### integrity-checking only, values larger than 1 are correlated
### to the effective key length for encryption (e.g. 128 means 128-bit
### encryption). The values below are the defaults.
# min-encryption = 0
# max-encryption = 256

命令行客户端操作SVN

检出 checkout|co

用来完整下载版本库中的全部内容。

svn co svn://47.106.183.193/helloworld ./
# svn在检出的时候可以指定用户名和密码
svn co svn://47.106.183.193/helloworld --username xxx --password yyy ./

工作副本

  • .svn 所在的目录,对于上面示例而言,user1 这个目录就是工作副本
  • 版本控制相关操作都需要在工作副本目录下执行。例如:提交、更新等等
    这样的操作
  • 为了保证工作副本能够正常和服务器进行交互,请不要删除或修改.svn目
    录中的内容

添加 add

SVN要求提交一个新建的文件前先把这个文件添加到版本控制体系中

svn add hello.txt

此时 hello.txt 的状态为 A ,意味着这个文件已经被成功地添加到了版本控制中。如果状态为 ? ,则说明它还未加到版本控制中。

提交 commit|ci

要求1:附加日志信息

  • 日志信息相当于写Java代码时的注释,用来标记本次操作所做的修改
  • svn commit -m “xxx” [文件名]

要求2:必须具备相应的权限

修改服务器的版本库的配置文件 /conf/svnserve.conf ,把匿名访问配置项的注释打开

svn ci -m "第一次提交" hello.txt

提交完之后,版本号自动增加了1。

显示版本的所有信息 log

用来展示svn 的版本作者、日期、路径等等,如果只希望查看特定的某两个版本之间的信息,可以携带 -r 开始版本:结束版本 参数

svn log
svn log -r 开始版本号:结束版本号

查看 list

查看SVN版本库的内容

svn list svn://47.106.183.193/helloworld

更新 update|up

把服务器端文件所产生的所有修改下载到本地

svn up

回退版本 revert

还未提交

当我们想放弃对文件的修改,可以使用 svn revert 命令,将撤销任何文件或目录里的局部更改,revert 操作不单单可以使单个文件恢复原状, 而且可以使整个目录恢复原状。恢复目录需要携带 -R 参数

svn revert 文件名
svn revert -R 目录名

已经提交

对于已经提交的修改,我们需要使用 merge 命令进行回退,同时需要携带 -r 参数

svn merge -r 最新版本号:目标版本号 目录名或文件名

冲突

过时的文件

在一个相对服务器端版本来说是旧版本的基础上进行了修改的文件,这时候如果提交则会失败!

所有过时的文件都必须先执行更新操作,更新后在最新版基础上修改的文件才允许提交。

更新完之后,user1对文件的修改也同步到了user2的工作副本,之后user2就可以正常提交了

冲突的产生

从服务器端更新下来的修改和本地的修改在“同文件同位置”不一致,也就是修改了同一行内容

现在两个用户同时修改了同一行,user2先提交了,这时user1更新时发现冲突

冲突的表现

文件内部

  • <<<<<<<||||||| 是本地修改之后的内容
  • |||||||======= 是修改之前的内容
  • =======>>>>>>> 是服务器端修改的内容

目录内部

由于发生冲突会产生以下三个文件

  • xxx.mine文件 :发生冲突时本地文件内容

  • xxx.r[小版本号]文件 :发生冲突前文件内容

  • xxx.r[大版本号]文件 :发生冲突时服务器端文件内容

手动解决冲突

  1. 删除冲突发生时产生的三个多余文件
  2. 删除冲突文件内多余的符号
  3. 把文件编辑到满意的状态
  4. 提交

半自动解决冲突

  • (p) :推迟,之后手动处理
  • (df) :显示全部差异
  • (e):编辑
  • (m):合并
  • (s):显示全部选项
# 跳过此冲突,稍后解决[推迟]  
  (p)  - skip this conflict and leave it unresolved  [postpone]  
  # 接受整个文件的传入版本[使用版本库里的文件]  
  (tf) - accept incoming version of entire file  [theirs-full]  
  # 拒绝此文件的所有传入更改[使用我自己的文件] 
  (mf) - reject all incoming changes for this file  [mine-full] 
  # 只接受冲突的传入更改  
  (tc) - accept incoming changes only where they conflict  [theirs-conflict]  
  # 拒绝冲突的传入更改并接受其余更改  
  (mc) - reject incoming changes which conflict and accept the rest  [mine-conflict]  
  # 接受工作副本中显示的文件  
  (r)  - accept the file as it appears in the working copy  [working] 
  # 推迟所有剩余冲突  
  (q)  - postpone all remaining conflicts  
  # 在编辑器中更改合并文件  
  (e)  - change merged file in an editor  [edit]  
  # 显示对合并文件所做的所有更改  
  (df) - show all changes made to merged file  
  # 显示所有冲突(忽略合并版本)  
  (dc) - show all conflicts (ignoring merged version)  
  # 使用合并工具解决冲突  
  (m)  - use merge tool to resolve conflict  
  # 启动外部合并工具以解决冲突[启动]  
  (l)  - launch external merge tool to resolve conflict  [launch]  
  # 使用内置的合并工具解决冲突  
  (i)  - use built-in merge tool to resolve conflict

按下 e 进行编辑页面

之后就是和上面一样的步骤,删除掉特殊符号,然后把文件编辑到满意的状态,之后保存退出

按下 r 标记为已解决,之后就可以再次提交了

避免冲突

  • 尽可能在修改文件前先进行更新操作,尽量在最新版基础上修改文件内容
  • 尽量减少多人修改同一个文件的可能性
  • 加强团队成员之间的沟通
相关文章
|
6月前
|
存储 算法 开发工具
git是什么?git的五个命令,git和svn的区别
git是什么?git的五个命令,git和svn的区别
91 0
|
2月前
|
缓存
SVN常用命令
本文汇总了SVN版本控制系统的常用命令,包括代码检出、提交、更新、添加、删除、查看日志、状态、差异比较、撤销修改、忽略设置、清理、查看信息、文件列表、文件内容查看、blame操作、地址重定向以及分支管理等,旨在帮助用户更高效地使用SVN进行代码版本控制。
|
数据安全/隐私保护
svn命令的使用
svn命令的使用
66 0
|
6月前
|
存储 安全 开发工具
快速入门安装及使用&git与svn的区别&常用命令
快速入门安装及使用&git与svn的区别&常用命令
158 0
|
Java Linux PHP
svn在linux下的使用(svn命令)
svn在linux下的使用(svn命令)
156 0
|
数据可视化 测试技术 PHP
SVN常用命令、TortoiseSVN使用详解
SVN常用命令、TortoiseSVN使用详解
349 0
|
Linux 数据安全/隐私保护 iOS开发
Linux下SVN 命令每次都要输入密码
Linux下SVN 命令每次都要输入密码
|
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 中的所有内容,上传到服务
145 0
|
存储 NoSQL 开发工具
为什么互联网巨头们纷纷使用Git而放弃SVN?(内含Git核心命令与原理总结)
最近发现很多小伙伴对于工作中的一些基本工具的使用还不是很了解,比如:Git这个分布式的代码管理仓库,很多小伙伴就不是很了解,或者说不是很熟悉。甚至有些小伙伴都没听说过Git,就只会用个SVN。殊不知,当今各大互联网巨头和新兴起的互联网黑马公司,基本都是用的Git,而基本废弃了对SVN的使用。为什么呢?我们一起往下看。
265 0
为什么互联网巨头们纷纷使用Git而放弃SVN?(内含Git核心命令与原理总结)