Windows SVN在命令提示符下比较两个文件夹并导出差异

Windows SVN在命令提示符下比较两个文件夹并导出差异,windows,shell,svn,Windows,Shell,Svn,如何比较SVN中的两个文件夹并将差异导出到windows命令提示符下的另一个文件夹中 使用Turtoise svn gui,我们可以比较两个URL全选并将选择文件导出到一个文件夹。如中所述 可以从命令提示符下执行吗 我在上看到了命令列表,但找不到任何内容 我在上找到了一个脚本,但它是用于linux的,我更改了您提到的用于Windows的脚本。第一个变体(svn export.bat)在存储库中使用两个不同的版本。第二个变体(svnlocalexport.bat)将使用两个本地目录 它使用svn

如何比较SVN中的两个文件夹并将差异导出到windows命令提示符下的另一个文件夹中

使用Turtoise svn gui,我们可以比较两个URL全选并将选择文件导出到一个文件夹。如中所述

可以从命令提示符下执行吗

我在上看到了命令列表,但找不到任何内容

我在上找到了一个脚本,但它是用于linux的,

我更改了您提到的用于Windows的脚本。第一个变体(
svn export.bat
)在存储库中使用两个不同的版本。第二个变体(
svnlocalexport.bat
)将使用两个本地目录

它使用svn diff--summary-r revision from:revision to repository作为svn命令来工作。创建批处理文件:
svn export.bat
将以下内容复制到该文件中,并由以下人员使用:

svn将修订从修订导出到存储库目标目录
svn export.bat:

@echo关闭
延迟扩展
设置为0
如果[%1]=[]设置为%1
如果[%2]=[]设置为1
如果[%3]=[]设置为1
如果[%4]=[]设置为1
如果%s%==1(
回显用法:%0^^^”
转到eof
)
rem为传入参数设置了好的名称,以使脚本更具可读性
设置“修订自=%1”
将“修订\u设置为=%2”
设置“存储库=%3”
设置“目标目录=%~4”
rem需要findstr,因此我们只获取添加/修改的文件,而不获取删除的文件或任何其他文件
将“svnCommand=svn diff--summary-r%revision_from%:%revision_设置为%%repository%^ findstr/B”[AM]“”
如果不存在“%target\u directory%”(mkdir“%target\u directory%”)
rem进入目标目录
pushd“%target\u目录%”
对于/f“delims=“%%L in(“%svnCommand%”)do(
rem转换成这样的行:“Ahttp://...“到”http://..."
设置“文件名=%%L”
rem echo.before:^
设置“查找=*%repository%/”
调用集文件名=%%文件名:!查找!=%%
rem echo.after:^
如果它是我们已经创建的目录,rem不会导出
如果不存在“!filename!”(
对于(“!filename!”)中的%%F,请设置“目录=%%~dpF”
如果不存在“!目录!”(mkdir“!目录!”)
svn导出-r%revision\u到%%repository%/!filename!%cd%\!filename!“
)
)
邻苯二胺
rem在脚本末尾总结任何已删除的文件或目录,取消对以下行的注释
rem echo。已删除的文件:
rem svn diff--汇总-r%revision_from%:%revision_to%%repository%| findstr/B“[D]”
:eof

下一个脚本几乎相同,但它比较了svn管理的两个本地目录。因此,它使用:
svn diff--summary--old folder old--new folder new
作为svn命令。通过以下方式使用它:

svn localexport文件夹旧文件夹新目标目录
svn\u localexport.bat:

@echo关闭
延迟扩展
设置为0
如果[%1]=[]设置为%1
如果[%2]=[]设置为1
如果[%3]=[]设置为1
如果%s%==1(
回显用法:%0^^”
转到eof
)
rem为传入参数设置了好的名称,以使脚本更具可读性
设置“文件夹\u old=%~1”
设置“文件夹\新=%~2”
设置“目标目录=%~3”
pushd“%folder\u old%”
设置“文件夹\u旧\u abs=%cd%”
邻苯二胺
pushd“%folder\u new%”
设置“文件夹\u新建\u abs=%cd%”
邻苯二胺
rem需要findstr,因此我们只获取添加/修改的文件,而不获取删除的文件或任何其他文件
设置“svnCommand=svn diff--summary--old”%folder_old_abs%“--new”%folder_new_abs%“^ findstr/B“[AM]”
如果不存在“%target\u directory%”(mkdir“%target\u directory%”)
rem进入目标目录
pushd“%target\u目录%”
对于/f“delims=“%%L in(“%svnCommand%”)do(
rem将类似于“A C:\Users\…\src.C”的行转换为“src.C”
设置“文件名=%%L”
rem echo.before:^
设置“查找=*%folder\u old\u abs%\”
调用集文件名=%%文件名:!查找!=%%
rem echo.after:^
如果它是我们已经创建的目录,rem不会导出
如果不存在“!filename!”(
对于(“!filename!”)中的%%F,请设置“目录=%%~dpF”
如果不存在“!目录!”(mkdir“!目录!”)
回显副本“%folder\u new\u abs%\!filename!”%cd%\!filename!”
复制“%folder\u new\u abs%\!filename!”%cd%\!filename!”
)
)
邻苯二胺
rem在脚本末尾总结任何已删除的文件或目录,取消对以下行的注释
rem echo。已删除的文件:
rem svn差异--汇总--旧的“%folder_old_abs%”--新的“%folder_new_abs%”查找/B“[D]”
:eof


请注意,如果目标文件已经存在,则这两个批处理脚本不会覆盖它们。如果您想更改,请删除相应的If语句。

它会导出差异日志,但我正在查找与Ortoise Export相同的文件夹结构现在我收到了您的问题,很抱歉我误读了您的问题并将更改我的答案。我更改了我的答案,我附加的脚本与您为Linux发布的脚本完全相同。谢谢,我使用
svnexport 100 110测试了它https://127.0.0.1/svn/My-Repo c:\test
,结果是一个名为
的文件夹!目录
c:\test
文件夹中!亲爱的@AndreKampling最终编辑成功了!谢谢顺便说一下,此脚本比较两个修订版,而不是两个文件夹。我将此标记为正确,因为此脚本也非常有用!!但是您认为可以比较两个文件夹并导出差异吗。