我们有一个“SDK”VM,我们分发给所有开发人员。不是理想的解决方案,但不幸的是,这是我们所处情况的最佳解决方案。我们每月分发一次,所以我试图做到这一点,一旦开发人员得到它,尽可能少的“设置”。
由于多种原因,我们无法更改主机名。
我需要知道是否有一种方法可以创建一个每个人都可以使用的主机名/工作区/文件夹位置,而不会获得“使用中的路径”和其他类型错误。
我之前将其设置为SHARED工作区,但这导致开发人员不使用“获取特定版本”并且更改会丢失。
我也尝试过使用SymLink文件夹,但是没有成功。
之前有人遇到此设置吗?你是如何成功地完成这项工作的?
答案 0 :(得分:0)
如果您希望使用单台计算机让团队进行协作,请在高级工作区选项中选择公共工作区。
但是,如果要在多个Visual Studio实例中使用相同的工作区,则不支持此用法,但Visual Studio不会阻止您针对同一工作区运行多个实例。此外,如果您使用本地工作区,以这种方式工作更有可能导致问题。
答案 1 :(得分:0)
所以这就是我能够“解决”这个问题的方法。也许是hacky但可能对某人有帮助。
我创建了一个批处理文件来自动设置工作区。由于计算机名称对于每个人来说都是相同的,因此每个用户需要不同的路径。我还需要特定文件夹中的实际源代码,所以这就是我非常简短的做法。
如果将来有人需要,这是实际的代码。
@echo off
SET me=%~n0
SET parent=%~dp0
SET log=%TEMP%\%me%.txt
SET %ERRORLEVEL%=0
echo ============================================
echo %me%
echo ============================================
:AdminCheck
net session >nul 2>&1
IF %ERRORLEVEL% EQU 0 (
ECHO.
) ELSE (
ECHO Must run as an Administrator. Exiting...
ECHO.
EXIT /B 1
)
:DeleteWarning
echo.
echo WARNING! This will delete all code in C:\TFS so make sure
echo all of your code is committed or your code will be lost!!!
echo.
set /p accept=To continue deleting type 'y':
if not "%accept%" == "y" exit
:StartProcess
cls
echo ============================================
echo %me%
echo ============================================
echo.
:: get user name used to create name directory and workspace name
set /p userDir=Network Username:
:: set script variables
set sourceBase=C:\TFS
set sourcePath=%sourceBase%\%userDir%
set sourceWidgetPath=%sourcePath%\Widgets
set sourceProviderPath=%sourcePath%\Providers
:: set TFS related variables
set tfsCollection=[TFSSERVER]
set workspaceName=%userDir%-SDK
set tfsWidgetPath=[$/TFSPATH]
set tfsProviderPath=[$/TFSPATH]
:: set symlinked destination paths
set sdkWidgetPath=C:\SDK\Widgets
set sdkProviderPath=C:\SDK\Providers
:: launch VsDevCmd so we can execute tfs commands
call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\VsDevCmd.bat"
:DeleteDirectories
echo.
echo ## Delete TFS Directory ##
del /q /s /f "%sourceBase%\*" 1>nul
for /d %%x in ("%sourceBase%\*") do @rd /s /q "%%x"
:CreateDirectory
echo.
echo ## Create TFS Directory ##
mkdir %sourcePath%
cd %sourcePath%
:SetupWorkspace
echo.
echo ## Creating TFS Workspace %workspaceName% ##
:: create workspace
tf workspaces /remove:*
tf workspace /new %workspaceName% /collection:%tfsCollection% /noprompt
:: map specific folders
tf workfold /map %tfsWidgetPath% %sourceWidgetPath% /collection:%tfsCollection% /workspace:%workspaceName%
tf workfold /map %tfsProviderPath% %sourceProviderPath% /collection:%tfsCollection% /workspace:%workspaceName%
::remove base path mapping
tf workfold /unmap $/ /collection:%tfsCollection% /workspace:%workspaceName%
:GetSourceCode
echo.
echo ## Get Latest Source Code ##
tf get %tfsWidgetPath% /recursive
tf get %tfsProviderPath% /recursive
:CreateSymLink
cls
echo.
echo ## Setup Widget and Provider SymLinks ##
:: remove target folders if exist
IF EXIST %sdkWidgetPath% RD /q /s %sdkWidgetPath%
IF EXIST %sdkProviderPath% RD /q /s %sdkProviderPath%
:: create symlinks
mklink /D %sdkWidgetPath% %sourceWidgetPath%
mklink /D %sdkProviderPath% %sourceProviderPath%
cls
echo ============================================
echo %me% [Completed]
echo ============================================
echo.
echo Workspace Created: %workspaceName%
echo.
echo Widget Source: %sourceWidgetPath%
echo Widget Working Directory: %sdkWidgetPath%
echo.
echo Provider Source: %sourceProviderPath%
echo Provider Working Directory: %sdkProviderPath%
echo.
PAUSE