15

我需要澄清一下“svn switch”的行为。我正在使用 SVN 版本 1.6.5。

通过阅读手册,我对行为的理解是本地更改将被保留。所以我希望一个本地添加的文件仍然存在于我的工作目录中svn switch

但是,我和我的同事已经看到了几个新文件被交换机删除的实例。不幸的是,我们无法弄清楚如何重现这一点。

是否存在某些情况(功能或已知错误)svn switch会删除本地添加的文件?

4

3 回答 3

11

我认为当您有未提交的更改时切换是一个坏主意。首先,使用 将本地更改提交到分支svn cp . <branch URL>,然后切换。否则,您可能会遇到非常棘手的情况。

想象一下,在您切换到的版本中,您在本地添加的文件已经存在,并且完全不同。或者,如果您添加了一个完整的文件目录,而该目录无法与您要切换到的版本中的文件充分合并,该怎么办。你真的想要一场大冲突吗?

显示的是“S”状态svn status,这意味着源代码树的不同部分有不同的版本。当 SVN 与切换期间的本地更改混淆时,就会发生这种情况。它只是在开关中间坏了,然后恢复起来很痛苦。发生在我身上好几次了。这就是为什么我总是确保我的工作副本在运行之前没有本地修改svn sw

于 2009-12-11T10:54:22.713 回答
7

它不应删除本地添加的文件或未版本控制的文件。边缘情况是交换机移动或删除目录的地方,但在这种情况下应该存在树冲突。

如果我认为可能存在树冲突,我经常做的是保存我当前更改的补丁。然后我知道我可以清除我的工作副本并在必要时重新开始,而不会丢失我的工作。

svn diff > ../somewhere/safe/save.diff
# Break stuff
patch -p0 < ../somewhere/safe/save.diff
于 2009-12-11T11:01:16.477 回答
0

的行为svn switch非常类似于svn update: 如果切换的目标是一个路径,其中一些文件相对于工作副本丢失,这些文件将从工作副本中删除。

就像 Ivan 所说,您应该提交更改然后切换。

于 2009-12-11T11:02:08.940 回答