如何避免检查SVN存储库的本地更改?

时间:2009-11-13 22:42:55

标签: svn svk

我必须对项目文件进行本地更改才能使其在不同的环境中运行。现在两次我不小心检查了这些变化(并搞砸了其他人的运行环境)。

可能有很多更好的方法来设置我们的构建,但由于我在一个已建立的项目中担任顾问,我无法真正改变客户的工作方式。

我已经尝试在同一个存储库中设置第二个分支(这会反复发生,复制其存储库根目录中的整个树 - 我不会再次讨论它了。)

尝试设置我自己的第二个存储库并将这些文件检入新存储库。这也非常混乱,基本上没有用。

我正在考虑SVK - 看起来它可以提供帮助,但我无法找到一种可行的模式。

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

我意识到我可以跟踪我想要检查的更改,然后只检查那些,但这是一个人类依赖和错误的程序,到目前为止,已经失败了两次(因为我是一个马车人)。 / p>

关于如何做到这一点的任何建议?

8 个答案:

答案 0 :(得分:7)

您使用的是哪个客户?

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

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

答案 1 :(得分:3)

你可以使用git-svn。你得到一个当地的回购,你可以在那里找到当地的历史,并有几个机会在svn回购上给你的罪行之前考虑你的罪。

答案 2 :(得分:2)

我通常会尝试安排一些事情,以便SVN检出的标准文件可以被一个单独的文件覆盖,即svn:ignore-ed

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

(当然,显而易见的问题是,当jetty.xml获得一些更新时,它们不会被合并到jetty-local.xml中,但这可能不像你已经面临的问题那么简单。 )

在我曾经工作过的一个PHP项目中,使用两个独立的代码树 - / system检出所有系统类,/ local镜像它,但是除非本地类是添加,在这种情况下,它是优先加载。对于自己的好处,这可能会过于花哨。

如果您拥有的配置文件是问题,我使用的另一个解决方案是安排分层读取它们(即读取global.cfg.default,然后使用global.cfg.local中的任何设置覆盖)

答案 3 :(得分:1)

当我遇到这种情况时,我会将我不想签入的文件添加到标有“请勿检查”的更改集中。我的SVN客户端(SmartSVN,虽然Tortoise也会这样做)然后可以设置为忽略该更改集,这意味着我不会意外地检查这些更改。

唯一的缺点是当您更改了您确实要签入的更改集中的文件时 - 您必须手动记住检查它们。

答案 4 :(得分:0)

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

另一个选项可能是排除或恢复已更改文件的预提交挂钩,但在前一种情况下,您不会更新,而在后一种情况下,您必须再次进行更改...嗯。

答案 5 :(得分:0)

我很幸运使用svn switch来阻止个性化文件踩踏他人的配置。给定正常的主干/分支/标签布局,在分支中包含您的个性化配置文件。然后

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

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

答案 6 :(得分:0)

解决方案取决于您所谈论的变化数量。我在.net网站上工作,所以对于大多数网站,每个环境都有不同的配置文件。 e.g:

web.deploy.config
web.dev.config

这些都将受到源头控制。然后将其中一个文件复制到运行它的服务器上的web.config(将此文件保留在源代码管理之外)。适合我。

答案 7 :(得分:0)

我总是在提交之前检查所有文件的差异,这样我就可以确保我没有留下一些调试代码,这让我有机会审查我的更改。

如果你在安装了tksvn w / tkdiff的Unix / Linux机器上运行,你可以用这个命令逐个检查每个diff的漂亮图形表示:

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

另一种仔细检查自己的聪明方法是查看存储库的新副本并尝试构建并运行它 - 这样,如果您忘记添加文件或破坏了明显的内容,就可以捕获。