Август 2016

ТОМ 31 НОМЕР 8

DevOps - Выполнение фиксаций в Git: исследование системы управления версиями в Visual Studio 2015

Джонатан Уолдман | Август 2016

Продукты и технологии:

Visual Studio 2015, Git, Team Foundation Version Control

В статье рассматриваются:

  • выбор Git в сравнении с Team Foundation Version Control в качестве технологии управления версиями проекта Visual Studio 2015;
  • доступ к специализированному инструментарию Git и его использование;
  • размещение исходного кода в репозитарии Git;
  • получение со слиянием (pull), фиксация (commit) и помещение (push) кода при работе с удаленным репозитарием.

Начиная с версий за 2013 год, Visual Studio и Team Foundation Server предлагают изначальную поддержку Git, невероятно популярной системы управления версиями исходного кода, которая в корне отличается от многих традиционных вариантов. Чтобы дополнить этот вариант управления версиями, Microsoft добавила богатый клиентский инструментарий для Git в Visual Studio. Но как обращаться к этим инструментам и пользоваться ими?

В этой статье я расскажу, чем Git отличается от технологии управления версиями, связанной с Team Foundation Server (TFS) и официально называемой Team Foundation Version Control (TFVC). Затем я углублюсь в то, как конфигурировать Git, создавать локальный репозитарий (local repository, repo), подключаться к нему и работать с ним, в том числе записывать изменения (stage changes) и выполнять фиксацию изменений (commit changes). Кроме того, мы обсудим, как управлять ветвями, включая слияние и просмотр истории изменений, и как подключаться к различным типам удаленных репозитариев, включая синхронизацию изменений.

Я создавал иллюстрации к этой статье, используя Visual Studio 2015 Update 2 в редакции Enterprise, но рассматриваемые здесь элементы доступны во всех остальных версиях Visual Studio 2015, в частности в редакциях Community и Express. Для экономии места я подготовил иллюстрации, которые иногда содержат более одного экранного изображения, и четко говорю об этом в тексте. Кроме того, я использую нумерованные маркеры, чтобы привлечь ваше внимание к определенным элементам в иллюстрации. Ссылаясь на какую-либо иллюстрацию, я обычно упоминаю только маркеры на ней. Например, во фразе вроде «см. рис. 1, маркер 1, а затем маркер 2» я подразумеваю, что маркер 2 находится на рис. 1.

Панель Home (автономный режим) в окне Team Explorer
Рис. 1. Панель Home (автономный режим) в окне Team Explorer

Обзор

Если вы используете Visual Studio более чем несколько лет, то, вероятно, у вас сложилось впечатление, что TFVC является правильным выбором при разработке решений в группе. Зачастую так и есть, особенно если в ваших проектах уже применяется TFVC или если они требуют хранения очень больших файлов, содержат большое количество файлов (выходящее за рамки того объема и количества, которые кто-то счел бы разумным передавать по сети) либо должны иметь возможность блокировать файлы, находящиеся под управлением версиями. Однако, поскольку разработчики все чаще работают удаленно, внося свой вклад в единый программный проект, более новые группы разработки стремительно переходят на Git как на децентрализованную систему управления версиями с широкой кросс-платформенной поддержкой, позволяющей эффективно работать в автономном режиме, когда вы выполняете фиксацию изменений или отменяете их, управляете ветвями и обращаетесь к истории. Лучше всего то, что, когда вы готовы, вы можете перейти в онлайновый режим и подключиться к тому же удаленному репозитарию, который обновляется остальной частью группы, и синхронизировать свои изменения в автономном режиме, используя самые разнообразные способы.

Visual Studio 2015 IDE опирается на LibGit2 API и коммуникационный уровень LibGit2Sharp в реализации всех средств Git, которые предоставляются через клиентский инструментарий. LibGit2 — это кросс-платформенное ядро Git безо всяких зависимостей и с открытым исходным кодом, полностью написанное на C. LibGit2Sharp — библиотека, написанная на C# и выполняемая как управляемый процесс в Microsoft .NET Framework. Она выступает в роли дружественного к .NET интерфейса между Visual Studio и LibGit2 и кардинально упрощает для группы разработки в Visual Studio программирование двухстороннего коммуникационного канала с библиотекой LibGit2. LibGit2Sharp тоже доступна вам, а значит, вы можете задействовать свой любимый .NET-язык для написания собственных инструментов и утилит Git. Подробнее о LibGit2 и LibGit2Sharp см. на libgit2.github.com.

