Svn 颠覆中的钩子

Svn 颠覆中的钩子,svn,batch-file,svn-hooks,Svn,Batch File,Svn Hooks,我想通过Subversion中的post-commit钩子运行批处理文件。我的问题是,我想为每个已提交的文件运行一次,但不知道如何获取钩子中已提交文件的名称。我可以为文件夹中的每个文件运行它,但是当我离开这个测试环境并且实际使用这个功能时,有很多文件,这将是非常低效的。任何想法???SVN将两个值传递给钩子,即存储库的路径和生成的修订号。 使用此信息,您可以要求SVN在该修订版中更改的路径,并获得添加/修改文件的列表。我能够使用批处理和使用一些临时文本文件来存储一些数据。我必须做一些处理,以获得

我想通过Subversion中的post-commit钩子运行批处理文件。我的问题是,我想为每个已提交的文件运行一次,但不知道如何获取钩子中已提交文件的名称。我可以为文件夹中的每个文件运行它,但是当我离开这个测试环境并且实际使用这个功能时,有很多文件,这将是非常低效的。任何想法???

SVN将两个值传递给钩子,即存储库的路径和生成的修订号。

使用此信息,您可以要求SVN在该修订版中更改的路径,并获得添加/修改文件的列表。

我能够使用批处理和使用一些临时文本文件来存储一些数据。我必须做一些处理,以获得变量中的文件名,因为这正是我作为参数所需要的。这可能不是最有效的方法,但它实现了我的目标

setlocal EnableDelayedExpansion

rem write a list of the changed files in a text file
"C:\svnpath\bin\svn.exe" log "C:\repo-path\project" -r %TXN% --verbose > "C:\path\changelist.txt"

rem write the list of all files into a text file
cd "C:\repo-path\project"
dir /b > "C:\path\filelist.txt"

rem loop through files
cd "C:\path"
for /F "delims=" %%i IN (filelist.txt) do (
   rem search for file name in list of changed files, if found run batch file on it
   find /i "%%i" changelist.txt > nul

   echo %%i > "C:\path\temp.txt"

   if not errorlevel 1 (
      cd "C:\repo-path\project"
      batchfile.bat %%i
   )
)

rem delete temp files when finished
del "C:\path\filelist.txt"
del "C:\path\changelist.txt"
del "C:\path\changedfiles.txt"

您只犯了一个小错误:事务中的文件列表(服务器端,作为在服务器上执行的钩子)比
svnlog-v
更容易准备(并且没有日志的“噪音”)。它是
svnlook
,子命令
已更改

回购中的修订示例(对于交易,您将使用
-t%TXN%


Hello
是指向存储库的路径根目录(不是工作副本),命令的输出部分似乎是
svn st的输出
,指向文件的路径是来自repo根目录的相对路径

钩子脚本的具体功能是什么?现在它所做的只是更新我的工作副本的日期,但是,为了将代码用于我公司使用的第三方软件,它需要运行一个脚本,该脚本必须在每个已更改的文件上运行。我创建了一个批处理文件,允许它像这样运行…myscript.bat changedfile.c从命令行…我想为每个更改运行我的批处理文件。很高兴知道它可以完成…您能为如何获取修改的文件提供帮助吗?我现在有一个脚本,可以对文件夹中的每个文件执行此操作,如果您能向我展示脚本以获取提交或修改的文件,我将不胜感激!:)在脚本中,只需使用传递给它的修订调用svn log,您将获得提交中更改的所有内容的完整列表。因此,我现在可以获得更改文件的名称,谢谢,我想知道我是否可以将它们输出到一个数据结构(如数组)中,这样我就可以循环使用它们,以便为每个文件调用我的批处理文件?我正在使用windows xp进行测试,但它最终将位于2003 server的一个框中。所以我只是在寻找一个命令行脚本来完成这个任务,我想我已经拥有了我所需要的一切,除了我在将更改的文件列表放入一个我可以遍历的数据结构时遇到问题。感谢您的帮助。您可以从命令行启动svn日志,并解析输出,但我怀疑这将非常棘手。例如,我会使用一种类似python的语言,它有一个优秀的SVN库,这将使工作更加容易。
>svnlook.exe changed -r 31 Hello
U   trunk/Hello.de.txt
U   trunk/Hello.en.txt
U   trunk/Hello.fr.txt