【问题标题】:Precommit hook for svn to modify files to be committed in c#svn 的预提交钩子以修改要在 c# 中提交的文件
【发布时间】:2011-01-15 03:08:18
【问题描述】:

我想在将文件提交到存储库之前以某种方式进行修改(实际上是在代码格式化程序中格式化文件)。 我从Precommit example (Use guest as name and no password) 中找到了如何在 python 中编写。但我想知道的是如何获取要提交的文件列表和这个需要的其他命令行参数。还有一个我更喜欢用 C# 编写自己的预提交钩子,而不是 Python 或任何其他脚本。

几点 我将编写一个将格式化的 exe,但我想要提交的文件列表 如何使用 svn 进行配置。

【问题讨论】:

  • 您应该在问题中说明您说的是 Tortoise 侧钩(链接中的示例是客户端钩)。

标签: c# tortoisesvn


【解决方案1】:

传递给预提交挂钩脚本的第一个参数是文本文件的路径。该文本文件包含要提交的所有路径,由换行符分隔。

但是对于您的情况,您最好使用 start-commit 钩子:该脚本在提交开始之前被调用,但在用户选择要提交的文件/文件夹之后。 start-commit 脚本在用户单击提交对话框中的 OK 之后、实际提交开始之前被调用。这个钩子有一个将要提交的确切列表。

【讨论】:

  • 错了!在用户单击选定文件的提交后调用预提交。甚至在显示脏文件列表的 UI 之前就调用 start commit svnbook.red-bean.com/nightly/en/...
  • @Ravisha:在您的问题中,您链接到特定于 TortoiseSVN 的客户端挂钩脚本。不知何故,我不敢相信那个工具的作者会错在这……
  • @ jeroenh 我的回复是 stefan 对这个声明的回复“在显示提交对话框时,在用户开始选择文件/文件夹进行提交之前,会调用预提交脚本。”这是错误的,预提交是在用户选择文件之后但在他点击确定按钮之前。这就是我所说的。我并不是说与 Tortoise SVN 文档相矛盾
【解决方案2】:

修改已提交文件的预提交钩子被认为是“坏事”:

http://svnbook.red-bean.com/en/1.5/svn.reposadmin.create.html#svn.reposadmin.create.hooks

这个想法值得在官方 SVN 文档中使用一个大红框,并警告说这将影响 SVN 客户端如何以不良方式与存储库一起工作。

【讨论】:

  • 这很糟糕,但有没有办法做到这一点?喜欢允许提交发生(没有预先提交);在提交后,它会签出文件,执行格式化,然后重新签入?或者删除/剥离在预提交时签入的可执行文件(我有些人不够聪明,不知道如何从项目中删除 exe,即使他们失败并给出智能回复)?
  • 我问的是关于超大二进制文件的问题。而且因为 Obliterate 还不存在。但我开始意识到文件在操作后会有所不同,导致它总是过时的。这将导致它始终下载,即使它与签入之后(而不是之前)相同。如果有解决该问题的方法,我仍然感兴趣。
  • @TamusJRoyce 在那里看到我的问题:stackoverflow.com/questions/9888667/…
【解决方案3】:

您可能已经读过,a hook in subversion 只是一个程序,在提交过程中的特定时间使用some parameters and a return value 调用。您可以在挂钩目录中放置任何可运行的程序。因此,您也可以在其中放置任何 .exe(也可以是 .Net 程序)。然后检查命令行参数并做任何你喜欢的事情,并将任何 int 值作为错误级别返回。

在您的应用程序中,您可以使用SharpSVNanything else 轻松访问存储库以进行任何检查并将结果发送给用户。

【讨论】:

    【解决方案4】:

    首先,我认为这是一个坏主意。为什么要在提交之前更改代码?在我看来,检查代码格式/标准违规并中止提交要好得多。如果在提交期间更改了我的代码,我会非常沮丧。

    要回答您的具体问题,请使用@987654321@ 获取已更改文件的列表。 svnlook dirs-changed 将为您提供受待处理事务影响的目录。

    【讨论】:

    • 这只是格式化代码样式,不影响其他任何内容。我做的是美化class文件。
    • svnlook 没用:他想使用 TSVN 的客户端钩子脚本功能,而不是服务器端钩子脚本。
    • +1 原始问题没有说明客户端/服务器端挂钩。这是唯一试图解释如何做到这一点的答案,即使这是你不想做的事情。
    猜你喜欢
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多