我有一组服务器端的“提交前”和“提交后”钩子,它们使我们更容易跟踪更改(如果重要的话,可以使用Windows服务器上的VisualSVN):
如果用户文件属于特定类型(二进制文件),则Pre-Commit会将其导出到服务器,然后使用程序将其导出为任何文本编辑器都可以查看的基于文本的格式。
提交后,SVN会将这些文件导入到与原始文件已提交到的相同存储库和文件夹中,作为可立即跟踪的.exp文件。
我的问题出在提交后:似乎在上一次提交处于活动状态时运行导入(后来被“ svnmucc put”代替)不起作用(在此脚本完成之前,用户提交似乎未完全完成) )。因此,脚本卡在此处,没有错误或消息详细信息,并且无法完成提交后的工作。
这是有问题的行(如果我删除Echo,则提交停止):
Echo svnmucc put %LineName% %Address% -F comment%TXN%.txt --non-interactive --no-auth-cache>Command.txt
这是“ Command.txt”中的输出,如果随后启动,则该输出将成功运行:
svnmucc put Test2.exp https://10.49.1.52/svn/PlcLibraries/TestFolder/Lib/Test2.exp -F comment79-6m.txt --non-interactive --no-auth-cache
这里的问题似乎是文件夹被锁定,或者以其他方式阻止了提交,直到原始提交完成为止,这意味着该命令等待原始提交退出。如果我可以以某种方式使提交后的文件夹解锁,或者强制svnmucc运行,那么就可以解决我的问题。
因此,我的问题是:有没有办法使这项工作可行? 对于我们来说,最理想的情况是SVN在提交成功后以某种方式进行管理,但是似乎在后期提交中运行任何脚本都会使SVN客户端在完全完成之前等待这些脚本完成。
服务器端提交脚本更可取的另一个原因是,整个导出至可读格式的操作都在服务器上进行。因此,.exp文件存储在服务器上,而不是客户端上。一种可能是将此文件添加到原始提交中,但我从未见过有人解释过这种方式。
答案 0 :(得分:1)
不查看您运行的提交前和提交后钩子代码,就很难确定此行为的根本原因。但是,由于以下原因,您似乎遇到了递归问题:
...
提交后,然后应该将这些文件SVN导入到同一文件中 存储库和与原始文件相同的文件夹, 现在可跟踪的.exp文件。
...
我猜您的hook脚本运行svn import
或其他应该进行新提交的操作。此操作将再次触发提交挂钩,从而导致循环。
因此,我的问题是:有没有办法使这项工作可行?为我们, 最好的情况是SVN在某种程度上可以 提交成功,但似乎在其中运行任何脚本 提交后使SVN客户端等待这些脚本完成 在完全完成之前。
您的用户使用什么SVN客户端?是TortoiseSVN吗?他们还会使用其他任何客户端吗?
我问的是TortoiseSVN,因为它支持client-side hook scripts,并且可能最好在客户端执行将导出/转换为*.exp
格式的操作。
随时用更多详细信息扩展您的问题-更多信息将有助于更好地了解您的情况和要求。