【问题标题】:TortoiseSVN unable to setup keywords correctlyTortoiseSVN 无法正确设置关键字
【发布时间】:2014-09-08 20:47:19
【问题描述】:

我仍在学习 TortoiseSVN 1.6,到目前为止,我无法设置关键字,因此一旦运行提交命令,它们就会在文件中更新。

我都右键单击文件/目录>属性>新建。我从下拉列表中选择svn:keywords,然后在属性值字段中添加$Author$$ID$$HeadURL$$Revision$$Date$

我还通过右键单击桌面 > 设置 > Subversion 配置文件将这些添加到。从这里我取消了enable-auto-props = yes 的注释,并添加了以下两个条目:

*.cfc = svn:keywords=HeadURL Revision Author Date ID
*.cfm = svn:keywords=HeadURL Revision Author Date ID

我的文件是包含以下内容的基本文本文件:

  • *版本 $Revision$
  • *作者 $Author$
  • *日期 $Date$
  • *ID $ID$

在我提交这个存储库之后,这些关键字没有更新,所以我不确定我在这里做错了什么。

【问题讨论】:

    标签: svn tortoisesvn keyword-substitution


    【解决方案1】:

    在你的文本文件中,你只需要这样做:

    $Revision$
    $Author$
    

    当 Subversion 执行结帐时,它会将它们更改为:

    $Revision: 1234$
    $Author: Quimby$
    

    无需先为关键字命名。

    如果您希望 Subversion 扩展关键字,您必须设置 svn:keywords。您必须将 svn:keywords 属性的值作为 bare 关键字,以空格分隔,AND 正确装箱。必须是 $Id$ 而不是 $ID$

    也就是说,你的svn:keywords属性应该设置为:

    Revision Author Date Id
    

    不是

    $Revision$ $Author$ $Date$ $Id$
    

    使用关键字的警告

    另外,我为其推出此功能的最终用户是否必须编辑他们的 Subversion 配置文件,或者只担心在他们的 WC 中的文件/目录上设置关键字?

    由于svn:keywords 是一个属性,它将在所有工作副本中设置。任何结帐的人都会看到展开后的关键字。

    问题是,如果有人添加了一个新文件,并且您也希望在这些文件上设置 svn:keywords,会发生什么情况。在 Subversion 1.7 及之前的版本中,如果这些属性未设置为文件上的特定值,则必须使用预提交挂钩来使提交失败。

    开发人员在提交几次因为没有在文件上设置此属性而被拒绝后,可以在其 Subversion 配置的 autoprop 部分中设置它。这样,当他们添加新文件时,Subversion 会自动添加属性。

    在 Subversion 1.8 中,引入了可继承属性。两个主要的是svn:autopropsvn:global-ignores。这两个属性可以替换用户配置中的 global-ignoresautoprop 部分。这是一种无需担心用户配置即可对整个存储库执行此操作的方法。

    但是,关键字并不是那么有用。它们通常会比光产生更多的痛苦(而$Log$ 是彻头彻尾的邪恶)。

    关键词能给你什么信息?如果您在工作副本中,则只需运行 Subversion 命令即可获得关键字所具有的所有信息以及更多信息。

    在工作副本之外,关键字通常会在编译阶段消失。即使您将关键字嵌入到字符串中,它也只是该文件的那个版本,并且不会告诉您其余的文件版本。一个更好的方法是嵌入一个对您来说整体有意义的版本字符串。例如,整个程序的版本号。如果你使用像 Jenkins 这样的 CI 系统,这很容易做到。事实上,我们在编译代码时嵌入了 Jenkins 项目和内部版本号(以及工作副本的修订版)。

    它在脚本中可能更有用,但在那里很容易欺骗。想象一个 Python 脚本,其中嵌入了该 Python 脚本的修订版。发现了一个错误,有人修改了文件。嵌入的关键字现在具有误导性。假设需要向此脚本添加一个新功能。开发人员查看脚本上的修订号,检查它,添加功能,然后将新版本返回给客户。现在,原来的 bug 又回到了程序中。

    这就是为什么许多版本控制系统已经去掉了关键字,如果有的话,就必须为每个文件一次打开一个。它们可能会导致编译问题(在 SCCS 中尤其如此,其中关键字是由 % 符号包围的单个字母,导致一些意外扩展事件),它们可能会误导,并且在现代版本控制系统中,不是这样必要的。

    在将关键字嵌入所有文件之前,请仔细考虑您的策略。

    【讨论】:

    • 太棒了,这行得通。我希望我可以发布我一直在阅读的 URL 以使其正常工作,因为它们所拥有的内容令人困惑。这会节省我的时间。再次感谢。
    • 另外,我为其推出此功能的最终用户是否必须编辑他们的 Subversion 配置文件,或者只担心在他们的 WC 中的文件/目录上设置关键字?
    【解决方案2】:

    应用于目录(将应用于子项)的自动道具和属性仅在文件添加到工作副本时应用于文件。如果您尝试将这些关键字应用于已版本化的文件,则需要将它们分别应用于这些文件。

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 2012-06-05
      • 2012-05-19
      • 1970-01-01
      • 2012-06-25
      • 2015-05-29
      • 2017-01-03
      • 2018-07-01
      • 1970-01-01
      相关资源
      最近更新 更多