8

Итак, у меня есть ситуация, когда у нас есть проект с 10 разработчиками. Каждый разработчик, когда они приходят в течение дня, произвольно выпускает машину для использования в целях развития в тот день. Имена машин разные, например DEV01 - DEV10. В то время, когда они выдаются разработчикам, машины идентичны, и никакие изменения, которые разработчики не делают в течение дня, не сохраняются на машинах (изменения исходного кода хранятся в TFS, а не локально). Это, конечно, фактически виртуальные машины, но это не очень важно для точки зрения.Можно ли использовать рабочие пространства TFS без привязки к конкретной машине?

Проблема заключается в том, что каждое утро, разработчики столкнулись с 3-х выпусков:

1) машины, что они назначены не может быть той же машине, они в последний раз были назначены. Например, DevMan A, возможно, вчера использовал DEV04 и сегодня получил DEV06. Его определения рабочего пространства теперь привязаны к DEV06; он должен создать новое рабочее пространство или перенести старое рабочее пространство в DEV04.

2) Аппарат, которым они назначены, возможно, использовался вчера, и некоторые из отображений могут конфликтовать. Например, DevMan A может иметь DEV04 сегодня и хочет создать рабочую область, сопоставляющую папку проекта с «C: \ MyProj \ Solution». Однако у DevMan B вчера был DEV04, и он использовал ту же папку проекта. TFS теперь жалуется.

3) Это может быть первый раз, когда они находятся на данной машине. Теперь им нужно воссоздать для этой машины все свои сопоставления с источником-источником для новой машины.

Все эти проблемы могут быть решены простым способом в каждом конкретном случае, но с самого начала он производит некоторую производительность. Мы бы предпочли, чтобы определения рабочей области TFS могли быть «расслаблены», так что они не включали имя машины в определение каким-то образом. Если это не так, если кто-то знает о решении вышеупомянутых проблем, которые могут запускаться автоматически или с ограниченным вмешательством пользователя, это также было бы идеальным.

+2

Настоящий ответ: не делайте этого так. Работайте над использованием вызовов командной строки для настройки рабочих пространств для каждого компьютера и использования sugestion @ Perica-Zivkovic для сопоставления папок. –

+0

Что это за бизнес? Я не думаю, что это способствовало написанию хорошего кода, но если это сработает для вашей команды, то все веселее! – jcolebrand

+0

@ drachenstern: Я знаю, что это очень поздно, но многие компании работают таким образом для подрядчиков или оффшорных команд для управления ресурсами, которые являются очень бегло и по соображениям безопасности. Это очень законная настройка. – captaintom

ответ

7

Во-первых, супер-очевидный ответ - посвятить машины пользователям.

... Во-вторых, если вы действительно хотите, чтобы решить эту проблему, как указано:

Вы не можете использовать рабочее пространство, не назначая их к конкретной машине. Это предположение неявно в продукте. Но вы можете обмануть его :)
Предупреждение: Этот рецепт, похоже, работает, но я лично не использовал проект, используя его.

  1. Назначить «Виртуальное» имя компьютера для каждого пользователя, т.е. UseridVM
  2. Для каждой виртуальной машины следующего (постоянного или запуск сценария) требуется установка:
    • создать новые переменные среды «User Переменная», т.е. _CLUSTER_NETWORK_NAME_ = UseridVM
  3. Приятно иметь: использовать виртуальный жесткий диск, который посвящен иД пользователя и отображенный (или смонтированный с помощью сценария) в„D:“, который следует за пользователем из VM на VM ,

Теперь, когда пользователь открывает Visual Studio, рабочая область будет использовать указанное значение «UseridVM» в качестве имени машины, таким образом, одно и то же рабочее пространство будет найдено на каждой машине.

Если у вас нет постоянного виртуального жесткого диска, каждый пользователь должен обязательно выполнить «реальный» «Получить последний» (получить конкретную версию, отметьте все поля) при запуске в течение дня, потому что рабочее пространство запоминает какие файлы уже были загружены и не будут повторно загружать их, если они чувствуют, что они уже существуют.

