从SVN更新时是否可以始终覆盖本地更改?

时间:2009-09-14 07:36:38

标签: svn

我在Subversion存储库中有一个文件,几乎每次在IDE中打开它都会发生变化,因此几乎每次更新都会产生冲突。

是否可以强制SVN始终使用存储库中的文件覆盖本地文件,即使存在本地更改?

编辑:这是一个VB6项目文件。它们包含引用的ActiveX类的GUID和它们的本地文件名。打开项目时,将自动更新本地文件名。它必须受版本控制,因为没有它就无法构建应用程序。

6 个答案:

答案 0 :(得分:4)

首先,我为你不得不在VB6工作感到遗憾。

其次,我认为你真正需要做的是在更新之前删除文件。所以在这种情况下,你可以有一个名为'do update'的bat文件,你只需双击它,而不是实际使用TortiseSVN(或其他)来进行更新。你让这个蝙蝠删除它,然后,毫不奇怪,更新。

令人难以置信的蹩脚,但我确实看到了你的问题,该文件需要在源代码管理中,但你想忽略一般的更改,除非明确提交。

答案 1 :(得分:1)

我想这是一个文件,它始终由IDE动态创建/修改。

我认为如果您将此文件添加到 svn:ignore 设置,这将更符合您的需求。有关详细信息,请查看svn-configuration。此设置使您的SVN在添加或导入时忽略此文件。有了它,您还可以保留对文件的本地更改,以防您有必要在某一时刻执行此操作。

答案 2 :(得分:1)

已更新:由于您描述的文件是自动生成的,因此最好的办法是取消文件的版本并让每个工作副本都有一个独立的副本。如果没有它,您不必担心项目构建,因为VB将在需要时重新创建文件(对吗?)。如果您正在使用持续集成或其他构建服务器,那么只需在构建服务器上保留该文件的副本,或者甚至保留适用于构建服务器的SVN副本(命名方式不同,以免冲突),并修改您的构建过程以重命名该文件。

例如,假设您的文件名为“foo”,则可以在SVN中保留文件“foo.example”。然后,当你在任何给定的机器上检查项目第一次时,你要做的第一件事就是将“foo.example”重命名为“foo”,然后打开你的IDE。 IDE将对其进行修改,但您的修改将保留在本地。所以他们不会受到更新的影响,如果你在你的svn:ignore列表中添加“foo.example”,你就不必担心会意外地将其检入。唯一的缺点是它会使你的初始化结帐稍微涉及一些,但这似乎是一个很小的代价。

一个好的经验法则是,如果您有任何文件的内容可以从存储库中的其他文件完全生成,那么它们可能不属于存储库。相反,要么将它们完全保留,要么用根据需要生成它们的脚本替换它们。

答案 3 :(得分:1)

  

是否可以始终强制SVN   用一个覆盖本地文件   在存储库中

这不是一个好主意。 VB6项目文件确实包含需要进行版本控制的信息。例如,每当您向项目添加模块时,都会在其中添加带有文件引用的行。因此,您不应该只是自动放弃对其进行的任何本地更改。

问题在于提交,而不是更新:避免冲突的最佳方法是通过不提交VB6 IDE所做的不必要的更改。这可以通过教育开发人员实际来实现检查他们提交的更改。在TortoiseSVN中,可以很容易地从提交对话框中检查每个文件的更改,并逐行恢复更改。

在提交时检查更改是您应该做的事情。而且我认为对于由IDE半自动进行的更改更为重要。您需要控制代码库中发生的事情。

答案 4 :(得分:0)

嗯,你总是可以使用结账而不是更新。

我不是百分百肯定,但由于SubVersion只在文件之间存储差异,我不确定你能不能这样做。您还可以使用还原到整个本地存储库。

答案 5 :(得分:0)

首先,如果每次打开IDE时此文件都在更改,则可能不应该在版本控制中。您应该删除它并将其添加到忽略列表。

如果您想在更新前拒绝本地更改,则必须在更新前进行还原。 SVN本身不会这样做,你需要手动完成。