我需要澄清一下“svn switch”的行为。我正在使用 SVN 版本 1.6.5。
通过阅读手册,我对行为的理解是本地更改将被保留。所以我希望一个本地添加的文件仍然存在于我的工作目录中svn switch
。
但是,我和我的同事已经看到了几个新文件被交换机删除的实例。不幸的是,我们无法弄清楚如何重现这一点。
是否存在某些情况(功能或已知错误)svn switch
会删除本地添加的文件?
我需要澄清一下“svn switch”的行为。我正在使用 SVN 版本 1.6.5。
通过阅读手册,我对行为的理解是本地更改将被保留。所以我希望一个本地添加的文件仍然存在于我的工作目录中svn switch
。
但是,我和我的同事已经看到了几个新文件被交换机删除的实例。不幸的是,我们无法弄清楚如何重现这一点。
是否存在某些情况(功能或已知错误)svn switch
会删除本地添加的文件?
我认为当您有未提交的更改时切换是一个坏主意。首先,使用 将本地更改提交到分支svn cp . <branch URL>
,然后切换。否则,您可能会遇到非常棘手的情况。
想象一下,在您切换到的版本中,您在本地添加的文件已经存在,并且完全不同。或者,如果您添加了一个完整的文件目录,而该目录无法与您要切换到的版本中的文件充分合并,该怎么办。你真的想要一场大冲突吗?
显示的是“S”状态svn status
,这意味着源代码树的不同部分有不同的版本。当 SVN 与切换期间的本地更改混淆时,就会发生这种情况。它只是在开关中间坏了,然后恢复起来很痛苦。发生在我身上好几次了。这就是为什么我总是确保我的工作副本在运行之前没有本地修改svn sw
。
它不应删除本地添加的文件或未版本控制的文件。边缘情况是交换机移动或删除目录的地方,但在这种情况下应该存在树冲突。
如果我认为可能存在树冲突,我经常做的是保存我当前更改的补丁。然后我知道我可以清除我的工作副本并在必要时重新开始,而不会丢失我的工作。
svn diff > ../somewhere/safe/save.diff
# Break stuff
patch -p0 < ../somewhere/safe/save.diff
的行为svn switch
非常类似于svn update
: 如果切换的目标是一个路径,其中一些文件相对于工作副本丢失,这些文件将从工作副本中删除。
就像 Ivan 所说,您应该提交更改然后切换。