Team Explorer в Visual Studio является основным GUI, через который вы в конечном счете взаимодействуете с LibGit2 — нижележащим ядром Git. Чтобы открыть его, выберите View | Team Explorer или нажмите Ctrl+\, а затем Ctrl+M. В верхней части окна Team Explorer расположена панель инструментов, содержащая синие навигационные кнопки Back/Forward, за ними — белая кнопка Home, зеленая Connect и синяя Refresh. Щелкните кнопку Home и вы увидите окно, аналогичное тому, что показано на рис. 1.

Под панелью инструментов вы видите метку Home (маркер 1). Рядом с этой меткой имеется белая стрелка вниз (маркер 2), указывающая на соединение с раскрывающимся меню. Щелкните любое место вдоль этой метки для вывода меню (маркер 4). Как панель инструментов Team Explorer, так и это контекстное меню позволяет удобно переключаться между различными панелями Team Explorer; это другая вариация метафоры диалогового окна с вкладками: тип панели, который вы видите в данный момент (в нашем случае Home), появляется и в метке панели (маркер 1), и в строке заголовка Team Explorer (маркер 3).

Конфигурирование Git

Прежде чем использовать Git в Visual Studio, вы должны сконфигурировать его глобальные настройки. Для этого перейдите в панель Home в Team Explorer. Ее раздел Project содержит набор кнопок для просмотра отложенных изменений (pending changes), управления ветвями и синхронизации с удаленными репозитариями (рис. 1, маркер 5). Щелкните Settings, чтобы открыть панель Settings, а затем щелкните Global Settings в разделе Git. Появится панель Git Settings (рис. 2, маркер1). Эти глобальные настройки не связаны с конкретным репозитарием Git; они предоставляют значения по умолчанию, когда вы создаете новые репозитарии (впоследствии вы можете переопределить эти значения по умолчанию индивидуально для каждого репозитария). Укажите свои имя в User Name (это должно быть ваше полное имя; допускаются пробелы), адрес электронной почты и местоположение репозитария по умолчанию, каковым является папка по умолчанию, где вы хотите, чтобы Visual Studio хранила создаваемые репозитарии Git (маркер 2).

Панель Git Settings в Team Explorer
Рис. 2. Панель Git Settings в Team Explorer

Кроме того, укажите, надо ли сопоставлять изображения автора TFS или Gravatar при операциях в Git. Если вы выберете Gravatar, знайте, что она передает адрес электронной почты, связанный с каждой фиксацией, в Gravatar как ключ поиска (lookup-key). Затем Gravatar возвращает изображение, сопоставленное с этим адресов электронной почты. Таким образом, эта обманчиво безобидная функциональность в итоге делится контактной информацией о каждом члене вашей группы с некоей третьей стороной — по-видимому, вы предпочтете запретить это. Наконец, выберите, надо ли по умолчанию выполнять фиксацию изменений после слияния (маркер 3). Если вы вносите какие-либо изменения в эти поля, щелкните Update для их сохранения (маркер 4).

В отдельном разделе панели можно задать, какие Diff Tool и Merge Tool следует использовать; в настоящее время эти параметры получают по умолчанию те значения, которые соответствуют инструментам самой Visual Studio. Если вы хотите дополнительно настроить выбранные параметры, то, возможно, вам придется вручную редактировать конфигурационный файл, в который они записываются из этого окна. Это файл .gitconfig, который находится в вашей личной папке.

Работа с локальным репозитарием

Если вы создаете собственные проекты в одиночку и приняли правильное решение поместить свой код в систему управления версиями, то можете начать работать в автономной режиме с локальным репозитарием Git, а впоследствии при необходимости перейти на подключенный удаленный репозитарий.

