Не уверен, что это все, о чем вы еще не знаете, но я использую ртуть локально в течение некоторого времени, и до сих пор я думаю, что преимущества перевешивают дополнительные накладные расходы на управление двумя системами управления версиями , Вот как я делал вещи:
я сделал TFS проверку репозитория HG, который я считаю своим «хозяином». Я получаю обновления от TFS и привязываю их к этому репо, поэтому он содержит самое текущее состояние проекта из TFS. Важно то, что никаких изменений в этом нет, независимо от обновления TFS или слияния Hg (которое является частью 2)
В любое время, когда мне нужно внести изменения, я клонирую свое «мастерское» репо и делаю моя работа там. Я обнаружил, что клон для каждой функции или истории на самом деле довольно прост в управлении и выглядит довольно чистым. Как только я завершаю функцию, я возвращаю Hg обратно в «master» репо, в котором были применены все обновления TFS. Это позволяет мне использовать возможности Merurials merge, которые до сих пор превосходят TFS, чтобы подвергнуть сомнению, как TFS может претендовать на слияние кода вообще. Как только слияние завершено, я фиксирую его в Hg, а затем проверю эти изменения на TFS. Лучшая часть этого заключается в том, что, когда я делаю checkin для TFS, мне не нужно что-либо слить. Очень очень хорошо.
Теперь, вот те вопросы, которые я нашел с этим подходом:
Крупнейшим из них является тот факт, что TFS паршивый при обнаружении изменений. Существует плагин make writable, который вы можете использовать для внесения изменений в файлы, когда они обновляются или объединяются Mercurial. Для этого есть два варианта. Вы можете либо заставить TFS выйти в автономный режим, и в этот момент он предположит, что нужно что-либо записывать, или вы можете использовать инструмент сравнения в инструменте управления версиями и выбирать измененные файлы и индивидуально проверять их.Оба являются crappy IMO
Связи с контролем источника по-прежнему находятся на уровне проекта, даже если вы исключаете файлы управления источником TFS из своего hg-репозитория (что вы должны делать). Это не очевидно, пока вы не добавите файл в решение, после чего он попытается добавить его в исходный элемент управления. Вы можете «Отменить ожидающие изменения» и избавиться от добавления контроля источника, но это очень раздражает.
Хорошая новость заключается в том, что я использовал этот подход к работе через довольно массивное слияния, которые я думаю, что бы заставил меня обратиться к какой-либо форме твердых препаратов, если бы я был вынужден использовать инструменты TFS, чтобы сделать это ,
Я еще не применял это для обновления ветвей в TFS, но я предполагал, что это будет намного лучше, чем параметры, которые вы даете для слияния в TFS. В соответствующей заметке, поскольку вы можете одновременно проверять куски рабочих функциональных возможностей, использование слияния TFS было бы менее проблематичным только потому, что все изменения, необходимые для функции, были бы объединены в одном месте.
Одна вещь, которую я не пытался решать, - это обмен ею по всей команде. Отчасти причина в том, что это действительно не обязательно для всей команды. Я работаю удаленно, поэтому наличие локального хранилища - это большое дело и экономит много времени. Другие члены моей команды разработчиков могут или не могут получить такую же выгоду от этого подхода, но я нахожу это довольно крутым, чтобы я мог не работать так, как они работают.
Update Я давно хотел обновить этот ответ на какое-то время с дополнительной информацией на основе замечаний, и некоторые из моих опытов, работающих с большими хранилищами TFS.
Во-первых, как следует из комментариев Eric Hexter, вы можете использовать rebase extension, чтобы лучше интегрировать фиксации из ваших рабочих репозиториев в ваш основной репозиторий TFS. Хотя, в зависимости от того, как вы хотите, чтобы ваши коммиты появлялись в TFS, вы можете использовать collapse extension, чтобы выровнять ваши изменения в один фиксатор (это упростит откаты в TFS). Существует также команда «онлайн» от TFS PowerTools, которая может заставить работу TFS узнать, что изменилось легче (еще раз спасибо Эрику за упоминание, что в его blog post)
Теперь, когда я изначально написал это, я работал над проект, который имел только одну ветвь TFS, которую использовали разработчики, и был довольно маленьким, поэтому клонирование хранилищ не было большим делом. Позже я обнаружил, что работаю над проектом, у которого было репо, которое составляло около 1,5 ГБ после проверки, и намного больше после сборки, и часто включало переключение между ветвями в TFS. Очевидно, что этот подход не очень подходит для этой среды (в частности, поскольку в какой-то момент невозможно было создать решения в произвольном каталоге.
Проблема с размерами лучше всего обрабатывать, используя технику, похожую на ветви ветвей gits, а не на клонирование репозитории для новых каталогов.Есть несколько вариантов для этого.Я думаю, что лучше всего на самом деле использовать bookmark extension и создавать темы «закладки», а не темы ветвей. Вы также можете использовать именованные ветви, но у них есть небольшой недостаток: быть постоянным и путешествовать с любыми клонами, которые вы можете сделать (если вы хотите поделиться своим отличным гибридом TFS-Hg с коллегой). Закладки являются локальными для вашего репо и эффективно указывают на фиксацию и перемещение с головой. так что они могут использоваться в любом месте, где Hg ожидает ревизии (поэтому объединяет, обновляет, e дц). Вы можете использовать их для создания закладки TFS в качестве основной «ветки», которая получает только обновления от TFS и сливается с работой темы, каждая из которых имеет свои собственные закладки, и вы можете удалить ее после того, как вы вернетесь в TFS. Если вы предпочитаете использовать именованные ветви, то вы можете применять точно такие же методы, что удобно.
Теперь проблема с несколькими ветвями сложнее, тем более что «ветви» TFS являются фактически копиями каждого файла из исходной ветви, а это означает, что каждый раз, когда вы тянете ветви с TFS, ваше репо собирается получить столько больше. Один из возможных способов справиться с этим - использовать комбинацию названных ветвей Hg и закладок, так что у вас есть ветвь для каждой ветви TFS, а затем создайте закладки для вашей работы из этих ветвей. Настоящая головная боль в этих сценариях фактически связана с рабочими пространствами TFS через все это. Вы можете удалить сопоставления в своих рабочих пространствах и получить довольно далеко, но как только вы вернетесь в свой рабочий каталог, вы должны быть осторожны с TFS, топая файлами (на самом деле это полезно, когда TF PowerTools пригодится). Попытка оставить рабочую область при подключении, когда ваши ветви переключения становятся уродливыми. Парой инструментов, которые приятно иметь в вашем наборе инструментов, являются Hg purge extension и команда TF PowerTools «scorch». Оба эффектно удаляют файлы, которые не находятся в контроле версий (технически «scorch» гарантирует соответствие TFS и вашей локальной рабочей директории, поэтому она также может обновлять файлы).
Для меня этот процесс стал довольно обременительным и подверженным ошибкам. Недавно я переключился на использование git с git-tfs, так как он управляет рабочими пространствами TFS для меня и снимает с себя большую нагрузку, связанную с этой стороной. К сожалению, там нигде нет «hg-tfs», иначе я бы выбрал это.
Я сделал аналогичный подход, за исключением того, что он был благословенным центральным репо. И перечисленные вами проблемы существуют и там. Я пытаюсь настроить свой рабочий процесс на функции сфокусированные и функциональные возможности патчей до сих пор, я был очень доволен этим. –
Слияние с TFS при использовании встроенного инструмента. У Джеймса Мэннинга есть хорошая статья о том, как поменять его на что-то гораздо лучше (мне нравится DiffMerge от SourceGear) http://blogs.msdn.com/b/jmanning/archive/2006/02/20/diff-merge-configuration- in-team-foundation-common-command-and-argument-values.aspx – StingyJack
Я рассказывал о своем опыте использования этой установки. http://www.lostechies.com/blogs/hex/archive/2010/06/22/using-mercurial-as-a-local-repository-for-team-foundation-server-start-front-n.aspx Я добавил несколько сценариев powershell для автоматизации использования hg и TFS powertools. Другое расширение, которое я использовал, было hg rebase, чтобы слияние на стороне HG было очень простым. Я знаю, есть две простые команды powershell. push и pull, которые делают тяжелый подъем работы команд hg и tfs команд в правильном порядке. –