3

我对切换的概念感到困惑(使用乌龟 svn)。我们是一个由 3 名开发人员组成的团队,我在这里是 Dev2。

首先,我尝试使用以下步骤进行切换(比如说,目前正在使用主干并希望在分支 v1.0 中开始工作)

  1. 右键单击 /branches/v1.0
  2. 选择tortoisesvn - 切换
  3. 到路径:/branches/v1.0
    • 头部修订(选中)
    • 切换深度:工作副本

如果我在上面做错了什么,请告诉我?

但是,在那之后我跳过了切换,然后我们的工作给了我们以下输出:

  1. 所有开发人员都在主干工作,然后开发结束
  2. 使用 v1.0 创建了一个标签
  3. 在标签 v1.0 中发现错误,因此从标签 v1.0 创建了一个分支 v1.0
  4. 还需要新功能,因此 Dev1(开发人员 1)继续在 Dev2 和 Dev3 正在分支 v1.0 上工作的主干中工作
  5. Dev2 在分支 v1.0 中编写代码并提交
  6. Dev3 在分支中获取更新(获得 Dev1 的更新),然后在分支 v1.0 中编写代码并提交
  7. Dev1 在分支中获取更新(获取 Dev2 和 Dev3 的更新)
  8. Dev2 和 Dev3 在主干中获取更新(从 Dev1 获取更新)

一切都可以正常工作而无需切换,那么切换的概念是什么?

另外,如果我在切换时在trunk中有未提交的文件会怎样?

4

2 回答 2

3

想象一下,如果您在主干上工作,突然意识到您应该在分支 2.3 上工作。您可以签出分支 2.3,但您将丢失所有工作。您可以尝试复制它,但这可能需要很长时间。

切换允许您切换本地副本的基础,而不会丢失任何工作。您修改的文件仍将包含您的修改。您添加的文件仍将被添加。您删除的文件仍将被删除。

$ svn co $REPO/trunk/proj1
[...work...work...work...]   #Whoops! Should have been on Release 2.3 branch!
# svn switch $REPO/branches/2.3/proj1
[...work...work...work...]   #Everything is fine and dandy!

有些人使用 switch 来切换他们的工作副本,而无需再次结帐。例如,我完成了我的工作proj1,现在我在 Release 2.3 分支上做了一些工作。我只需切换到该分支并节省时间,因为我不必重新下载所有内容。另外,我节省空间!

我强烈反对这种想法,因为您很容易混淆您的工作目录所代表的内容。我见过一些复杂的提示来提取分支信息并将其显示在提示中。但是,我以我的项目和分支(或主干)命名我的结帐,并为每个项目使用单独的工作目录。

速度应该不是问题。完成一个非常大的 Subversion 项目需要 5 到 10 分钟的检查时间——刚好够喝杯咖啡。在这个千兆字节磁盘大小的时代,空间也不应该是一种溢价。使用svn switch不应该是普遍现象。

有一次,如果托管您的存储库的服务器发生更改,您有时会切换。但是,现在有一个专门svn relocate用于此目的的特殊命令:

$ svn co svn://repo/proj1   # We were using svnserve
$ svn relocate svn://repo http://repo/svn  #Now we're using Apache https
$ svn relocate http://repo/svn/proj1       #Alternative to the above.
于 2013-02-21T04:15:30.553 回答
2

svn 开关应该只更新您的本地结帐以指向服务器上的新位置。例如,如果有人在存储库中移动了文件夹。

任何未提交的文件都应该没问题——切换只是对本地文件系统的更改。当您查看差异或类似内容时切换后,它将指向新的存储库。

于 2013-02-21T01:16:23.673 回答