我们可以在 TFS 中的分支之间切换吗
我想要的是我下载了一个工作副本,现在我想在不下载所有内容的情况下切换到不同的分支,因为对于大型项目,这将需要很多时间,因为开发人员会花费大量时间下载
是否有可能,如果没有任何解决方法?
您可以通过更改工作区映射并使用命令的/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
在 TFS 中,分支“物理地”存在于源代码管理中,它们就像“特殊文件夹”。因此,您可以通过定位正确的文件夹来完全选择您在本地获得的分支。
例如,如果您有:
并且您想获得仅包含“Dev”内容的“Projects”级别,您可以在 Workspace 定义中创建映射以覆盖 ProjectA 和 B 的 V1 分支。
只是为了补充知识库——我的同事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 并从您机器上的任何目录执行。
Team Explorer Everywhere 有一个“切换到分支”命令,这可能是您正在寻找的。
另一方面,Visual Studio 没有相同的命令......
只要您使用相同的工作区并且工作目录包含分支,您就可以在多个分支之间切换。