乌龟svn混乱 - 转换

时间:2013-02-21 01:12:37

标签: svn tortoisesvn

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

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

  1. 右键单击/branches/v1.0
  2. 选择tortoisesvn - 开关
  3. To Path:/branches/v1.0
    • 头部修订(已检查)
    • 切换深度:工作副本
  4. 如果我在上面做错了,请告诉我?

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

    1. 所有开发人员都在干线工作,然后开发已经结束了
    2. 使用v1.0
    3. 创建了一个标记
    4. 在标记v1.0中发现了错误,因此从标记v1.0
    5. 创建了分支v1.0
    6. 还需要新功能,因此Dev1(开发人员1)继续在主干中工作,其中Dev2和Dev3正在分支机构v1.0上工作
    7. Dev2在分支v1.0中编写代码并提交
    8. Dev3在分支中获取更新(获取Dev1的更新),然后在分支v1.0中编写代码并提交
    9. Dev1获取分支更新(获得Dev2和Dev3的更新)
    10. Dev2和Dev3在trunk中获取更新(从Dev1获得更新)
    11. 一切正常,没有切换那么切换的概念是什么?

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

2 个答案:

答案 0 :(得分:3)

想象一下,如果你正在使用trunk,突然意识到你应该在分支机构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!

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

我强烈反对这种想法,因为你很容易混淆工作目录所代表的内容。我看到一些错综复杂的提示提取分支信息并在提示中显示它。但是,我在项目和分支(或主干)之后命名我的结账,并为每个项目使用单独的工作目录。

速度应该不是问题。一个非常大的Subversion项目需要五到十分钟才能结账 - 只需要足够的时间来获得一杯咖啡。在这个千兆字节磁盘大小的时代,空间也不应该是溢价。使用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.

答案 1 :(得分:2)

svn switch应该只更新本地签出以指向服务器上的新位置。例如如果有人在存储库中移动了文件夹。

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