【问题标题】:Team Foundation Server switch between branchesTeam Foundation Server 在分支之间切换
【发布时间】:2012-05-01 16:25:09
【问题描述】:

我们可以在 TFS 中的分支之间切换

我想要的是我下载了一个工作副本,现在我想切换到不同的分支而不下载所有内容,因为对于大型项目,由于开发人员花费大量时间下载,这将花费大量时间

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

【问题讨论】:

  • 你最后做了什么?

标签: tfs branch


【解决方案1】:

您可以通过更改工作区映射并将/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

【讨论】:

  • 是否也可以从 IDE 执行此操作?例如将同一代码库的所有分支设置为同一映射的本地工作区文件夹,并切换使用哪个?
  • Shameless Plug:我创建了TfDash 项目,以使做这样的事情更容易tf-switch [TFS Branch Path] 就是你所需要的。
  • 我是否正确理解前两行映射并获取初始分支,所以如果我已经在本地拥有它,我不需要运行它们?第 3 行取消映射我需要切换到的分支,所以如果我从未在本地映射它,我也不需要它吗?所以在第 4 行中,我将 Branch2 映射到 Branch1 已经映射的文件夹(不需要取消映射?),然后在第 5 行实际切换本地版本。
  • 抱歉,打错了,我已经更正了;您取消映射 original 分支,然后映射 new 分支。即使为此目的取消映射后,TFS 也会记住您在本地拥有的文件。
  • 嗯,我只做了第一步和最后一步,它似乎工作正常:tf workfold /map "$/NewBranch" C:\Work 然后tf get c:\Work /remap /version:T /recursive
【解决方案2】:

在 TFS 中,分支“物理地”存在于源代码管理中,它们就像“特殊文件夹”。因此,您可以通过定位正确的文件夹来完全选择您在本地获得的分支。

如果你有例如:

  • 项目 [文件夹]
    • 项目A [文件夹]
      • 开发[分支]
      • V1 [分支]
    • ProjectB [文件夹]
      • 开发[分支]
      • V1 [分支]

如果您想获得只有“Dev”内容的“Projects”级别,您可以在 Workspace 定义中创建映射以覆盖 ProjectA 和 B 的 V1 分支。

【讨论】:

  • 我可以取消绑定当前项目并绑定到另一个分支对吗??
  • 您的项目将被复制,每个分支将有一个版本。要加载项目,您首先要找到要使用的分支,然后加载其中的项目。
【解决方案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 并从您机器上的任何目录执行。

【讨论】:

    【解决方案4】:

    Team Explorer Everywhere 有一个“切换到分支”命令,这可能是您正在寻找的。​​p>

    另一方面,Visual Studio 没有相同的命令...

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • @Maurizio 在丹麦,我相信 Jehan33 可能正在谈论通过 Eclipse 使用 TFS 切换分支,这是可能的。 OP 没有说明他们使用的是什么 IDE
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多