找出svn中本地修改,并按路径保存到一个文件夹下(bat使用示例)

本文介绍了一款批处理脚本,旨在简化Subversion(SVN)中本地修改的保存流程。通过自动化创建diff目录、生成修改列表并复制修改文件至指定路径,此脚本极大提升了版本控制操作的效率。

本文,记录下曾经使用的几个bat批处理之一。

@echo off
echo "本文件,用于将本地修改,按路径保存到local_diff_dir\下"

rem “目录存在,则先删除”
if exist %cd%\local_diff_dir\ (
	rd /s /Q %cd%\local_diff_dir\
)

rem “创建diff目录,并找到本地的修改list”
mkdir local_diff_dir\
svn diff  --summarize > local_diff_dir\diff_list.txt

rem “删除list文件中的空格,创建临时diff list文件”
for /f "delims=" %%i in (local_diff_dir\diff_list.txt) do (
  call,set t=%%i
  call,echo %%t: =%%>>local_diff_dir\tmp.txt
)

rem “按行复制文件,xcopy可自动创建路径;echo -f|自动将f传递到xcopy可能的询问,否则需手动输入”
for /f "delims=M" %%j in (local_diff_dir\tmp.txt) do (
  echo f | xcopy "%%j" local_diff_dir\%%j
)

rem “删除临时diff list文件”
del local_diff_dir\tmp.txt

rem pause

复制到txt,重命名为xxx.bat,放在svn的根路径下即可。

