我对切换的概念感到困惑(使用tortoise svn)。我们是一个由3名开发人员组成的团队,我在这里是Dev2。
首先,我尝试使用以下步骤进行切换(比方说,目前正在使用trunk并希望在分支机构v1.0中开始工作)
如果我在上面做错了,请告诉我?
但是,之后我跳过了切换,然后我们的工作给了我们以下输出:
一切正常,没有切换那么切换的概念是什么?
此外,如果我在切换时在主干中有未提交的文件会怎样?
答案 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应该只更新本地签出以指向服务器上的新位置。例如如果有人在存储库中移动了文件夹。
任何未提交的文件应该没问题 - 交换机只是对本地文件系统的更改。在您查看差异或类似的切换后,它将指向新的存储库。