Чтобы создать пустой репозитарий, перейдите в панель Team Explorer Connect (рис. 3, маркер 1) и щелкните New под Local Git Repositories (маркер 2; New отображается серым цветом, потому что я уже щелкнул ее). Введите локальный путь и название репозитария, например свой путь к источнику по умолчанию с добавлением \MyNewestRepo (маркер 3), и щелкните Create (маркер 4). Это приведет к созданию папки MyNewestRepo (это ваш рабочий каталог), содержащей папку .git наряду с двумя файлами: .gitignore и .gitattributes. Хотя я показываю папку .git на экранном снимке, она является скрытой: она содержит собственно репозитарий Git (вспомогательные файлы и базу данных Git), и обычно ее не следует трогать. Но, поскольку она содержит весь ваш репозитарий Git, вы, вероятно, захотите сделать ее резервную копию, и поэтому важно знать, что она существует. Файл .gitattributes указывает, как Git должен обрабатывать окончания строк и какие программы запускать при дифференциации файла в текущем репозитарии; файл .gitignore инструктирует, что Git не должен отслеживать файлы с определенными расширениями или в определенных папках (по умолчанию определены расширения файлов .suo, .user, .pdb, .tmp и все файлы в папках debug и release). При необходимости добавьте другие расширения файлов и папки, чтобы минимизировать размер репозитария Git.

Панель Team Explorer Connect
Рис. 3. Панель Team Explorer Connect

После создания нового репозитария вы увидите, что он появляется под разделом Local Git Repositories. Дважды щелкните любой репозитарий, отображаемый в списке (рис. 3, маркер 6), для подключения к нему; этот репозитарий выделяется полужирным шрифтом, и вы попадаете на панель Home, которая подтверждает, что вы успешно подключились к выбранному репозитарию (рис. 4, маркер 2).

Если теперь щелкнуть Settings, то откроется доступ к настройкам, специфичным для данного репозитария. Используйте их, если вам нужно переопределить значения, унаследованные из глобальных настроек Git. Например, довольно часто изменяют адрес электронной почты для текущего репозитария, если идет работа над проектом для конкретного клиента и нужно использовать выделенный для этого проекта адрес электронной почты. Кроме того, вы можете щелкать предоставляемые ссылки, чтобы напрямую редактировать файлы .gitignore и .gitattribute, указывать, какие инструменты Diff & Merge следует использовать, добавлять удаленные ресурсы (remotes) и просматривать другие атрибуты, связанные с текущим репозитарием.

Помните, что рабочий каталог Git — это родительская папка, которая содержит каталог .git. После создания и конфигурирования пустого репозитария для добавления в него файлов нужно сначала добавить эти файлы в рабочий каталог. Git увидит их, но не включит в репозитарий, пока вы не подготовите их к записи (stage) и не выполните их фиксацию (commit). Вооружившись этими знаниями, просто используйте рабочий каталог так, как вам нужно, и приступайте к выполнению рабочего процесса Git по фиксации изменений, как только будете готовы.

Начинать с пустого репозитария с последующим добавлением файлов — это лишь один из вариантов; можно начать с файлов решения. Чтобы создать новое решение вместе с репозитарием Git, выберите File | New Project. Откроется диалог New Project с флажком Create new Git repository. Если его установить, Visual Studio создает новое решение и новый репозитарий Git вместе с двумя конфигурационными файлами (.gitattributes и .gitignore) в рабочем каталоге нового проекта. В качестве альтернативы, если у вас имеется существующее решение и вы хотите поместить его в Git для управления версиями, откройте решение и выберите File | Add to the Source Control в Visual Studio. Обе процедуры создают новый репозитарий Git вместе с конфигурационными файлами .gitattributes и .gitignore.

Всякий раз, когда вы открываете решение, находящееся под контролем версий со стороны Git, Visual Studio автоматически подключается к репозитарию в рабочей папке этого решения. Аналогично, когда вы используете панель Team Explorer Connect для подключения к существующему репозитарию, Visual Studio динамически сканирует все папки в рабочем каталоге этого репозитария, чтобы найти файлы .sln и перечислить их в разделе Solutions панели Home. Например, если вы соединяетесь с репозитарием MyNewestRepo, то можете увидеть список решений, чем-то похожий на выноску, как на рис. 4 (маркер 4). Когда Visual Studio идентифицирует такие решения, связанные с репозитарием, дважды щелкните какой-нибудь элемент, если вы хотите открыть соответствующее решение в IDE.

