我正在使用带有 Subversion 存储库的 Visual Studio 2019。有时需要通过 Visual Studio 将文件移动到新位置,但由于 SVN 未集成到 IDE 中,因此它不知道这些移动。
我创建了一个批处理脚本,可以检测移动的文件及其新位置:
@echo off
setlocal enabledelayedexpansion
:: Check if the SVN directory path is provided
if "%1"=="" (
echo Please provide the path to the SVN repository.
echo Usage: %~nx0 path\to\svn\repository
exit /b 1
)
:: Initialize variables
set repo_path=%1
pushd "%repo_path%"
:: Get and display list of missing files from SVN status
echo Filename Old Path New Path
echo ======== ========= =========
for /f "tokens=2 delims= " %%f in ('svn status "%repo_path%" ^| findstr "^! "') do (
set "found=0"
set "new_path=DELETED"
for /f "delims=" %%p in ('dir /s /b "%%~nxf" 2^>nul') do (
if not "%%p"=="!repo_path!\%%f" (
set "found=1"
set "new_path=%%p"
set "new_path=!new_path:%CD%\=!"
)
)
echo %%~nxf %%f !new_path!
)
popd
endlocal
当我运行此脚本时,它会正确识别 SVN 显示为
!
状态的文件并找到它们的新位置。例如:
Filename Old Path New Path
======== ========= =========
LoggingModel.cs Models\LoggingModel.cs Models\Logging\LoggingModel.cs
MainWindowModel.cs Models\MainWindowModel.cs Models\Main\MainWindowModel.cs
我尝试使用
svn move
命令,例如:
svn move Models/LoggingModel.cs Models/Logging/LoggingModel.cs
但是我收到错误:
svn: E155010: 路径 'C:\path o epo\Models\Logging\LoggingModel.cs' 不是目录
尝试时:
svn move Models/LoggingModel.cs Models/Logging/
我得到:
svn: E150002: 路径 'C:\path o epo\Models\Logging\LoggingModel.cs' 已作为未版本化节点存在
正确的 SVN 命令序列是什么:
我想扩展我的批处理脚本,以便在我知道要使用的正确 SVN 命令后自动处理此问题。
P.S. 安装 VisualSVN for Visual Studio 2019 扩展现在可以通过拖放或剪切和粘贴来移动文件,Subversion 会将这些文件视为删除和添加,如果您不关心这些文件的历史记录,这是可以的。但我相信应该有更好的解决方案。例如,从此页面,我也许可以将文件移回到旧位置,然后使用
svn move
以正确的方式将它们“重新移”回新位置。
VisualSVN 插件正确地将移动记录为复制 + 删除操作,您可以通过检查本地更改来检查这一点。目标文件的状态会显示
Added (+) Moved from …
,因此有关实际移动的信息会记录在SVN中。
本地未提交的更改(
svn update
):
PS C:\MyTest\ConsoleApp> svn status
M ConsoleApp2.csproj
A + NewFolder\Program.cs
> moved from Program.cs
D Program.cs
> moved to NewFolder\Program.cs
提交详细信息 (
svn log -r 3 -v
):
r3 MyUsername | 2024-11-12 16:08:48 +0800 (Tue, 12 Nov 2024) | 1 line
Changed paths:
M /trunk/ConsoleApp2.csproj
A /trunk/NewFolder/Program.cs (from /trunk/Program.cs:2)
D /trunk/Program.cs
“显示更改”的详细信息: