【问题标题】:Is there any way to block files being committed to SVN repository有没有办法阻止文件提交到 SVN 存储库
【发布时间】:2009-01-06 12:26:24
【问题描述】:

今天我遇到了一个问题,有人不小心将 proj.user 文件提交到 SVN 存储库。当我来更新时,它显然引起了问题。

这让我想知道是否有任何方法可以阻止某些文件扩展名提交到存储库。

我确实意识到有一个忽略列表,但据我所知,这仍然依赖于将文件添加到忽略列表的人。理想情况下,我想集中控制它,以便存储库而不是人来控制。

这可能吗?

【问题讨论】:

    标签: svn version-control


    【解决方案1】:

    是的,一般有两种方法。要么创建提交钩子(这可能不是您想要做的),或者更容易地将 svn:ignore 属性添加到您的目录。由于属性与项目一起维护,这将影响每个人。例如,要忽略 *.user 文件,您可以将其添加到它们出现的目录中:

    svn propset svn:ignore '*.user' .
    

    然后像往常一样提交您的更改。从现在开始,该目录中的 *.user 文件将不再参与 stat、update、commit 等 svn 命令。但是,您必须将该属性添加到需要忽略字段的每个目录。它不会自动递归地作用于您的项目树。如果出于任何原因,您确实想要更新被忽略的文件,您可以将 --no-ignores 标志传递给命令。

    【讨论】:

    • 这真的会阻止它被明确地$ svn add'ed 吗?
    • 不,如果你专门添加它,它会被添加,但它的更新将被忽略。
    【解决方案2】:

    您可以添加一个颠覆预提交挂钩来防止人们提交它们。这具有服务器端的优势,而不是每个客户端的设置。

    【讨论】:

    • Subversion 属性也由项目管理,因此它们的好处是可以在服务器上进行修订和维护:) 而且它们不需要编码。
    • 确实如此,但是当您有很多项目/目录时,设置它们也更加痛苦......秋千和环形交叉路口等等:)
    • 如果您是一位经验丰富的 Subversion 管理员,我绝对同意,但是如果您在这里问这个问题,我认为将 svn:ignore 属性添加到多个项目目录的额外工作可能会更好选择:)
    【解决方案3】:

    我不得不使用

    svn propset svn:ignore '*.user' .
    

    为了使用上面接受的答案。

    【讨论】:

      【解决方案4】:

      关于这个:

      这真的会阻止它 明确添加了 $ svn? – 西兰斯洛特 2009 年 1 月 6 日 18:14

      不,如果你专门添加它,它 将被添加,但会对其进行更新 被忽略。 – Jason Coco 2009 年 1 月 6 日在 20:08

      我相信你不能用 svn:ignore 道具来做到这一点。根据 svnbook 1.5 手册:

      "Subversion 对 ignorable 的支持 文件模式仅扩展到 添加未版本化的一次性过程 文件和目录到版本 控制。一旦一个物体在 Subversion的控制,忽略 模式机制不再适用于 它。换句话说,不要期望 颠覆以避免提交更改 你已经制作了一个版本控制的文件 因为该文件的名称与 忽略模式——总是颠覆 注意到它的所有版本化对象。”

      【讨论】:

      • 加 1,因为这是 svn 和 git 之间的重要区别,因为 git 将允许您将文件添加到 repo 而不跟踪更改,例如音频或图形文件。
      【解决方案5】:

      您想在服务器端添加一个忽略列表?我认为这不是直接可能的,但您可以分析预提交挂钩中的文件(请参阅:http://svnbook.red-bean.com/en/1.1/ch05s02.html#svn-ch-5-sect-2.1)并在名称/模式不正确时完全拒绝提交?

      【讨论】:

        【解决方案6】:

        在 SVN 中,您手动将文件添加到存储库。因此,拥有文件扩展名阻止列表是没有意义的。您可以使用 svn ignore 忽略特定文件,但同样,您需要手动从存储库中添加和删除文件。

        另见How do you remove a file from being version controlled without deleting the file in subversion?

        【讨论】:

        【解决方案7】:

        查看svn:ignore 属性。

        【讨论】:

          【解决方案8】:

          除了设置ignore property,您还可以使用“global-ignore”运行时配置选项来全局执行此操作。按照链接了解更多信息。我认为您可能正在寻找全局忽略功能。

          【讨论】:

          • 全局忽略设置的问题在于它是针对每个客户端的。如果有一个项目规则不应该修改 *.user 文件,而是一些构建过程或在受控目录中生成它们的任何东西,你必须让每个人手动更新他们的配置。
          猜你喜欢
          • 2017-07-20
          • 2010-10-12
          • 2012-09-23
          • 2011-08-31
          • 1970-01-01
          • 2019-10-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多