Панель Team Explorer Home, подключенная к репозитарию
Рис. 4. Панель Team Explorer Home, подключенная к репозитарию

Внесение изменений

Когда вы используете Visual Studio для открытия решения, находящегося в Git под контролем версий, Solution Explorer отображает информативные значки рядом с элементами в своем древовидном списке. Значки указывают состояние элементов в вашем рабочем каталоге по сравнению с состоянием элементов, существующих в репозитарии Git, к которому вы подключены в данный момент. Так, на рис. 5 видны синий значок замка рядом с возвращенными в систему контроля версий элементами (checked-in items) (маркер 1), красная галочка рядом с измененными элементами (маркер 2) и зеленый знак «плюс» рядом с добавленными элементами (маркер 3). Если вы обнаружите неизвестный вам значок, задержите над ним курсор мыши и увидите полезную подсказку. Эти значки обычно точно отражают состояние элементов, но, если вносите изменения в элементы вне Visual Studio IDE, может понадобиться щелкнуть кнопку Refresh на панели инструментов Solution Explorer, чтобы обновить представление.

Solution Explorer со значками, указывающими состояния, связанные с контролем версий
Рис. 5. Solution Explorer со значками, указывающими состояния, связанные с контролем версий

После работы с элементами в своем решении вы, вероятно, захотите записать изменения в репозитарий Git, а затем зафиксировать или, возможно, отменить какие-то изменения. Чтобы приступить к управлению внесенными вами изменениями, выберите Team Explorer | Home | Changes. В панели Changes (рис. 6, маркер 1) вы увидите все обнаруженные изменения (маркер 2). Щелкните значок плюса (маркер 12) для записи всех измененных изменений или значок минуса для отмены записи (unstage) всех элементов (маркер 13). Кроме того, вы можете перетаскивать элементы между разделами Changes (маркер 2) и Staged Changes (маркер 3).

Панель Team Explorer Changes
Рис. 6. Панель Team Explorer Changes

Щелкните правой кнопкой мыши измененный элемент для вывода меню, позволяющего открыть соответствующий файл, просмотреть его историю, сравнить его с исходной версией, открыть файл исходного кода и вывести панель информативных аннотаций рядом с ним, записать изменения в нем и отменить их (маркер 14). Если вы хотите сравнить какое-то изменение с исходной версией файла, дважды щелкните измененный элемент для запуска окна просмотра различий (Diff) (рис. 7). В этом окне есть две панели: в левой панели показывается исходная версия в локальном репозитарии Git, а в правой — его версия в вашем рабочем каталоге. По крайнему справа краю наглядно отображается, где имеются различия между файлами (маркер 1). Панели подсвечивают красным цветом всю строку кода, где было удаление (маркер 2), и зеленым — где было добавление (маркер 3); кроме того, инструмент Diff обводит удаленный или добавленный текст в строке кода красной или зеленой рамкой соответственно. В верхней части каждой панели расположены удобные раскрывающиеся элементы (маркер 4), которые позволяют быстро переходить по разделам кода.

Инструмент Diff по умолчанию в Visual Studio
Рис. 7. Инструмент Diff по умолчанию в Visual Studio

Когда вы будете готовы к фиксации изменений, добавьте описание этой фиксации (рис. 6, маркер 4), а затем щелкните многорежимную кнопку Commit (маркер 5). Эта кнопка по умолчанию предлагает режим Commit Staged, но также позволяет осуществить операции помещения (push) и синхронизации (sync) (это имеет смысл только в контексте подключения к удаленному репозитарию). После успешного завершения операции фиксации Team Explorer сообщает идентификатор фиксации (маркер 15).

Заметьте: панель Changes информирует о том, что вы работаете с локальной ветвью unit_test_project (рис. 6, маркер 6). Строка состояния Visual Studio также сообщает, с какой ветвью вы работаете (маркер 10), и отображает другую полезную информацию в реальном времени, относящуюся к текущему репозитарию Git. Например, она показывает количество неопубликованных изменений (т. е. сколько изменений еще не передано в удаленный репозитарий [маркер 7]), количество записанных изменений (маркер 8), название текущего репозитария (маркер 9) и имя текущей ветви (маркер 10). Более того, эти разделы в строке состояния действуют как кнопки. Так, если вы щелкнете текущий репозитарий, Visual Studio откроет панель Team Explorer Connect, где сообщаются подробные сведения по текущему репозитарию, а если вы щелкнете текущую ветвь, всплывающее меню предложит набор команд, относящихся к работе с ветвями.

