【发布时间】:2012-02-04 04:08:24
【问题描述】:
我想使用 svnlook 只更新那些被自动更改/添加的存储库文件等等。我的存储库中有几个应用程序,所有应用程序都可能更改了文件。运行 svnlook changed pathtomyrep 会给我文件,这是第一步。如何在批处理文件中使用它来仅更新提交挂钩中更改的文件?我有这个批处理文件(post-commit.bat):
@ECHO OFF
SET REPOS=%1
SET REV=%2
SET CHANGES=svnlook changed %REPOS% -r %REV%
FOR /F "usebackq" %%a IN (`%CHANGES%`) DO (svn update %%a)
但是什么也没发生,代码没有更新!我知道该文件通常有效,当我输入其他内容时,它会执行。在本地测试它,而不是 U 文件名,我只得到 U。怎么了?
谢谢:)
【问题讨论】:
-
for /?说“默认情况下,/F 从每个文件的每一行传递第一个空格分隔的标记。”。你可以告诉/F使用第二个令牌,如果你能保证它总是第二个 - 我不记得 svnlook 输出,但你不能保证 svn update 输出。你能让 svnlook 只返回文件名而不返回状态字符吗? -
让我们看看,至少 usebackq tokens=2 只返回我的名字。当我以新方式运行它时, svn update 说它正在跳过文件......奇怪。你还能看到其他可能有问题的地方吗?
-
我想通了!我需要完整的路径!所以我添加了 SET MYPATH=d:\apache\htdocs 并在 svn update 前面添加了这个!
-
'Skipped XYZ' 表示 1) 我们不在工作副本中 2) 路径 XYZ 处没有工作副本。你确定更新正确的地方吗?是否需要先
pushd c:\the_working_copy,最后再popd? -
见上文!你让我走上正轨,谢谢! 已解决
标签: svn batch-file post-commit-hook