2012-04-20 130 views
18

我们能否在TFSTeam Foundation Server的开关

分支之间切换

我要的是我下载了一个工作拷贝,现在我想切换到不同的分支,而无需下载的一切,因为对于大型项目将需要大量的的时间,因为开发人员花费很多时间下载

是否有可能,如果没有任何解决方法?

+0

你最终做了什么? – granadaCoder 2013-11-06 20:13:04

回答

4

在TFS分支“物理”出现在源代码管理中,它们就像“特殊文件夹”。所以你可以完全选择你在本地获得什么分支,通过为你的获取定位正确的文件夹。

如果您有例如:

  • 项目[文件夹]
    • 项目A [文件夹]
      • 开发[科]
      • V1 [科]
    • 项目B [folder]
      • 开发[科]
      • V1 [科]

,你想在与“开发”的唯一内容“项目”级别,可以在创建映射您的工作空间定义将对ProjectA和B的V1分支进行修剪。

+0

我可以解除绑定当前的proj并绑定到另一个分支吧? – user804401 2012-04-20 12:10:30

+0

您的项目将被复制,每个分支会有一个版本。要加载项目,您将首先找到要使用的分支,然后加载其中的项目。 – Nock 2012-04-20 12:30:06

-1

只要您使用相同的工作空间并且工作目录包含分支,就可以在多个分支之间切换。

+6

是的,但你怎么能这样做? – 2014-07-10 13:24:12

+0

@Maurizio在丹麦,我相信Jehan33可能会谈论使用TFS通过Eclipse切换分支,这是可能的。 OP没有指出他们使用的是什么IDE – ethesx 2016-03-23 17:55:00

13

你可以通过改变你的工作空间的映射,并使用/remap标志的get命令切换在命令行客户端(仅下载差异)分支:

tf workfold /map $/Branch1 C:\Work 
tf get C:\Work /version:T /recursive 
tf workfold /unmap $/Branch1 
tf workfold /map $/Branch2 C:\Work 
tf get C:\Work /remap /version:T /recursive 
+1

是否可以从IDE执行此操作?例如将相同代码库的所有分支设置为同一个映射的本地工作区文件夹,并切换使用哪个分支? – 2013-11-29 15:28:43

+1

无耻插件:我创建了[TfDash](https://bitbucket.org/Sumo/tfdash)项目,使得* *更容易。 'tf-switch [TFS分支路径]'是你所需要的。 – Sumo 2014-09-25 22:33:14

+0

我的理解是否正确,前两行映射并得到初始分支,所以如果我已经在本地拥有它,我不需要运行它们? 而第3行取消映射我需要切换到的分支,所以如果我从未在本地映射它,我也不需要它吗? 因此,在第4行中,我将Branch2映射到Branch1已经映射的文件夹(不需要取消映射?),然后切换第5行的本地版本。 – ElDog 2014-10-29 10:54:11

1

团队资源管理器无处不有“切换到分支“命令,这可能是你正在寻找的。

Visual Studio中,在另一方面,不具有相同的命令

3

只是为了补充知识基础 - 为这样的目的,我的同事Isak Savo创建有用的批次。您需要在脚本内(顶部)进行一些编辑,以指向正确的源代码位置和适当的分支。核心基本上与Edward Thomson的答案相同,但增加了一些交互式逻辑。我做了一些细微的变化(目录上下文tf命令切换,报价参数 - 如果在目录中所需的空间)和共享它下面:例如

@echo off 
rem Command to switch the current source tree to a new branch. 
rem It's best to not have any pending changes. 
set DEVBRANCH=$/dir/src1 
set RELEASEBRANCH=$/dir/src2 
set SOURCEDIR=c:\sources directory\src 

if exist "%SOURCEDIR%" goto ASK 

echo Source code directory (%SOURCEDIR%) not found, please edit this script to point to the correct directory 
pause 
exit 

:ASK: 
set TARGET= 
echo Available branches are: 
echo Dev: %DEVBRANCH% 
echo Release: %RELEASEBRANCH% 
set /P ANSWER=Specify target branch? [Dev, Release] 
cls 
if /I "%ANSWER%"=="Release" set TARGET=%RELEASEBRANCH% 
if /I "%ANSWER%"=="Dev" set TARGET=%DEVBRANCH% 
if /I "%ANSWER%"=="quit" goto END 
if [%TARGET%] NEQ [] goto SWITCH 

echo "%ANSWER%" unknown, please answer Dev or Release. Specify quit to cancel 
GOTO ASK 

:SWITCH 
rem Navigate to the mapping source folder to avoid "Unable to determine the workspace..." error while invoking tf commands. 
echo Changing directory context 
pushd %SOURCEDIR% 

echo Switching to branch %TARGET% 
echo - Creating new mapping... 
tf workfold /map "%TARGET%" "%SOURCEDIR%" 
echo - Get latest version... 
tf get "%SOURCEDIR%" /remap /version:T /recursive 

popd 
goto END 

:END 

保存switch_branch.cmd并从您的机器的任何目录执行。