使用windows批处理,解决多个svn库提交和更新的需求
一 项目背景
虽然现在git用的越来越多,但我还是经常使用svn,因为使用Visual Svn server可以很容易搭建属于自己的svn库服务器,用于同步多台设备。现在租用一个云服务器,价格不高,用于搭建svn服务器足足够了。
但是要经常进入多个svn库进行提交和更新,效率还是有些低了,于是想起,写个windows批处理,点击一次,就完成所有工作,不就可以大大提高效率了吗?
二 准备工作
想要使用批处理完成svn命令,就需要安装svn时,选择命令行工具,如下:
因为默认是不安装的。
接下来就可以编写批处理脚本了。
三 具体步骤
1 创建批处理文件
比如,在e盘创建一个DoSvn.bat文件。
再创建一个DirList.txt,用于保存要处理的svn库目录。
2 编写批处理
在DoSvn.bat,编写代码如下:
@echo off
setlocal enabledelayedexpansion
rem 设置根目录
set root_dir=e:\
rem 循环更新目录并提交
for /f "delims=" %%a in ('type "e:\DirList.txt"') do (
echo -------------------------------------------------------
rem 显示当前目录
echo %%a
cd "%%a"
rem ---------------------------------
rem 1、提交新增的内容
svn add * --force
svn ci -m " "
rem ---------------------------------
rem 2、提交已删除的内容
set "deleted_files="
rem 使用svn status命令获取状态,解析内容
for /f "tokens=1* delims= " %%i in ('svn status') do (
rem 如果第1列为!,将文件保存到删除列表
if "%%i"=="!" (
rem echo %%j
set "deleted_files=%%j !deleted_files!"
)
)
if defined deleted_files (
rem 删除文件
svn delete !deleted_files!
rem 提交更改
svn commit -m " "
echo deleted: !deleted_files!
)
rem ---------------------------------
rem 3、更新
svn update
cd %root_dir%
rem 确保删除 delFiles.txt 文件,且不提交
if exist delFiles.txt (
del delFiles.txt
)
)
pause
endlocal
3 编写目录列表内容
e:\DirList.txt
为目录列表,如下:
E:\code.c
……
需要输入完整路径。
4 测试
刚开始,可以仅在DirList.txt中,输入一个路径,用于测试。
全部正常后,再写多个路径,完成批量路径处理。
注意事项
- 此前的批处理,因为先更新,后提交,导致删除的文件,又被恢复了。如下:
之后改成先提交再更新的方式,解决了该问题。 - 初次运行脚本时,有时候会等比较久,或许提示需要先清除。后面就好了。
五 总结
编写这个批处理脚本,完成的主要功能如下:
- 遍历一个包含目录路径的文本文件。
- 对每个目录执行 SVN 操作,包括添加新文件、删除已缺失文件,提交这些更改。
- 更新目录以获取最新的版本。
有了这个脚本,就不用每次手动挨个进目录点击提交和更新了,效率杠杠滴。
这个批处理脚本,我也上传到资源了,赚个积分,实际上大家手动写文件也行,下不下载的无所谓。
点击如下链接即可。
svn配置管理:批量处理多个svn库目录,包括新增文件、提交删除文件、更新文件
原文地址:https://blog.csdn.net/troglodyte/article/details/143777912
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!