如何正确通知 SVN 有关在 Visual Studio 中移动到 SVN 控制之外的文件?

问题描述 投票:0回答:1

我正在使用带有 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 命令序列是什么:

  1. 告诉 SVN 这些文件的新位置
  2. 保护他们的历史
  3. 处理文件实际上已位于新位置的事实

我想扩展我的批处理脚本,以便在我知道要使用的正确 SVN 命令后自动处理此问题。

P.S. 安装 VisualSVN for Visual Studio 2019 扩展现在可以通过拖放或剪切和粘贴来移动文件,Subversion 会将这些文件视为删除和添加,如果您不关心这些文件的历史记录,这是可以的。但我相信应该有更好的解决方案。例如,从此页面,我也许可以将文件移回到旧位置,然后使用

svn move
以正确的方式将它们“重新移”回新位置。

batch-file svn cmd version-control visual-studio-2019
1个回答
0
投票

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

“显示更改”的详细信息:

moved to

moved from

revision details

© www.soinside.com 2019 - 2024. All rights reserved.