2010-01-08 4 views
1

Мы разрешаем внешним консультантам работать с частью нашего источника. Мы создали новый проект TFS и предоставили им права на это. Ветвление работает между проектами TFS, поэтому мы можем развернуть «реальный» проект TFS, над которым они работают, в проекте консультантов. Однако мы хотим только разоблачить его части. Вот то, что мы хотим (упрощенно):Филиал выборочно в TFS

 
OurProject 
    Mainline 
    Applications 
     Secret1 
     NewApp 
    Libraries 
     Secret2 
     Shared 

ConsultantProject 
    Mainline-Branch 
    Applications 
     NewApp 
    Libraries 
     Shared 

Если мы просто расшириться Mainline и удалять секретные папки на ветке, сливаясь назад должно быть сделано аккуратно, чтобы избежать удаления папки Магистраль Secret. Мы хотим упростить будущие слияния (в обоих направлениях) и минимизировать риск.

Как это можно сделать?

ответ

2

Я знаю, что это может не отвечать на ваш вопрос, а скорее на ваш вопрос. Почему бы просто не установить разрешения для скрытия этих секретных элементов от консультантов и филиалов, как в любое другое время?

+0

+1, держите его просто –

1

Вместо того, чтобы разветвляться, а затем удалять файлы/папки из ветки, откройте только файлы, к которым вы хотите иметь доступ.

например:

  • Отрасль Магистраль -> $/ConsultantProject/Магистраль-Branch.
  • Щелкните правой кнопкой мыши на $/ConsultantProject/Mainline-Branch/Applications/Secret1 и отмените оплату.
  • Аналогично отменить заказ на $/ConsultantProject/Mainline-Branch/Libraries/Secret2.
  • Проверьте свою ветку ($/ConsultantProject /).

С этим завершенным объединением от одного к другому не повлияет на файлы/папки, в которые вы не вступили.

+0

Простите, это просто неправда. Если они последуют вашим советам, TFS попытается разделить Secret1 и Secret2 каждый раз, когда они сливаются с Mainline. Они будут вынуждены объединять папки по папкам. –

+0

Простите, прошло какое-то время, так как я объединил проект, который мы обработали таким образом. Вы правы, слияние ствола с веткой будет пытаться разделить Secret1 & Secret2; Тем не менее, нетрудно повторить шаг «Отменить проверку» в этих папках всякий раз, когда вы объединяетесь в этом направлении. Однако этот метод упрощает объединение ветвей в магистраль, поэтому он по-прежнему является верным решением его проблемы. –

+0

+1 за усилие - спасибо! – TrueWill

0

TFS действительно любит, чтобы все зависимости проекта находились внутри одной папки. Я бы немного изменил структуру папок. Вот как я это сделаю.

TeamProject 
    SecretApplication 
     SharedLibrary1 
    Application1 
     SharedLibrary1 
    SharedLibrary1 
    ConsultantApplication1 
     SharedLibrary1 

Вот деталь ...

Обратите внимание, как все приложения являются сверстники? SharedLibraries являются разделяемыми/разветвленными в приложениях, которые их используют. Таким образом, приложения могут двигаться вперед в своем собственном темпе и сбрасывать общие изменения в своем собственном темпе и объединять свои изменения с общим кодом обратно в своем собственном темпе. TeamProject-> SharedLibrary1 - это «основная линия» для SharedLibrary1. Всюду, где вы видите SharedLibrary1, это ветка. Каждая папка приложения - это собственная «магистраль», что делает вашу структуру более ориентированной на приложения, чем «вся наша работа».

С помощью этой настройки вы просто создаете ветвь приложения 1 и называете ее «КонсультантАппликация1». Таким образом, вы можете настроить свою безопасность, чтобы ваши консультанты могли видеть только одно приложение и все его зависимости. Они могут сливаться и тянуть по желанию. Ну, они не смогут слиться, не увидев исходный проект, но вы можете. Все остальные приложения в вашем командном проекте будут невидимы для них.

Сообщите мне, если я что-то неправильно понял или есть некоторые требования, препятствующие использованию такой структуры. Если в Application1 есть секретная общая библиотека, нам придется подумать об этом еще немного, но я думаю, что в любом случае проблемы с компиляцией. Несмотря на это, размещение всех зависимостей для приложения под одной папкой помогает тонну и является отличной практикой.

+0

Было бы неплохо, но в нашей ситуации это просто невозможно. У нас есть структура проекта/папок, которая хорошо работает для наших разработчиков; это новое требование, которого мы не предвидели. – TrueWill

+0

Кстати, делая это, это означает, что SecretApplication и Application1 не могут совместно использовать проект библиотеки, если он не скопирован (содрогнется) или не скомпилирован. У VS нет проблем с компиляцией проектов из другой папки. – TrueWill

+0

VS может скомпилировать проекты из другой папки, но вы не получите каких-либо преимуществ управления версиями с этой настройкой. Если SecretApplication и Application1 имеют ветви SharedLibrary1, то они могут расходиться в своем развитии. Они защищены от изменений, которые может потребоваться другим приложениям в библиотеке, и могут получить последние или слить, когда они будут готовы. Это главное преимущество не просто ссылки на библиотеку в исходной папке. Тем не менее, я слышу вас на ранее существовавших условиях. Трудно перестроить исходные папки в большом унаследованном приложении. –

1

Я согласен с Алексом. TFS не имеет встроенных механизмов для обработки разреженных ветвей. Ближайший аналог в TFS является разветвлением/слиянием по метке, но эта стратегия приносит массу управленческих издержек, которые очень подвержены ошибкам.

Итак, позвольте системе филиал/слияние сделать свою работу и использовать ACL, чтобы ваши консультанты не могли видеть секретный соус.

Обратите внимание, что для полной защиты вам необходимо создать для них 2-е решение, которое не включает ни одного из секретных проектов, а затем ACL - основное (все включено) решение с глаз долой. Независимо от того, какие проекты не зависят от Секретных проектов? Если это так, вам нужно будет сделать что-то подобное (хотя и немного более активно).

+0

+1 - спасибо за подробности! – TrueWill

Смежные вопросы