百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

svn 常见场景及使用技巧 svn的使用的全部流程

yuyutoo 2024-10-13 09:12 8 浏览 0 评论

一:提交代码时,注释不允许为空

svn修改提交需要验证:

#cd /home/svn/hk515/hooks

#cp pre-commit.tmpl pre-commit

#chmod 777 pre-commit

修改pre-commit文件

REPOS="$1"

TXN="$2"

# Make sure that the log message contains some text.

SVNLOOK=/usr/bin/svnlook

LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`

if [ "$LOGMSG" -lt 5 ];

then

echo -e "注释信息不能为空且不少于5个字!" 1>&2

exit 1

fi

exit 0

保存即可,这样开发commit代码时不写备注就出错提示上面的信息了

二:svn通过钩子获取提交的文件列表

由于之前做过通过svn的钩子去自动部署项目,这个主要是通过svn up命令来操作 把这个操作命令写在post-commit钩子文件中来达到目的;

但是这样子的过程太过于自动,不能认为的参与,即我提交到了svn版本库那么就自动同步到了web服务器,我现在有个需求就是要捕获所有开发

人员的提交的修改文件的列表 ,然后交由其他控制终端来实现是否要同步到web服务器,这种情况更加适合于同步到测试服务器的情况。由于之间写过

svn的必须写提交信息才能提交成功的钩子,那么这回马上想到了用svnlook命令来处理,但是用什么子命令呢?把svnlook的所有(也不多啦)子命令

看了一遍,觉得可以使用svnlook youngest 和svnlook changed两个命令结合来使用

其实可以不用svnlook youngest的 因为svnlook changed默认的就是当前最新的版本;

直接上代码:

view sourceprint?

REPOS="$1"

TXN="$2"

SVNLOOK=/usr/bin/svnlook

NEW_VER=`$SVNLOOK youngest $REPOS`

$SVNLOOK changed -r $NEW_VER $REPOS > /home/list.txt

#!/bin/bash

export LC_CTYPE="en_US.UTF-8"

REPOS="$1"

TXN="$2"

SVNLOOK=/usr/bin/svnlook

NEW_VER=`$SVNLOOK youngest $REPOS`

$SVNLOOK changed -r $NEW_VER $REPOS > /svndata/changelog/`date +%Y%m%d%H%M%S`_list.txt

exit 0

find . -type d -maxdepth 5 |grep 凯撒文化

三:svn备份

1.脚本

/data/metabak/svnbak.sh

# svn bak shell
mv -i /data/metabak/svnconfig.tar.gz  /data/metabak/svnconfig.tar.gz_yesterday
tar -zcvf /data/metabak/svnconfig.tar.gz /var/www/svnconfig
# svn 仓库
mv -i /data/metabak/svn.tar.gz   /data/metabak/svn.tar.gz_yesterday
tar -zcvf /data/metabak/svn.tar.gz /var/www/svn

2.文件路径

/var/www/svn/

3.httpd

/etc/httpd/

三:svn 权限配置

“*” 是指所有人,“=” 后面为空,表示没有任何权限

连起来就表示所有人没有任何权限

注:

“=”后面有3种情况

空:表示没有任何权限

r:表示只读权限

rw:表示读写权限

如:

* =

user1 = r

user2 = rw

这三行合起来就表示user1这个用户拥有只读权限,user2这个用户拥有读写权限,除此之外的其他人员没有任何权限

四:svn 基本配置

1.auth文件

[groups]

#admin group

admin=ksadmin

#yjwb group

yjwb=yjwb

[/]

@admin=rw

*=

2.passwd文件

[users]

# harry = harryssecret

# sally = sallyssecret

# root

ksadmin=ks@2018admin

#yjwb

yjwb=ks@2018

3.svnserve.conf文件

[general]

anon-access = none

auth-access = write

password-db = passwd

authz-db = authz

realm = kaiser

[sasl]

五:svn增量更新

for i in `cat updatefile.txt`;do echo $i;tar -uf aoa.tgz $i;done

svn diff --summarize -r420:426 /data/aoa_root

svn diff --summarize -r420:426 |awk '{print $2}' >/tmp/updatefile.txt

for i in `cat /tmp/updatefile.txt`;do echo $i;tar -uf ../update/aoafile.tgz $i;done

for i in `cat ../logs/updatefile.txt`;do echo $i;tar -uf ../update/aoa.tgz $i;done

六:一台机器上开启多个不同端口的实例SVN

一台机器上开启多个不同端口的实例SVN

1.启动进程

svnadmin create /svndata/svn/kscore

svnserve -d --listen-port 8888 -r /svndata/svn/kscore

2.svn 客户端登录

svn://10.10.40.37:8888/

七:svn之间同步

1. 每个文件夹下都存在.svn 需要删除掉

--username yangkun --password yangkun@2016 --non-interactive

--username hk --password hk@pwd --non-interactive

svn commit -m "h1" --username hk --password hk@pwd --non-interactive

svn checkout svn://192.168.211.130:8088 . --username hk --password hk@pwd --non-interactive

八:svn win客户端使用方法



九:svn jenkins中客户端连接报错

1.执行上下文错误: An error occurred during SSL communication

2. 源码管理中使用SVN的账号密码体系

十:清除客户端登录的账号密码

十一:svn 客户端clean up 错误

1.下载文件

https://www.sqlite.org/2018/sqlite-tools-win32-x86-3240000.zip

2.解决方法:

step1: 到 sqlite官网 (http://www.sqlite.org/download.html) 下载 sqlite3.exe

找到 Precompiled Binaries for Windows,点击 sqlite-shell-win32-x86-3080500.zip 下载,300KB左右

step2: 将下载到的 sqlite3.exe 文件复制到 本地磁盘的某个临时目录下 (我的svn源代码放在共享磁盘中,发现 sqlite老是找不到 svn的 wc.db文件),

step3: 然后 设置 svn源代码 文件夹 及文件 显示 所有文件(包括隐藏文件),会发现 .svn/wc.db 文件, 将 其复制到 step2的临时目录下

step4: 开始 -> 运行 -> 打开 cmd命令

打开 wc.db

执行 delete from work_queue;

如图所示:


step 5: 将 wc.db 覆盖到 svn源代码目录的 .svn目录下

step 6: 对 svn源代码目录 右键, clean up, 稍等1至5分钟左右,然后会提示 清理成功。

十二:svn 基本操作命令

1.取出版本

svn checkout svn://192.168.137.131:8088/ --username ld --password ldsvnpwd --non-interactive

2.添加文件

svn add *

3.提交到版本库

svn commit -m "add ld01.sh" * --username ld --password ldsvnpwd --non-interactive

4.查看日志

svn log --username ld --password ldsvnpwd

5.更新最新版本

svn up --username ld --password ldsvnpwd

6.svn 删除文件

svn delete ld01.sh

再提交更新

svn commit -m "del ld01.sh"

查看日志

svn log

7.checkout 指定版本

svn checkout -r r6 svn://192.168.137.131:8088/ --username ld --password ldsvnpwd --non-interactive

十三:svn 使用技巧

Q1.在linux上创建目录

svn checkout svn://192.168.211.130:8088/hkweb

带账号密码:

svn checkout svn://192.168.211.130:8088/hkweb --username meng --password meng@pwd --non-interactive

简写:svn co

2.添加文件

svn add *

svn add file

例如:svn add test.php(添加test.php)

svn add *.php(添加当前目录下所有的php文件)

3、将改动的文件提交到版本库

svn commit -m “LogMessage“ [-N] [--no-unlock] PATH(如果选择了保持锁,就使用–no-unlock开关)

例如:svn commit -m “add test file for my test“ test.php

简写:svn ci

svn commit -m "hktest" *

4、加锁/解锁

svn lock -m “LockMessage“ [--force] PATH

例如:svn lock -m “lock test file“ test.php

svn unlock PATH

5、更新到某个版本

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

6、查看文件或者目录状态

1)svn status path(目录下的文件和子目录的状态,正常状态不显示)

【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】

2)svn status -v path(显示文件和子目录状态)

第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。

注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。

简写:svn st

7、删除文件

svn delete path -m “delete test fle“

例如: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)

8、查看日志

svn log path

例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化

9、查看文件详细信息

svn info path

例如:svn info test.php

10、比较差异

svn diff path(将修改的文件与基础版本比较)

例如:svn diff test.php

svn diff -r m:n path(对版本m和版本n比较差异)

例如:svn diff -r 200:201 test.php

简写:svn di

11、将两个版本之间的差异合并到当前文件

svn merge -r m:n path

例如:svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)

12、SVN 帮助

svn help

svn help ci

——————————————————————————

以上是常用命令,下面写几个不经常用的

——————————————————————————

13、版本库下的文件和目录列表

svn list path

显示path目录下的所有属于版本库的文件和目录

简写:svn ls

14、创建纳入版本控制下的新目录

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

用法: 1、mkdir PATH…

2、mkdir URL…

创建版本控制的目录。

1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增

调度,以待下一次的提交。

2、每个以URL指定的目录,都会透过立即提交于仓库中创建。

在这两个情况下,所有的中间目录都必须事先存在。

15、恢复本地修改

svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:

用法: revert PATH…

注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复

被删除的目录

16、代码库URL变更

svn switch (sw): 更新工作副本至不同的URL。

用法: 1、switch URL [PATH]

2、switch –relocate FROM TO [PATH...]

1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将

服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的

方法。

2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动

(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用

这个命令更新工作副本与仓库的对应关系。

17、解决冲突

svn resolved: 移除工作副本的目录或文件的“冲突”状态。

用法: resolved PATH…

注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的

相关文件,然后让 PATH 可以再次提交。

18、输出指定文件或URL的内容。

svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。

svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)

相关推荐

苹果要求全新App开发四月起必须支持“齐刘海”

今日消息,苹果公司通过邮件告知应用程序开发者,从2018年4月起提交给AppStore的所有新应用必须支持iPhoneX的超级视网膜显示器。这意味着新应用程序的开发者必须确保它们适应“齐刘海”,并...

耗时一年多,QEMU开发者成功在电脑上模拟了初版iPhone OS

IT之家12月24日消息,用户通过黑苹果(Hackintosh)工具,已经可以在非Mac设备上运行macOS系统。但由于种种限制,至今也没有多少人能够在PC上运行iOS系统。现...

下个月的WWDC后,苹果将发布原生Watch SDK测试版本

在近日Re/code举办的CodeConference上,苹果的运营副总裁JeffWilliams称,目前有4000多个AppleWatch应用上线,而未来的苹果表开发者套件,将允许开发者直接获...

苹果再次提醒:4月起强制要求APP进行适配

点击右上角关注我们,每天给您带来最新最潮的科技资讯,让您足不出户也知道科技圈大事!软件适配对于许多厂商来说都是一个比较头疼的事,苹果在握紧AppStore审核权的情况下情况要好许多。最近他们公布了...

苹果Xcode 16首个Beta版发布,AI代码补全最少需16GB内存

IT之家6月12日消息,在苹果WWDC24开发者大会上,苹果发布了iOS18、macOS15Sequoia等最新版本系统更新。与此同时,苹果推出了Xcode16开发工具的首...

传苹果已向特定开发者开放iWatch SDK

|责编:薄志强苹果会不会在这次发布会中发布全新的智能手表产品iWatch还很难说,不少人认为由于iWatch的消息少之又少,很可能这次还是没有iWatch。不过现在又有外媒传出消息称,苹果已经选定了...

苹果发布Swift 6语言:引入新测试框架、增强C++ 互操作性

IT之家9月20日消息,科技媒体devclass昨日(9月19日)报道,苹果公司在发布iOS/iPadOS18和macOS15Sequoia系统之外,还发布了Sw...

发布Siri SDK 之前苹果还是先想想这个问题

今年的GoogleI/O大会上,在预览GoogleHome时,我们就看到了设备可以互相对话的场景是多么惊艳,苹果快点跟上吧。最近因为亚马逊Echo和谷歌GoogleHome的火热...

iOS 17.2 SDK代码确认古尔曼爆料:免开箱更新苹果iPhone系统

IT之家10月27日消息,彭博社的马克古尔曼(MarkGurman)本月早些时候发布报道,称苹果正在研发新的系统,可以让员工在不拆开包装的情况下,升级iPhone的iOS系统。根据国...

《企业应用架构模式》之事件驱动架构

事件驱动架构(Event-DrivenArchitecture,EDA)是一种强调事件流和异步通信的应用程序架构。在该架构中,应用程序被分解为多个小型、可独立部署的组件,这些组件通过事件进行通信...

k8s中常用的controller以及用途和对应机制

controller的用途ReplicaSet、Deployment、StatefulSet:用于无状态和有状态应用的副本管理。DaemonSet:确保每个节点上都运行一个副本的控制器。...

Disruptor框架源码阅读-如何不重复消费

RingBuffer如何保证数据不丢失由于ringbuffer是一个环形的队列,那么生产者和消费者在遍历这个队列的时候,如何制衡呢?1、生产快,消费慢,数据丢失?生产者速度过快,导致一个对象还没消...

C# 控制电脑睡眠,休眠,关机以及唤醒

最近碰到一个关于芯片测试过程中的问题,这颗芯片是用在笔记本端口上,笔记本客户那边会有一个压力测试,就是频繁的电脑电源状态切换,S0(正常使用的开机状态),S3(睡眠模式),S4(休眠模式)以及S5(关...

大厂防止超卖的7种实现,很受用!(大厂防止超卖的7种实现,很受用的产品)

高并发场景在现场的日常工作中很常见,特别是在互联网公司中,这篇文章就来通过秒杀商品来模拟高并发的场景。本文环境:...

臻识车牌识别配制MQTT通讯,解析车号

在物联网项目中,我们的软件与车牌识别通讯,通常使用MQTT通讯更简单。...

取消回复欢迎 发表评论: