Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
В случае SVN/TFS у вас будет один огромный недоделанный shelveset (если не используете персональных branch).
TFS (система контроля версий) это не совсем система контроля версий — это часть VS. После SVN это несколько напрягает. Если у меня стоит 3 студии, то чтобы понять какой TFS у меня стоит и работает требуются дополнительные усилия.
… система управления жизненным циклом проекта, где контроль версий — это малая толика всего что есть в TFS.
Во-первых, TFS — это не только система контроля версий, а это система управления жизненным циклом проекта, где контроль версий — это малая толика всего что есть в TFS.
Остальная статья примерно в таком же духе. Чтобы писать про впечатления, надо хотя бы разобраться в вопросе. Вообще не понимаю как вы решились перевести большой проект на TFS, если даже не знаете что такое TFS.
«We continue to see teams run into productivity problems attempting to use TFS as a version control system. Teams that want to practice frequent code checkins, a core part of continuous integration, have found its heavyweight approach significantly drains productivity. This often leads to teams checking in less frequently, causing more problematic merges. We recommend tools such as Git, Perforce, and Subversion instead.»
Ответ: TFS Explorer EveryWhere либо через web-версию (если она развернута).
Вопрос: Если у меня стоит 3 студии, то чтобы понять какой TFS у меня стоит и работает требуются дополнительные усилия
Ответ: TFS — это сервер и VS подключается к нему. Проект привязывается к одному TFS серверу. Смысл держать несколько серверов?
Вопрос: ReadOnly
Ответ: Можно настроить автоматический Check Out при редактировании файла.
Вопрос: Microsoft Visual Studio Team Foundation Server 2013 Power Tools
Ответ: Данный Extension ставиться в зависимости от версии VS.
Вопрос: в это время запускаю «Get Selected Item(s)» получаю ошибку «TF400324
Ответ: Source Explorer в VS позволяет делать все необходимые операций с файлами. Т.е. можно избежать такой ошибки.
лучше всего (или все равно не удобно делать по другому) работать только через студию.
TFS это не отделимая часть студии
дело в том, что TFS командной строки инсталлирован под папкой соответствующей студии. как это понимать?
в мире TFS на мой взгляд все эти инструменты привязаны к соответсвующей студии.
какая принципильаная разница?
Зачем его вообще куда то привязывать?
TFS (система контроля версий) это не совсем система контроля версий — это часть VS. После SVN это несколько напрягает. Если у меня стоит 3 студии, то чтобы понять какой TFS у меня стоит и работает требуются дополнительные усилия.
TFVC не имеет независимого клиента командной строки, а является частью некой оболочки.
Кроме того, каждай VS технически устанавливает своего клиента командной строки TFVC.
Иногда нужно что то маленькое подебагировать и изменить, то очень естественно делать именно в той студии, в которой продукт был собран.
Кстати, я не использую VS213 для добавления проектов, потому что TFVC (не знаю какой версии) почему то меняет файла солюшина не так как VS2012.
Иногда нужно что то маленькое подебагировать и изменить, то очень естественно делать именно в той студии, в которой продукт был собран.
Вы уверены, что «естестественно»? Вы считали сравнительную стоимость содержания зоопарка из нескольких студий vs обновить проекты под актуальную версию?
Кстати, я не использую VS213 для добавления проектов, потому что TFVC (не знаю какой версии) почему то меняет файла солюшина не так как VS2012.
Это тоже очень странно. TFS вообще не трогает файлы, этим занимается только и исключительно студия. Вы обнаружили несовместимость 2013 и 2012?
Лично я уверен, потому что цена ошибки (особенно в работающей версии) очень велика.
Не знаю кто, но кто то создает файл ".vssscc", всякие ключи (типа SccTeamFoundationServer) в файле солюшина.
А с другой стороны, релиз все равно должен собираться на билд-сервере, какая вам разница, что на машине разработчика стоит? Или вы на билд-агенте тоже ставите больше одной версии тулчейна?
TFS (система контроля версий) это не совсем система контроля версий — это часть VS. После SVN это несколько напрягает. Если у меня стоит 3 студии, то чтобы понять какой TFS у меня стоит и работает требуются дополнительные усилия.
Соответственно, функциональность TFS не зависит от версии установленной студии, зависит только то, что видно в UI.
Q: Can I use the same workspace in multiple instances of Visual Studio?
A: Although Visual Studio does not block you from running multiple instances against the same workspace, this usage is not supported. Also, working this way is more likely to cause problems if you are using a local workspace.
Могу ли использовать локальный режим в VS2010 если у меня на компьютере стоит VS2013 с его TFS?
Если у меня стоит 3 студии, то чтобы понять какой TFS у меня стоит и работает требуются дополнительные усилия.
Привык, что никакие файлы проекта не являются «read-only», поэтому (если стоит по крайней мере VS2012) пытаешься включать «local mode».
Power Tools не может принести новый бранч с сервера на компьютер, для этого все равно придется запустить студию.
Довольно часто некие ревизии не надо сливать из версии 1 в версию 2.
замержить все эти ревизии в одну ревизию версии 2.
Я привык создавать бранчи для любых вещей, которые потребуют какого то времени или проверок на тестовой машине.
TortioseSVN имеет простой и понятный поиск (и фильтр) по истории бранча
Если у меня стоит 3 студии, то чтобы понять какой TFS у меня стоит и работает требуются дополнительные усилия.
Что значит «какой у меня стоит». Локально у вас должно быть несколько workspaces, на сервере можно посмотреть какой репозиторий «промаппен» в какую папку. Я называю workspace так, чтобы было понятно в какой студии он используется в основном — но открывать можно в любой.
После работы с локальным workspace в более старших версиях студии никогда не было проблем с более младшей.
Единственное, для чего это может быть важно — для local workspaces, но их я вообще не использую и если мне нужна локально вся история — я просто использую DCVS с самого начала…
Привык, что никакие файлы проекта не являются «read-only», поэтому (если стоит по крайней мере VS2012) пытаешься включать «local mode».
Ой, а как я привык, что файлы readonly! Сразу понимаешь какие файлы ты менял а какие нет, никуда не надо лезть. Если файл readonly, значит в него ты еще не лазил. Notepad++ при открытии таких файлов не дает их редактировать — сразу все понятно. Правой кнопкой мыши — и TFS => Check-out for edit. Работает даже если файл уже открыт в Notepad++.
Локальные репозитории — это совсем для другого, это попытка добавить DCVS, на мой взгляд тут лучше использовать тогда Git/Hg, потому что они для этого лучше заточены.
PowerTools это такая надстройка над tfs.exe, поэтому он ставится в зависимости от версии VS, у меня стоит несколько версий локально.
Бранчи без проблем достаются тем же tfs.exe, какие хотите и куда хотите.
Довольно часто некие ревизии не надо сливать из версии 1 в версию 2.
Все-таки получить новую ветки на локальный диск через юзер интерфейс Tortoise быстрее чем открывать студию или веб-интерфейс+командная строка.
Довольно часто некие ревизии не надо сливать из версии 1 в версию 2.
А для чего такие ревизии помечать как «смерженные»? Для этого вполне можно сделать частичный мерж и отметить все оставшиеся ревизии лейблами, типа «not to merge in production».
замержить все эти ревизии в одну ревизию версии 2.
А зачем это нужно? При мёрже у вас в истории все-равно будет одна ревизия (на момент коммита мёржа), зато всегда можно посмотреть какие из ревизий в него вошли. Или что Вы пытаетесь достичь этим?
Я привык создавать бранчи для любых вещей, которые потребуют какого то времени или проверок на тестовой машине.
Я привык создавать бранчи для любых вещей, которые потребуют какого то времени или проверок на тестовой машине.
Это делается так:
1) Идете в Pending Changes, делаете Shelve Changes при СНЯТОЙ галочке Preserve changes locally. У вас получается откат всех локальных изменений в Shelveset.
2) Дальше тестируете что хотите.
3) При необходимости сохранить делате снова Shelve без сохранения изменений локально.
4) Возвращаетесь к своим изменениям делая Unshelve с сервера.
TortioseSVN имеет простой и понятный поиск (и фильтр) по истории бранча
Тут я полностью согласен. Но я никогда не пользовался этими возможностями SVN, даже на проектах с 70000 коммитов.
Опишите, пожалуйста, поподробнее сценарии где Вы их используете и как.
Shelvesets. Мы используем их везде. Не надо больше никаких diff, просто готовишь нужный тебе набор изменений и он доступен любому из твоей команды. Нужно ревью — готовишь Shelveset. Предлагаешь изменения в проект без коммита — делаешь Shelveset. и так далее.Как по мне — так довольно кустарная замена форкам (или веткам) и мердж-реквестам.
TFS (система контроля версий) это не совсем система контроля версий — это часть VS. После SVN это несколько напрягает. Если у меня стоит 3 студии, то чтобы понять какой TFS у меня стоит и работает требуются дополнительные усилия.
Но это вырывает мозг от осознания того что автор не понимает о чём говорит
When you check in code into TFS, a changeset is created. A changeset is a set of files and work items associated together a time of check in. If you don't associate work items with the code, the changeset will just consist of just the set of files. The heart of this is due to the fact that the check-in process is an atomic transaction. When you perform a check in, the process tells TFS how many files and work items are going to be checked in. Assuming all the files get transferred properly into TFS, TFS will generate a changeset number. This number can be used to trace back what code files and work items were worked on.
A Subversion client commits (that is, communicates the changes made to) any number of files and directories as a single atomic transaction. By atomic transaction, we mean simply this: either all of the changes are accepted into the repository, or none of them is. Subversion tries to retain this atomicity in the face of program crashes, system crashes, network problems, and other users' actions.
Each time the repository accepts a commit, this creates a new state of the filesystem tree, called a revision. Each revision is assigned a unique natural number, one greater than the number assigned to the previous revision. The initial revision of a freshly created repository is numbered 0 and consists of nothing but an empty root directory.
Все таки «версия 1 „- это версия 1 продукта, а “версия 2» — это следующая версия продукта (это не совсем mail и dev).
Если продолжить ваш сценарий, то может быть этот баг уже был починен (или не актуален) в версии 2 (dev — как вы его назвали), в этом случае нет необходимости переносить ветвь (так правильно?) из версии 1 в версию 2.
Чисто теоритически, если баг в dev был уже пофиксен, то можно было просто «спустить» необходимые изменения (конкретные changeset'ы) из dev в main.
P.S. С этим уже ознакомились?
С этим уже ознакомились?Если меня что-то и удивляет в «мире» TFS, так это упомянутый монументальный труд. Почему-то гораздо более всеобъемлющий Git Flow (или вообще Driessen Workflow) можно описать на одной стороне листа A4, а вот в TFS приходится книги сочинять.
Делать все merg'и через rebase, чтобы при вливании ветки видеть все комиты по фиче рядышком (в логе)и стонать за то, как все плохо :-) Это в системе где 90% слияний — «перемотка». Таки «вы просто не умеете его готовить» (с).
Rebase не от хорошей жизни жеMercurial, например?
Rebase не от хорошей жизни же. После вливания ветки я обычно в логе смотрю комиты, на всякий случай, без rebase — они разбросаны по логу.
$git checkout dev
$git merge bug_fix
$git checkout dev
$git rebase bug_fix
$git checkout bug_fix
$git rebase dev
$git checkout dev
$git merge bug_fix
Я дико извиняюсь, а на кой? Что вы с этими исходниками делать-то потом собираетесь?!
Ну и да… по способу вам уже ответили.
TfsTeamProjectCollection tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://address"));
VersionControlServer versionControl = tfs.GetService<VersionControlServer>();
return versionControl.GetMergeCandidates(fromBranch, toBranch, RecursionType.Full);
Опыт использования TFS после перехода с SVN