Как и в любой системе управления версиями, при фиксации изменений в репозитарии вы добавляете соответствующую запись в историю фиксаций. Эти записи в истории включают имя пользователя и адрес электронной почты, предоставленные вами в Git Settings, поэтому любой, у кого есть доступ к истории, сможет просмотреть, кто, что и когда сделал. Более того, когда вы помещаете свои локальные изменения в удаленный репозитарий, вместе с ними пересылается и история. Когда другие члены группы синхронизируют свои локальные репозитарии с удаленным, они смогут увидеть историю, сгенерированную вашими изменениями.

Управление ветвями

Visual Studio поддерживает базовые и дополнительные средства Git для работы с ветвями. Для управления ветвями откройте панель Branches, выбрав Team Explorer | Home | Branches (рис. 8, маркер 1). В верхней строке панели вы увидите ссылки для быстрого доступа к операциям слияния (merge), перемещения (rebase) и другим (маркер 2). Под ними показывается раздел Active Git Repositories (маркер 3) и список ветвей, содержащихся в каждом репозитарии; текущая ветвь выделяется полужирным шрифтом (маркер 4). Чтобы переключиться на другую ветвь, дважды щелкните ее. Затем Visual Studio выполняет извлечение (checkout) в выбранной ветви.

Панель Team Explorer Branches
Рис. 8. Панель Team Explorer Branches

Щелкните правой кнопкой мыши конкретную ветвь, чтобы увидеть меню доступных действий (маркер 5). Вы можете извлечь (check out) выбранную ветвь, создать новую локальную ветвь на основе существующей локальной ветви, выполнять слияние существующей локальной ветви с выбранной, выполнить перемещение (rebase) из выбранной локальной ветви в другую существующую локальную ветвь, осуществить жесткий (hard reset) или смешанный сброс (mixed reset) в выбранной ветви, отобрать лучшее (cherry-pick) из выбранной ветви или удалить текущую ветвь. Если вы выбираете слияние, Visual Studio обеспечивает полную поддержку обнаружения конфликтов слияния и выводит редактор конфликтов (conflict editor), с помощью которого можно вручную разрешать эти конфликты.

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

Подключение к удаленному репозитарию

До сих пор я ограничивался рассмотрением работы в автономном режиме с локальным репозитарием Git. Обычно локального репозитария достаточно, если вы работаете в одиночку и у вас есть надежный способ резервного копирования папки .git из рабочего каталога. Однако, когда вы работаете над групповым проектом или когда вам нужно использовать размещенный сервис в качестве хранилища резервных копий, вы должны подключиться к удаленному репозитарию.

Если вам нужен полный контроль над своим репозитарием или если вы чувствуете дискомфорт от одной мысли поместить код нового убойного приложения на размещенный где-то сервер, тогда подумайте о хостинге репозитария на общем файловом ресурсе в вашей локальной сети. Затем вы можете увеличить надежность и скорость передачи файлов в репозитарий и из него, установив Git-сервер на основе Windows, такой как полностью бесплатный Bonobo Git Server (bonobogitserver.com) или GitStack (gitstack.com), бесплатный для двух пользователей максимум. Далее можно скачать и установить Visual Studio Team Foundation Server Express 2015 на какой-либо сервер, расположенный в вашей сети; эта редакция разрешает бесплатную поддержку до пяти пользователей. Или, если у вас или кого-то другого в группе есть активная лицензия MSDN, можно скачать и установить на сервер полную версию Visual Studio Team Foundation Server 2015 и хранить его там хоть целую вечность, в то же время бесплатно поддерживая до пяти пользователей. Наконец, можно приобрести и установить Visual Studio Team Foundation Server 2015 наряду с лицензиями клиентского доступа (client-access licenses, CAL), необходимыми для вашей группы.

