7

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

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

我已经尝试在同一个存储库中设置第二个分支(结果适得其反,将整个树复制到其存储库的根目录中——我不会再搞砸了)。

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

我正在考虑使用 SVK——看起来它可能会有所帮助,但我不太清楚一种可行的模式。

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

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

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

4

8 回答 8

7

你用什么客户端?

TortoiseSVN 有一个很好的功能,它利用了SVN 内置的更改列表功能如果您右键单击修改过的文件夹并选择“检查修改”,您可以右键单击该对话框中的任何修改过的文件并选择“添加到更改列表 -> 提交时忽略”。从那时起,每当你执行提交时,Tortoise 确保不要将这些文件添加到提交中。请参阅本页上的“从提交列表中排除项目” 。

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

于 2009-11-13T22:51:21.463 回答
3

你可以使用 git-svn。您将获得一个本地存储库,您可以在其中了解本地历史,并在将它们施加到 svn 存储库之前有几个机会考虑您的罪过。

于 2009-11-13T22:44:31.710 回答
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 中的任何设置覆盖)。

于 2009-11-13T22:50:18.740 回答
1

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

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

于 2009-11-13T22:53:35.790 回答
0

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

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

于 2009-11-13T22:47:00.363 回答
0

我很幸运能使用svn switch它来防止个性化文件影响其他人的配置。给定一个正常的主干/分支/标签布局,在分支中创建一个文件夹,其中包含您的个性化配置文件。然后

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

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

于 2009-11-13T22:53:47.197 回答
0

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

web.deploy.config
web.dev.config

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

于 2009-11-13T23:03:23.817 回答
0

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

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

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

另一种仔细检查自己的聪明方法是检查存储库的新副本并尝试构建和运行它——这样你就可以在忘记添加文件或破坏明显的东西时发现它。

于 2009-11-13T23:18:44.527 回答