+0

Итак, _CLUSTER_NETWORK_NAME_ - переменная среды, распознанная TFS в качестве замены имени машины? – GWLlosa

+1

Да. В частности, она распознается ОС Windows как локальное переопределение HOSTNAME. И TFS предположительно использует HOSTNAME. –

+0

Это, похоже, работает довольно хорошо в сочетании со сценарием при запуске, чтобы установить переменную env для каждого пользователя. – GWLlosa

0

Вы можете разместить рабочую область на общем сетевом диске, поэтому не имеет значения, на какой машине (виртуальной или иной) зарегистрирован разработчик. Это прекрасно работает, но вам также придется настроить некоторые COM-файлы раз, чтобы они остались довольны.

+0

Это решает проблему №2, но не проблема №1. – GWLlosa

+0

Если вы свяжете корень (скажем) P: \ dev \ users \ my.name \ tfs один раз на каждой машине, все готово. –

+0

файлы могут быть в сети, но необходимо создать рабочее пространство для каждого ПК, на котором вы работаете –

3

1.) Для каждой рабочей станции, на которой вы собираетесь работать, вам необходимо определить рабочее пространство (удаленное локальное сопоставление < =>). Вы можете хранить исходные файлы в сети (не рекомендуется это из-за кэширования VS), но локальная рабочая область (определение отображения) должна существовать на конкретном ПК для конкретного пользователя.

2.) Создайте отдельные локальные папки для каждого разработчика, чтобы предотвратить беспорядок разных людей, работающих в одной папке, и получать последние данные из других. Например:

c:\Projects\DevManA\... 
c:\Projects\DevManB\... etc. 

3.) Это, вероятно, вызовет много дискуссий, но я рекомендую отображение корень ваших TFS на локальном рабочую область, например. DevManA отображение:

$/ to C:\Projects\DevManA\ 

Затем, когда вы проверяете проекты вне вы получите структуру:

c:\Projects\DevManA\TFSProject1\.. 
c:\Projects\DevManA\TFSProject2\.. 
c:\Projects\DevManA\TFSProject3\.. 

т.д.

Это легко и быстро отображение каждый может сделать в 5 секунд, и вы готов идти.Тогда все имеют одинаковый макет на диске, как в TFS, который также «подходит для мозга» более легко.

+0

@ Richard Вот почему я сказал, что это может вызвать дискуссии: D Истина в некотором роде, но на практике у вас есть ситуация, когда не все разработчики работают над всеми проектами TFS (это один фильтр). Даже если вы работаете над большим проектом, чем хорошая практика (опять-таки опасность для обсуждения: D), чтобы иметь филиалы для разработчиков + филиалы (другой фильтр) и в вашем разветвлении отдельных разработчиков, чтобы сохранить код хорошо организованным (еще один фильтр). Таким образом, после всех этих фильтров разработчик работает от одного до двух решений в день и не нуждается в «получении» больше, чем это. –

+0

Правда, * разработчикам * обычно не нужно работать с большими поддеревами, но TFS этого не знает. По дизайну все команды TFS работают против всего рабочего пространства, если вы не укажете фильтр пути. Если вы ** когда-либо ** забываете это сделать, побочные эффекты могут варьироваться от путаницы до перегрузки сервера до фактических ошибок. Например: при проверке небольшого исправления на Ветвь 1 вы случайно совершили большой незавершенный набор изменений, который был в ожидании в Branch 2 (но разделял одно и то же рабочее пространство). Я сделал это :( –

2

Я не знаю, если это будет соответствовать требованиям, указанным в вопросе, но вы можете проверить это:

http://blogs.msdn.com/granth/archive/2009/11/08/tfs2010-public-workspaces.aspx

TFS 2010 добавил общественные/общие рабочие области, которые могут использоваться несколькими пользователей на одном компьютере.