Если вы хотите и можете использовать сторонний сервис хостинга Git, тогда ваш выбор расширяется до Visual Studio Team Services (ранее известный как Visual Studio Online), а также до таких популярных вариантов, как GitHub, BitBucket и GitLab. Бесплатные варианты хостинга всегда имеют какие-либо ограничения. Чтобы быть в курсе текущих вариантов хостинга и средств Git, следите за информацией на веб-сайте вики-справочника по Git (bit.ly/1Oym3F9).

Чтобы понять, как подключаться к удаленным сервисам и клонировать размещенные в них репозитарии, сначала вы клонируете репозитарий, размещенный где-либо в вашей сети. Потом вы подключитесь к простому репозитарию Visual Studio Team Services, размещенному в Интернете, и клонируете его. Наконец, я покажу, как подключиться к репозитарию одного знаменитого проекта, размещенного на GitHub, и клонировать его.

Для управления удаленными ресурсами, откройте Team Explorer | Home | Connect (рис. 9, маркер 1). Панель Connect отображает синее меню ссылок Manage Connections под меню панели (маркер 2). За ней располагается раздел, содержащий вертикальный список Hosted Service Providers (индивидуальные окна в Visual Studio Team Services и GitHub называются Service Invitations).

Выбор провайдера сервиса в Team Explorer Connect
Рис. 9. Выбор провайдера сервиса в Team Explorer Connect

Если вы вдруг закроете приглашение сервиса (service invitation) (щелкнув его значок X, на который указывает маркер 3), то не сможете вернуть его обратно, пока не модифицируете реестр. Если такое произойдет, можно вместо этого обратиться к сервису через раскрывающееся меню Manage Connections (маркер 4). Остальная информация из панели Team Explorer Connect тоже хранится в реестре, в том числе сведения о последнем использовавшемся репозитарии Git. Если вы хотите проверить этот подраздел реестра, то он расположен в HKCU\Software\Microsoft\VisualStudio\14.0\TeamFoundation (обратите внимание на ветви GitSourceControl и TeamExplorer под ним).

Одна из причин того, что вы можете столь продуктивно работать с репозитарием Git в автономном режиме, заключается в том, что при клонировании удаленного репозитария в локальный вы получаете его полную историю, в том числе подробные сведения о каждой операции фиксации, ветвления и слияния. Когда вы возвращаетесь в онлайновый режим, Git определяет, как изменился ваш локальный репозитарий по сравнению с удаленным, и это важно для успешного выполнения операций получения без слияния (fetch), получения со слиянием (pull), помещения (push) и синхронизации (sync).

Чтобы клонировать репозитарий с общего ресурса в локальной сети, перейдите в раздел Local Git Repositories и щелкните ссылку Clone. Вы получите запрос «Enter URL of a Git repo to clone» (введите URL репозитария Git, подлежащего клонированию), но этот процесс на самом деле гораздо либеральнее. Вы также можете ввести любой допустимый путь к местоположению на вашей текущей рабочей станции (например, c:\Repos\FinancialWizardApp), UNC-путь к сетевому ресурсу (\\1.2.3.4\Repos\FinancialWizardApp) или путь к подключенному сетевому диску (\\computername\Repos\FinancialWizardApp). Просто убедитесь, что в указанном месте есть папка .git и что Visual Studio сможет читать ее.

На рис. 10 (маркер 1) я ввел букву подключенного сетевого диска для ссылки на местоположение в моей сети, где содержится мой удаленный репозитарий, — то же самое могут сделать остальные разработчики в этой сети. Предоставив местоположение удаленного репозитария, укажите локальный путь для клонированного репозитария (маркер 2). Затем решите, надо ли рекурсивно клонировать подмодули, и щелкните Clone.

Работа с разными местоположениями удаленного репозитария
Рис. 10. Работа с разными местоположениями удаленного репозитария

Важно отметить, что, когда вы подключаетесь к удаленному репозитарию на файловом сервере, вы не сможете выдавать запросы на получение со слиянием (pull requests). Эта функция требует сервера Git (например, Team Foundation Server или GitHub). Однако вы сможете создавать, выполнять слияния, управлять ветвями, просматривать историю и синхронизировать изменения changes (получением со слиянием и без, а также помещением).

