2

我正在尝试反对自动签入到版本控制。我的工作小组围绕 CFEngine 编写了一些系统构建工具,现在他们认为这些工具应该自动检查 SSH 主机密钥等事情。

现在,作为一名程序员,我最初的直觉反应是,除了人类之外,没有什么应该调用“svn up”和“svn ci”。在最近的一个案例中,一堆文件的 .rNNNN 合并版本破坏了工具,这就是本次讨论的开始。

现在,设计工具的人基本上承认他正在使用 SVN 来同步文件,并且他基本上可以用 NFS 挂载替换所有这些。他甚至说他会将“svn diff”包装成“make diff”,因为这似乎比我们所有人都知道 SVN 的工作原理要好。

所以......我在这里要求人群帮助我为没有 Makefile、shell 脚本等包装 Subversion 命令提出一个很好的论据,而 Subversion 基本上被用于在不同机器上同步文件。

这是我的清单,到目前为止:

  1. 我们并没有真正对这些数据进行版本控制,所以它不应该放在 svn 中。
  2. 我们已经说过它可以被 NFS 挂载所取代,所以我们为什么不这样做。
  3. 本土工具现在正在包装 SVN,软件总是会有错误,因此当我们遇到错误时,我们的 SVN 修订版现在会弄得一团糟。

...请讨论/帮助我提出这个问题,或者告诉我你为什么不同意!

4

4 回答 4

4

SVN 是用于在机器上同步文件的好工具!如果我想让一堆机器拥有完全相同版本的文件,那么让它们处于颠覆状态并能够检查它们是天赐之物。是的,您可以使用诸如 rsync 之类的工具或安装 NFS 以使它们保持最新,但至少 subversion 允许您存储所有修订并在需要时回滚/转发。

不过,我要说的一件事是,当这些文件可能破坏您的系统时,让机器从主干自动更新可能是个坏主意,它们应该从标签更新。这样,您可以签入并维护修订历史记录测试它们,然后应用一个标签,该标签将在其他机器上同步文件更新时。

我理解您对让这些工具自动提交的担忧,因为您可能觉得应该需要某种人工验证,但对我来说,消除人工交互可以消除流程中的人为错误,而这正是我希望从这种类型的系统中实现的。

当您在 svn 树上设置生产标签之前确认一切正常时,应该考虑到人的方面。

总而言之,您的流程很好,盲目地允许自动化流程将文件推送到可能破坏事物的环境中。

于 2009-05-17T19:55:10.053 回答
2

实际上SVN比NFS好。至少它提供了一个原子一致的全局视图(即,您不会同步文件的半提交视图)。我反对开发自动提交,因为它不允许同行评审过程,但对于管理工作,SVN 非常有用。我的2c。

于 2009-05-17T20:00:34.113 回答
1

这是旧鞋与玻璃瓶辩论的另一个例子。在这种情况下,NFS 挂载可能是要走的路,我们的夜间构建提交版本控制更改,仅此而已。

您的 SVN 存储库用于帮助版本和构建代码。如果你正在做的事情以任何方式危害到这一点,那么不要这样做。

如果 SVN 绝对是最好的方法,那么创建一个单独的存储库并使用它,不要管关键存储库。

于 2009-05-17T19:59:22.853 回答
0

只有人类应该提交,但我认为没有理由禁止自动结帐和更新。唯一的事情是确保人们将工作和测试的代码提交到进行自动更新的地方。

NFS 有点酷,但如果 NFS 服务器坏了,你就有麻烦了。您可以尝试使用 GlusterFS 之类的东西来拥有多个数据副本(但不要尝试ls使用 Glusterfs 目录,因为它是 O(number of files) )。

Neil Trodden posted an excellent remark on tags in this thread, it'd solve Your problem I suppose.

于 2009-05-17T22:01:36.010 回答