代码之家  ›  专栏  ›  技术社区  ›  Bill K

如何避免签入对SVN存储库的本地更改?

  •  7
  • Bill K  · 技术社区  · 15 年前

    我必须对项目文件进行本地更改,以便在不同的环境中运行它。现在,我两次不小心检查了这些更改(并破坏了其他人的运行环境)。

    可能有很多更好的方法来建立我们的构建,但是由于我是一个既定项目的顾问,我不能真正改变客户的工作方式。

    我试过在同一个存储库中建立第二个分支(结果适得其反,将整个树复制到存储库的根目录中——我不会再纠结于此)。

    尝试设置自己的第二个存储库,并将这些文件仅签入新的存储库。这也变得非常混乱,基本上不起作用。

    我正在考虑SVK——看起来它可能会有所帮助,但我不能很好地找出一个可行的模式。

    我想我甚至在这里发布了,没有得到一个很好的答案,但那是在我认真考虑SVK之前——我用这个新的参数想可能有一个更好的解决方案。

    我意识到我可以跟踪我想要签入的更改,然后只签入这些更改,但这是一个依赖于人类的、有缺陷的过程,迄今为止,我已经两次失败(因为我是一个有缺陷的人)。

    关于如何做到这一点有什么建议吗?

    8 回复  |  直到 6 年前
        1
  •  7
  •   Nick Meyer    15 年前

    你用的是什么客户?

    Tortoissesvn有一个漂亮的特性,可以利用 changelist SVN内置的功能。如果右键单击修改过的文件夹并选择“检查修改”,则可以右键单击该对话框中的任何修改过的文件,然后选择“添加到变更列表->提交时忽略”。此后,每当执行提交时,乌龟都会确保不将这些文件添加到提交中。请参阅上的“从提交列表中排除项目” this page .

    如果您不使用乌龟,可以手动设置类似的更改列表。

        2
  •  3
  •   bmargulies    15 年前

    你可以使用git-svn。你得到一个本地回购,在那里你可以有本地的历史,和几个机会,考虑你的罪恶,然后强加给svn回购。

        3
  •  2
  •   Matt Sheppard    15 年前

    我通常会安排一些事情,以便标准文件svn签出可以被一个单独的文件覆盖,该文件是svn:ignore ed

    例如,我有一个bash脚本,它使用一个配置文件启动一个JettyWeb服务器。通常是jetty.xml,但如果文件系统上存在jetty-local.xml,则使用它。

    (当然,存在的明显问题是,当jetty.xml得到一些更新时,它们不会合并到jetty-local.xml中,但这可能比您已经面临的问题要小。)

    在我以前处理的一个PHP项目中,使用两个单独的代码树-/system(其中所有系统类都已签出)和/local(其中镜像了它),这一点更进一步,但除非添加了本地类,否则它是空的,在这种情况下,它是优先加载的。这很可能会变得过于花哨而不利于自身利益。

    如果问题出在您所拥有的配置文件上,我使用的另一种解决方案是按层次结构排列读取它们(即在global.cfg.default中读取,然后用global.cfg.local中的任何设置覆盖)。

        4
  •  1
  •   Vadim Kotov First Zero    6 年前

    当我遇到这种情况时,我会将不想签入的文件添加到标记为“不签入”的更改集中。我的客户网客户机 SmartSVN 尽管乌龟也会这样做),但可以设置为忽略该更改集,这意味着我不会意外地签入这些更改。

    唯一的缺点是,当您对更改集中的文件进行了更改,而实际上您确实想要签入这些文件时,您必须手动记住签入它们。

        5
  •  0
  •   Pekka    15 年前

    我想不出任何简单的方法来做到这一点。是否无法(在文件/脚本中)动态检查您所在的环境,并相应地进行设置?我以前在PHP中用一个简单的目录检查(如果工作目录等于c:\projects…然后将路径设置为…)

    另一个选项可能是预提交挂钩,它排除或恢复更改的文件,但在前一种情况下,您将不是最新的,在后一种情况下,您必须再次进行更改…六羟甲基三聚氰胺六甲醚。

        6
  •  0
  •   blahdiblah    15 年前

    我很幸运用 svn switch 以防止个性化文件践踏他人的配置。给定一个普通的主干/分支/标签布局,在包含个性化配置文件的分支中创建一个文件夹。然后

    svn switch URL-to-personalized-config URL-to-standard-config
    

    这将导致对配置文件的编辑在分支中被保存,而不是保存到主干中。您可以对配置文件进行版本化的编辑,并且不容易弄乱主干文件。

        7
  •  0
  •   Nick    15 年前

    解决方案取决于您所谈论的更改的数量。我使用.NET网站,因此对于大多数网站,每个环境都有不同的配置文件。例如:

    web.deploy.config
    web.dev.config
    

    这些都将受到源代码管理。然后将其中一个文件复制到运行该文件的服务器上的web.config(使该文件脱离源代码管理)。为我工作。

        8
  •  0
  •   Jason Machacek    15 年前

    在提交之前,我总是检查所有文件的差异,这样我就可以确保不会留下一些调试代码,它给了我第二次检查更改的机会。

    如果您在安装了tksvn w/tkdiff的UNIX/Linux机器上运行,则可以通过以下命令逐个查看每个diff的良好图形表示:

    for FILE in `svn status | grep -v ? | sed -n "s/^[MA]//p"`; do tkdiff $FILE; done
    

    另一种自我检查的聪明方法是签出一个新的存储库副本,然后尝试构建并运行它——如果忘记添加文件或破坏了一些明显的东西,就可以用这种方法进行捕获。

    推荐文章