Если вы хотите клонировать репозитарий из Visual Studio Team Services, то сначала должны войти в Team Foundation Server. Для этого выберите Visual Studio Team | Manage или панель Team Explorer Connect и щелкните Manage Connections, затем выберите Connect to Team Project. Появится диалог Connection to Team Foundation Server. Щелкните Servers — откроется диалог, как на рис. 10 (маркер 4). Заметьте, что этот диалог позволяет подключиться к любому доступному Team Foundation Server, но, если вы хотите подключиться по учетной записи Visual Studio Team Services, введите ее URL. После щелчка OK вам понадобится выполнить вход; как только вы сделаете это, ваш сервер будет включен в список, и вы можете закрыть этот диалог. Далее появится диалог с двумя панелями: на левой отображается список Team Project Collections, а на правой — список Team Projects в конкретном наборе. Установите флажки рядом с теми групповыми проектами, которые должны появиться в Visual Studio, и щелкните Connect. Теперь перейдите к панели Team Explorer Connect и вы увидите список своих репозитариев (рис. 10, маркер 3).

Хотя GitHub поддерживает только Git в качестве системы управления версиями (version control system, VCS), Visual Studio Team Services предлагает по умолчанию децентрализованную Git и централизованную TFVC в качестве альтернативы. Эти две VCS работают весьма по-разному и требуют разного IDE-инструментария. К счастью, окно Team Explorer специально рассчитано на распознавание и обработку обоих типов VCS. По сути, когда вы подключаетесь к своему серверу Visual Studio Team Services и добавляете проекты, Team Explorer показывает, какие проекты находятся под управлением Git (они помечаются красным значком Git, см. рис. 10, маркер 3), а какие — под управлением TFS (на них нет значка Git).

Поэтому, чтобы клонировать удаленный репозитарий Visual Studio Team Services, он должен быть репозитарием Git. Вы можете щелкнуть правой кнопкой мыши любой репозитарий Git в списке и выбрать Clone. Я выбрал клонирование проекта GitProject, и у меня появился раздел Local Git Repositories с заполненной информацией об этом удаленном репозитарии наряду с путем к локальному репозитарию по умолчанию (рис. 10, маркер 5). После клонирования этот репозитарий появляется в списке Local Git Repositories. Дважды щелкните его для открытия и вы перейдете в панель Team Explorer Home. Там вы увидите кнопки, предназначенные для работы с репозитариями Visual Studio Team Services, такие как Pull Requests, Work Items и Builds.

Процесс клонирования удаленного репозитария очень похож, если вы клонируете из GitHub. Если у вас есть закрытый репозитарий, размещенный на GitHub, тогда вам придется войти под своей учетной записью GitHub для его клонирования. Открытые репозитарии можно клонировать, не имея учетной записи.

В принципе, вы можете клонировать удаленный репозитарий, пока он находится на сетевом ресурсе или доступен с HTTP/HTTPS-сервера. В настоящее время Visual Studio не поддерживает SSH при взаимодействии с удаленными репозитариями Git.

Работа с удаленными репозитариями

После подключения к удаленному репозитарию вы можете вернуться к Team Explorer | Home | Settings и щелкнуть его ссылку Repository Settings. Там вы сможете просмотреть информацию об удаленных ресурсах, к которым подключен ваш текущий репозитарий (это особенно полезно, если вы работаете более чем с одним удаленным ресурсом). После возврата в панель Settings также показываются новые ссылки, если вы подключены к какому-либо сервису вроде Team Foundation Server или GitHub. Эти ссылки позволяют конфигурировать для этого сервиса безопасность, членство в группах, настройки портала и др.

В панели Team Explorer | Home вы увидите новые кнопки, относящиеся к параметрам, поддерживаемым вашим удаленным сервисом. Если вы подключены к удаленному репозитарию, размещенному в Visual Studio Team Services, то будут доступны кнопки Pull Requests, Work Items и Builds. При щелчке Sync вы перейдете в панель Team Explorer Synchronization, где сможете выбрать синхронизацию, извлечение со слиянием и без, публикацию и помещение (push). Если возникнут конфликты слияния, которые нельзя разрешить автоматически, Visual Studio откроет выбранный Merge Tool, чтобы вы могли вручную указать, как разрешить эти конфликты.