<think>我们使用批处理脚本实现将本地文件夹上传到固定SVN路径的功能。根据引用[1]中的信息,我们可以使用TortoiseSVN的命令行工具TortoiseProc.exe来执行SVN操作。但需要注意的是,TortoiseProc.exe是图形界面程序,如果需要在无界面的情况下运行(如计划任务),则应该使用svn.exe(命令行客户端)。然而,用户要求使用bat脚本,且引用[1]中使用了TortoiseProc,因此我们这里也采用TortoiseProc的方式,因为它对用户更友好(会弹出图形界面进行交互)。 不过,请注意,TortoiseProc的/command参数中没有直接提供“上传文件夹”的命令。我们通常需要先将要上传的文件夹添加到版本库中(如果尚未添加),然后提交。因此,我们分为两步: 1. 将本地文件夹添加到SVN工作副本(如果尚未添加) 2. 提交更改到SVN服务器 但是,由于我们是要上传到固定的SVN路径,这个固定路径可能是一个已经存在的URL。我们假设这个固定路径已经存在(或者需要先创建),且我们有权限写入。 然而,TortoiseProc不支持完全自动化的提交(因为它会弹出对话框要求输入日志等)。所以,如果希望完全自动化,应该使用svn命令行工具(svn.exe)。但引用[1]中没有使用svn.exe,而是使用了TortoiseProc进行更新操作。因此,我们这里提供两种方案: 方案一:使用TortoiseProc(图形界面方式) - 优点:用户交互友好,适合手动执行 - 缺点:无法完全自动化(需要用户输入日志等) 方案二:使用svn.exe(命令行方式) - 优点:可以完全自动化,适合计划任务 - 缺点:需要配置svn.exe的路径且可能需要存储认证信息(用户名密码) 考虑到用户要求用bat脚本,且没有特别说明是否要自动化,我们这里先提供方案一(图形界面方式)的示例,然后补充方案二(命令行方式)的示例。 方案一(图形界面方式)步骤: 1. 确保本地文件夹已经是一个SVN工作副本(即已经checkout过固定路径)?如果没有,需要先checkout(但这里我们是要上传,所以应该是先导入?) 2. 实际上,我们通常不会用TortoiseProc来直接上传一个非工作副本的文件夹。所以,我们可能需要先导入(import)到SVN服务器,但这也会弹出图形界面。 因此,我们改变思路:使用TortoiseProc的commit命令,但前提是本地文件夹已经是一个工作副本。所以,我们首先需要将本地文件夹初始化为一个工作副本,将其关联到SVN服务器上的固定路径(即先checkout空目录,然后复制文件,再添加提交)。或者,我们也可以使用导入(import)功能,但TortoiseProc的import命令也会弹出对话框。 考虑到用户要求上传本地文件夹到固定SVN路径,我们假设用户已经有一个SVN仓库的URL,本地文件夹尚未纳入版本控制。 步骤: 1. 使用TortoiseProc的import命令将本地文件夹导入到SVN仓库的固定路径(这会打开图形界面,用户需要填写日志提交)。 2. 或者,先创建一个空的目录,将其checkout到某个临时位置,然后将要上传的文件夹内容复制到这个临时位置,再使用TortoiseProc的commit命令提交。 由于TortoiseProc的import命令没有提供在命令行中指定日志等参数,所以无法完全自动化。因此,我们推荐使用方案二(svn命令行工具)来实现自动化上传。 方案二(命令行方式): 1. 确保安装了TortoiseSVNsvn.exe在系统路径中)或者单独安装了Subversion命令行客户端。 2. 使用svn import命令将本地文件夹导入到固定的SVN URL。 下面我们分别给出两个方案的脚本示例。 方案一(图形界面方式)使用TortoiseProc进行导入(import): ```batch @echo off setlocal rem 设置TortoiseSVN的安装路径 set "TORTOISE_PATH=%ProgramFiles%\TortoiseSVN\bin" rem 设置要上传的本地文件夹路径 set "LOCAL_PATH=E:\my_folder" rem 设置SVN服务器上的目标URL(固定路径) set "SVN_URL=http://svn.example.com/repo/trunk/target_folder" rem 使用TortoiseProc的import命令 "%TORTOISE_PATH%\TortoiseProc.exe" /command:import /path:"%LOCAL_PATH%" /url:"%SVN_URL%" echo 请在弹出的图形界面中完成导入操作。 pause ``` 方案二(命令行方式)使用svn.exe进行导入(完全自动化): 注意:需要先安装Subversion命令行客户端或者TortoiseSVN(它会安装svn.exe,通常在TortoiseSVN的bin目录下)。另外,如果SVN需要认证,我们可以通过--username和--password参数提供,但这样密码会明文显示。更安全的方式是使用svn的认证缓存(第一次运行时会提示保存认证信息)。 ```batch @echo off setlocal rem 设置svn.exe的路径(如果已经在系统PATH中,则可以直接使用svn) set "SVN_BIN=%ProgramFiles%\TortoiseSVN\bin\svn.exe" if not exist "%SVN_BIN%" set "SVN_BIN=svn" rem 设置要上传的本地文件夹路径 set "LOCAL_PATH=E:\my_folder" rem 设置SVN服务器上的目标URL(固定路径) set "SVN_URL=http://svn.example.com/repo/trunk/target_folder" rem 设置日志信息 set "LOG_MESSAGE=Initial import" rem 执行导入 "%SVN_BIN%" import "%LOCAL_PATH%" "%SVN_URL%" -m "%LOG_MESSAGE%" if %errorlevel% equ 0 ( echo 导入成功! ) else ( echo 导入失败,错误代码: %errorlevel% ) pause ``` 方案二中,如果svn.exe不在系统路径中,我们设置了默认的TortoiseSVN安装路径。如果用户安装在其他位置,需要修改。 另外,如果SVN服务器需要认证,且之前没有保存过认证信息,那么第一次运行会提示输入用户名和密码。我们可以通过添加--username和--password参数来避免交互,但这样不安全。例如: ```batch "%SVN_BIN%" import "%LOCAL_PATH%" "%SVN_URL%" -m "%LOG_MESSAGE%" --username yourname --password yourpass ``` 但是,我们不推荐在脚本中明文存储密码。替代方案是使用svn的认证缓存,即先手动运行一次(在命令行中运行svn命令输入密码,选择保存),之后脚本就可以自动运行了。 根据用户的需求,我们提供了两种方法。如果用户希望完全自动化且可以接受在第一次运行时手动输入密码,那么推荐方案二。如果用户希望每次上传都通过图形界面操作(比如需要填写日志等),则使用方案一。 最后,我们还可以考虑将本地文件夹添加到已有工作副本的情况,但这种情况更复杂,这里不展开。 请根据实际情况选择方案修改脚本中的路径和URL。</think>以下是使用批处理脚本将本地文件夹上传到固定SVN路径的完整解决方案: ```batch @echo off setlocal enabledelayedexpansion chcp 65001 >nul &:: 解决中文乱码问题 title SVN文件夹上传工具 :: 设置SVN客户端路径(根据实际安装路径修改) set "SVN_BIN=C:\Program Files\TortoiseSVN\bin" if not exist "%SVN_BIN%\svn.exe" ( echo 错误:未找到SVN客户端,请确认TortoiseSVN已安装 pause exit /b ) :: 设置本地文件夹路径 set "LOCAL_PATH=E:\project_folder" &:: 修改为您的本地文件夹路径 :: 设置SVN目标路径 set "SVN_URL=http://svn.example.com/repo/trunk/target_folder" &:: 修改为您的SVN路径 :: 检查本地文件夹是否存在 if not exist "%LOCAL_PATH%" ( echo 错误:本地文件夹 "%LOCAL_PATH%" 不存在! pause exit /b ) echo 正在准备上传文件夹... echo 本地路径: %LOCAL_PATH% echo SVN目标: %SVN_URL% echo. :: 添加所有文件到SVN "%SVN_BIN%\svn.exe" add "%LOCAL_PATH%\*" --force :: 提交到SVN仓库 "%SVN_BIN%\svn.exe" commit "%LOCAL_PATH%" -m "批量上传文件夹内容" :: 检查提交结果 if %errorlevel% equ 0 ( echo. echo [成功] 文件夹已上传至SVN仓库! echo 路径: %SVN_URL% ) else ( echo. echo [错误] 上传失败,请检查SVN设置和网络连接 ) :: 可选:打开资源管理器查看结果 echo. set /p "open=是否打开资源管理器查看? [Y/N]: " if /i "!open!"=="Y" explorer "%LOCAL_PATH%" endlocal pause ``` ### 关键功能说明: 1. **SVN客户端检测**: - 自动检测TortoiseSVN安装路径 - 验证`svn.exe`是否存在[^1] 2. **路径配置**: - `LOCAL_PATH`:设置要上传的本地文件夹路径 - `SVN_URL`:设置目标SVN仓库路径 3. **上传流程**: - 使用`svn add --force`添加所有文件[^2] - 使用`svn commit`提交到仓库 - 包含提交说明信息`-m "批量上传文件夹内容"` 4. **结果验证**: - 检查`errorlevel`判断上传是否成功 - 提供成功/失败提示信息 ### 使用前配置: 1. 修改脚本中的路径变量: ```batch set "LOCAL_PATH=E:\your_project_folder" &:: 修改为您的实际路径 set "SVN_URL=http://your.svn.server/path" &:: 修改为您的SVN仓库路径 ``` 2. 如果TortoiseSVN安装在其他路径修改: ```batch set "SVN_BIN=C:\Your\Custom\Path\TortoiseSVN\bin" ``` ### 高级功能扩展: 1. **增量上传**: ```batch :: 只上传修改过的文件 for /f "delims=" %%f in ('"%SVN_BIN%\svn.exe" status "%LOCAL_PATH%" ^| findstr "M"') do ( "%SVN_BIN%\svn.exe" commit "%%f" -m "更新文件: %%~nxf" ) ``` 2. **自动冲突解决**: ```batch :: 更新前解决冲突 "%SVN_BIN%\svn.exe" update "%LOCAL_PATH%" --accept theirs-full ``` 3. **添加文件过滤**: ```batch :: 只上传特定类型文件 for /r "%LOCAL_PATH%" %%f in (*.cpp;*.h) do ( "%SVN_BIN%\svn.exe" add "%%f" ) ``` 4. **日志记录功能**: ```batch :: 记录操作日志 set "LOG_FILE=%LOCAL_PATH%\svn_upload.log" echo [%date% %time%] 开始上传 >> "%LOG_FILE%" "%SVN_BIN%\svn.exe" commit "%LOCAL_PATH%" -m "批量上传" >> "%LOG_FILE%" 2>&1 ``` ### 注意事项: 1. 首次使用时需要验证SVN凭证 2. 确保SVN仓库路径有写入权限 3. 大文件上传可能需要较长时间 4. 建议在脚本所在目录创建备份点[^1]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值