Наконец, я клонирую проект Microsoft TypeScript 3 с открытым исходным кодом, расположенный по ссылке bit.ly/1o2weYt. Поскольку это открытый репозитарий Git, я могу клонировать его напрямую, используя ссылку Clone в разделе Local Git Repositories (рис. 10, маркер 6). На момент написания этой статьи данный репозитарий имел размер 350 Мб, так что в нем содержится большой объем информации об истории версий и множество ветвей, и его скачивание может занять некоторое время.

Когда локальный репозитарий будет полностью скачан, вы увидите его в списке раздела Local Git Repositories. Дважды щелкнув его, вы откроете его в панели Team Explorer Home (рис. 10, маркер 7). В разделе Project появятся кнопки для работы с репозитариями GitHub, такие как Pull Requests, Sync, Pulse и Graphs. Некоторые из этих кнопок вызывают переход на веб-сайт GitHub для выполнения запрошенной операции.

Щелчок Branches переключает вас на панель Team Explorer Branches. Здесь вы увидите ветвь master. Если щелкнуть ее правой кнопкой мыши, то можно просмотреть историю для всего проекта от начальной фиксации, выполненной 7 июля 2014 года, до текущей даты. Окно просмотра истории позволяет увидеть данные, используя разные представления в зависимости от вариантов, выбранных вами на панели инструментов в этом окне (рис. 11, маркер 1). Выбранное мной представление называется Detailed View. Оно показывает граф ветвей (маркер 2) (фиксации со слиянием [merge commits] отображаются серым цветом [маркер 3], а фиксации без слияния [non-merge commits] — синим [маркер 4]), включая идентификатор фиксации, идентификатор автора, дату фиксации, описание фиксации и, возможно, любые релевантные теги.

Просмотр истории позволяет увидеть подробные сведения о ветвях, фиксациях и слияниях
Рис. 11. Просмотр истории позволяет увидеть подробные сведения о ветвях, фиксациях и слияниях

Это представление упрощает переход к родительскому или дочернему элементу ветви. Просто выберите фиксацию и используйте навигационные кнопки Go to Child и Go to Parent на панели инструментов (третья и четвертая из показанных кнопок). Там, где ветвь заканчивается стрелкой (маркер 5), щелкните фиксацию (см. выделенную строку), будет нарисована линия, соединяющая родительский и дочерний элементы (маркер 6).

Заключение

Visual Studio 2015 предоставляет удобный GUI для доступа к часто используемым и многим дополнительным средствам Git и делает это благодаря нижележащему ядру Git — библиотеке LibGit2. Хотя Visual Studio обеспечивает почти полную поддержку Git, некоторые не столь часто используемые операции вроде скрытия (stashing) требуют взаимодействия с Git через интерфейс командной строки. Поскольку Git-инструментарий в Visual Studio весьма обширен, вы, возможно, никогда не столкнетесь с интерфейсом командной строки Git и будете выполнять большинство задач Git через удобный GUI. Заинтересованные или продвинутые пользователи Git, несомненно, в какой-то момент возжелают прямого доступа к Git, что называется по «голому железу». Такие пользователи смогут утолить свою жажду, запустив PowerShell Interactive Window и взаимодействуя с официальным интерфейсом командной строки Git для Windows, что также включено в Visual Studio. Благодаря GUI и поддержке командной строки Visual Studio обеспечивает доступ к Git пользователям любой квалификации.


Джонатан Уолдман (Jonathan Waldman) — Microsoft Certified Professional, специализируется на технологиях Microsoft и эргономике программного обеспечения. Работает со стеком технологий Microsoft с момента его появления и занимал руководящие должности в нескольких весьма важных институциональных, правительственных и бизнес-проектах. Является членом технической группы Pluralsight, автор учебного видеокурса по коммерческой библиотеке Wijmo расширенных виджетов JQuery UI. С ним можно связаться по адресу jonathan.waldman@live.com.

Выражаю благодарность за рецензирование статьи экспертам Джереми Эплингу (Jeremy Epling) из Microsoft и Эдварду Томсону (Edward Thomson) из GitHub.


Discuss this article in the MSDN Magazine forum