Использование приложения#
В данном разделе будут представлены примеры использования программного продукта SourceControl.
Код#
Для того чтобы просмотреть код, файлы, коммиты и ветки, откройте необходимый репозиторий. По умолчанию будет открыт раздел Код.
Если в репозитории нет файлов, будет предложено создать (кнопка Новый файл) или загрузить (кнопка Загрузить файл) новый файл.
Для клонирования репозитория доступны HTTP и SSH-ключи, а также готовые команды для создания нового репозитория или отправки существующего репозитория из командной строки.
Если в репозитории уже есть файлы, будет приведена краткая сводка по репозиторию: количество коммитов, веток и тегов, а также текущий размер репозитория. Ниже расположен список файлов ветки.
Для переключения между ветками нажмите на кнопку с наименованием текущей ветки и, используя фильтр по веткам или тегу, выберите необходимую.
Переиспользование кода#
Показатель переиспользования — комплексная метрика, суммирующая результаты по нескольким критериям.
Показатель переиспользования отображается в общем списке репозиториев и на странице самого репозитория. Для версии standalone значение отображается в разделе Обзор на вкладке Репозитории. Для версии приложения в составе Productivity platform значение отображается в разделе Репозитории. В виджете со списком репозиториев на главной странице, а также в списке доступных репозиториев в профиле пользователя показатель не отображается.
Доступна фильтрация по наличию/отсутствию проставленной метки репозитория.

При наведении указателя будет отображена всплывающая подсказка:

Показатель переиспользования отображается только для публичных репозиториев, находящихся в проектах с областью видимости Ограниченный и отмеченных меткой InSourceHub. Метка InSourceHub обозначает, что код, содержащийся в репозитории, признан подходящим для переиспользования. Для проставления метки должен быть назначен токен с параметром scoup: codehub (при отсутствии возможности добавить метку обратитесь к администратору инсталляции). Подсчет значения ведется с момента обновления на версию, в которой включена данная доработка, и проставления метки на репозиторий. По уже существующим данным и/или не отмеченным репозиториям метрика не рассчитывается.
На текущий момент подсчитывается количество уникальных пользователей, выполнивших действие получения копии кода публичного репозитория в приватном проекте, полностью или частично (клонирование репозитория, скачивание репозитория, ветки, коммита, файла, релиза, тега).
Метки#
Для того чтобы классифицировать задачи и запросы на слияние, а также упростить их поиск и просмотр, можно использовать метки.
Создание меток#
Чтобы создать метку, перейдите в раздел Задачи и нажмите на Метки.
Вы можете создавать метки, которые будут общими для всех репозиториев организации, включая существующие и новые репозитории. Для того чтобы создать такие метки, перейдите в раздел Настройки → Организации.
Метки бывают эксклюзивными и неэксклюзивными (смотрите раздел Метки с ограниченной областью действия ниже), имеют обязательные (имя и цвет) и необязательные (описание) свойства.
При создании репозитория вы можете проверить наличие метки, нажав на поле Создать метку. В появившемся списке перечислены доступные наборы меток, настроенные для вашего экземпляра SourceControl. Все перечисленные в наборе метки появятся при создании репозитория.
Метки с ограниченной областью действия#
Метки с ограниченной областью действия обеспечивают присвоение только одной метки задаче или запросу на слияние с одинаковыми свойствами. Например, если для меток kind/bug и kind/enhancement установлен параметр Exclusive, задача может быть классифицирована только как ошибка или улучшение.
Метки с ограниченной областью действия должны содержать / в названии. Область действия метки определяется на основе последнего /, например, областью действия метки scope/subscope/item является scope/subscope.
Фильтрация по меткам#
Списки задач и запросов на слияние можно отфильтровать по метке. При указании нескольких меток будут отображаться все задачи и запросы на слияние, содержащие выбранные метки.
При нажатии кнопки alt и метки все задачи и запросы на слияние с этой меткой будут исключены из списка.
Запрос на слияние (pull request)#
Запрос на слияние или Pull Request (PR) — это возможность любому пользователю, который видит проект, вносить свой вклад подконтрольным способом. Это запрос на слияние одной ветки с другой (например, master), сопровождаемый описанием внесенных изменений.
Создание запроса на слияние#
Чтобы создать запрос на слияние, выполните шаги:
Клонируйте репозиторий. Пользователи с прямым доступом могут создать ветку, отослать в нее коммиты и открыть запрос на слияние из их ветки обратно в master-ветку или любую другую ветку. Пользователи без доступа на запись могут сделать fork репозитория (создать собственную копию), отправить коммиты в эту копию и открыть запрос на слияние из копии репозитория обратно в основной проект.
Создайте свою ветку (опционально). Создайте ветку, в которую вы будете вносить изменения. Для удобства дайте ветке такое название, которое бы отражало вносимые вами изменения.
Внесите изменения в свою ветку. Внесите необходимые изменения, подтвердите их командой (
commit) и отправьте свою копию в удаленный репозиторий (push).Создайте запрос на слияние. В удаленном репозитории перейдите на вкладку Запросы на слияние. Нажмите кнопку Новый запрос на слияние, выберите свою ветку в качестве источника. Озаглавьте запрос на слияние, добавьте описание и нажмите Создать запрос на слияние.
Проверка запроса на слияние#
Создание запроса на слияние запускает процесс его проверки. Проверяющим приходит уведомление о запросе, и они могут просматривать предлагаемые изменения, а также комментировать, предлагать изменения, подтверждать или отменять запрос на слияние.
Если проверяющие предлагают изменения, их необходимо внести локально в своей ветке и снова отправить их в удаленный репозиторий. Ранее созданный запрос на слияние обновится автоматически.
Если проверяющий принимает изменения, он может произвести слияние вашей ветки с основной.
Закрытие запроса на слияние#
Если больше нет необходимости в вашем запросе на слияние, вы можете его закрыть. Для этого в открытом запросе нажмите Закрыть запрос на слияние. Закрытие в этом случае произойдет без слияния с основной веткой.
Запросы на слияние «В процессе»#
Чтобы предупредить случайное слияние запроса, его рекомендуется принять в работу. Для этого добавьте в его название префикс WIP: или [WIP] (регистр не важен). Эти значения настраиваются в вашем файле app.ini:
[repository.pull-request]
WORK_IN_PROGRESS_PREFIXES=WIP:,[WIP]
Публикация изменений (push)#
Команда git push позволяет отправлять локальную ветку на удаленный репозиторий. Она помогает разработчикам синхронизироваться в команде, а именно отправляет проделанные изменения в общий репозиторий.
Существуют дополнительные возможности при отправке коммитов на сервер SourceControl.
Открытие запроса на слияние через Push#
При выполнении коммита в ветку, которая не является веткой по умолчанию, впервые вы получите ссылку, по которой можно сравнить изменения между вашей и основной ветками.
Поддерживаемые опции#
repo.private(true|false) — Изменяет видимость репозитория. Функция особенно полезна при сочетании сpush-to-create.repo.template(true|false) — Изменяет статус репозитория с шаблонного.
Пример изменения видимости репозитория с приватного на публичный:
git push -o repo.private=false -u origin main
Push To Create#
Push To Create — это опция, которая позволяет отправить в репозиторий содержимое, которого еще не существует в SourceControl. Это может быть полезно для автоматизации процесса, а также позволяет создавать репозитории без необходимости использовать веб-интерфейс. По умолчанию эта опция отключена.
Включение опции Push To Create#
В конфигурационном файле app.ini установите ENABLE_PUSH_CREATE_USER = true, если вы хотите, чтобы пользователи создавали репозитории в своих личных учетных записях, и ENABLE_PUSH_CREATE_ORG = true — в организациях, если они им принадлежат. Перезагрузите страницу с SourceControl для применения изменений.
Использование Push To Create#
Предположим, у вас есть git-репозиторий в текущем каталоге, и вы хотите отправить изменения в репозиторий, которого еще нет в SourceControl. Для этого выполните команду:
# Добавление удаленного репозитория, в который вы хотите отправить изменения
git remote add origin git@{domain}:{username}/{название репозитория}.git
# отправка в удаленный репозиторий
git push -u origin main
Обратите внимание
Предполагается, что вы используете SSH, но вы также можете использовать HTTP.
Видимость Push-to-create можно настроить в app.ini в параметре DEFAULT_PUSH_CREATE_PRIVATE.
Функциональность «Владельцы кода»#
Функциональность «Владельцы кода» позволяет определить владельцев кода для конкретных файлов или директорий в репозитории для получения от них согласования по вносимым изменениям. Данная возможность актуальна для крупных проектов, где разные части кода поддерживаются разными разработчиками, или изменения требуют коллективного согласования.
При создании запроса на слияние система автоматически предоставляет список владельцев кода, к которым можно обратиться для согласования изменений, и назначает их рецензентами изменений.
Использование функциональности возможно в двух вариантах:
информирование о владельце (владельцах) кода при создании запроса на слияние с назначением его рецензентом;
информирование о владельце (владельцах) кода и создание дополнительного правила (ограничения) для выполнения запроса на слияние, требующее согласование запроса от рецензента.
В первом случае согласование владельцем кода изменений не является обязательным требованием для выполнения запроса на слияние. В случае создания дополнительного правила, без согласования от владельца кода выполнение запроса на слияние будет заблокировано.
Для информирования о владельце кода и назначения его рецензентом достаточно добавить файл в репозиторий. Для создания дополнительного правила необходимо выполнить дополнительные настройки через пользовательский интерфейс.
Создание и размещение файла с перечнем владельцев кода#
SourceControl поддерживает чтение и использование текстовых файлов, содержащих перечень владельцев кода. Приложение последовательно ищет файл в следующих разделах:
./CODEOWNERS;./docs/CODEOWNERS.
Для создания файла выполните следующие действия:
Перейдите в соответствующий корневой раздел, создайте текстовый файл с названием
CODEOWNERS.Откройте файл и заполните его в соответствии с синтаксисом:
<regexp rule> @userДля задания правил используйте возможности golang Regex format. Примеры синтаксиса для разных объектов и уровней:
Владелец всех файлов в репозитории:
* @usernameВладелец конкретной директории:
dir_name/.* @usernameВладелец конкретного файла (с указанием расширения файла):
index.md @usernameВладелец всех файлов с определенным расширением (здесь и далее: в качестве примера расширения указано .js):
*.js @usernameНесколько владельцев для директории:
/dir_name/ @username_1 @username_2 @username_3Владелец всех файлов в выбранной директории, за исключением файлов с выбранным расширением:
/dir_name/ @username !/dir_name/.*\.js
При необходимости оставить комментарий к настройке используйте теги:
//— для однострочных комментариев: часть строки, размещенная за знаком (правее, до конца строки), будет игнорироваться приложением;/*и/— для многострочных комментариев: любой текст, размещенный между тегами, будет игнорироваться приложением.
Опубликуйте файл в репозитории. Распознавание и назначение владельцев кода по сконфигурированным правилам произойдет только если файл
CODEOWNERSразмещен в ветке по умолчанию для запросов на слияние, нацеленных в любую ветку в репозитории.
Настройка применения#
После добавления файла в репозиторий перейдите в пользовательский интерфейс, откройте репозиторий, для которого был добавлен файл с владельцами кода, и выполните следующие действия:
Перейдите в настройки репозитория. Найдите блок Одобрение владельцев кода.
Отметьте чекбокс Необходимо одобрение владельцев кода.
Заполните поле Необходимое число одобрений — введите целое число равное или больше 1.
Нажмите Сохранить. Обратите внимание: кнопка не будет доступна, если значение в поле Необходимое число одобрений не введено или не соответствует требованиям к заполнению.
После сохранения настроек при создании новых запросов на слияние (или при переводе запроса на слияние из статуса Черновик в активный запрос) будут отображаться списки владельцев соответствующих директорий или объектов, а также необходимость получить от них согласование изменений.
При необходимости текущие настройки можно изменить: для этого необходимо перейти в настройки репозитория и изменить значение в поле Необходимое число одобрений, после чего сохранить изменения. Для отключения функциональности достаточно снять отметку с чекбокса и также сохранить.
Проекты#
На вкладке Проекты осуществляется координация и отслеживание проектов, этапов проектов и относящихся к ним задач.
Для создания проекта нажмите на кнопку Новый проект и заполните необходимые поля.
Добавленные в проекты задачи можно распределить по этапам. Для создания этапа выберите режим Этап, перейдите в соответствующий раздел и нажмите кнопку Новый этап.
Прикрепить задачу к конкретному этапу можно как в процессе создания новой, так и при редактировании уже существующей задачи.
Защищенные теги#
С помощью защищенных тегов можно контролировать, у кого есть разрешение на создание или обновление тегов Git. Каждое правило позволяет либо сопоставлять имя отдельного тега, либо использовать соответствующий шаблон для управления несколькими тегами одновременно.
Настройка защищенных тегов#
Для защиты тега выполните следующие шаги:
В репозитории перейдите в Настройки → Теги.
Введите шаблон, соответствующий имени. Можно использовать одно имя, glob-шаблон или регулярное выражение.
Выберите разрешенных пользователей и/или команды. Если вы оставите эти поля пустыми, никому не будет разрешено создавать или изменять этот тег.
Нажмите Сохранить.
Шаблоны защищенных тегов#
Шаблон использует glob или регулярное выражение для сопоставления имени тега. Для регулярных выражений заключите шаблон в /:
Тип |
Шаблон |
Возможные совпадающие теги |
|---|---|---|
Glob |
|
|
Glob |
|
|
Glob |
|
|
Glob |
|
только |
Glob |
|
|
Glob |
|
|
Glob |
|
соответствует всем возможным именам тегов |
Regex |
|
|
Regex |
|
|
Regex |
|
|
Regex |
|
|
Regex |
|
|
Regex |
|
|
Regex |
|
только |
Regex |
|
только |
Regex |
|
|
Regex |
|
соответствует всем возможным именам тегов |
Вебхуки#
SourceControl поддерживает вебхуки для событий репозитория. Они могут быть настроены на странице настроек в /:username/:reponame/settings/hooks. Вебхуки также могут быть настроены для каждой организации и всей системы в целом. Все события являются POST-запросами.
Информация о событии#
Ниже приведен пример информации о событии, которая будет отправлена SourceControl на Payload URL:
X-GitHub-Delivery: f6266f16-1bf3-46a5-9ea4-602e06ead473
X-GitHub-Event: push
X-Gogs-Delivery: f6266f16-1bf3-46a5-9ea4-602e06ead473
X-Gogs-Event: push
X-sc-Delivery: f6266f16-1bf3-46a5-9ea4-602e06ead473
X-sc-Event: push
{
"secret": "{secret}",
"ref": "refs/heads/develop",
"before": "28e1879d029cb852e4844d9c718537df08844e03",
"after": "bffeb74224043ba2feb48d137756c8a9331c449a",
"compare_url": "http://localhost:3000/sc/webhooks/compare/28e1879d029cb852e4844d9c718537df08844e03...bffeb74224043ba2feb48d137756c8a9331c449a",
"commits": [
{
"id": "bffeb74224043ba2feb48d137756c8a9331c449a",
"message": "Webhooks Yay!",
"url": "http://localhost:3000/sc/webhooks/commit/bffeb74224043ba2feb48d137756c8a9331c449a",
"author": {
"name": "sc",
"email": "someone@example.ru",
"username": "sc"
},
"committer": {
"name": "sc",
"email": "someone@example.ru",
"username": "sc"
},
"timestamp": "2017-03-13T13:52:11-04:00"
}
],
"repository": {
"id": 140,
"owner": {
"id": 1,
"login": "sc",
"full_name": "sc",
"email": "someone@example.ru",
"avatar_url": "https://localhost:3000/avatars/1",
"username": "sc"
},
"name": "webhooks",
"full_name": "sc/webhooks",
"description": "",
"private": false,
"fork": false,
"html_url": "http://localhost:3000/sc/webhooks",
"ssh_url": "ssh://sc@localhost:2222/sc/webhooks.git",
"clone_url": "http://localhost:3000/sc/webhooks.git",
"website": "",
"stars_count": 0,
"forks_count": 1,
"watchers_count": 1,
"open_issues_count": 7,
"default_branch": "master",
"created_at": "2017-02-26T04:29:06-05:00",
"updated_at": "2017-03-13T13:51:58-04:00"
},
"pusher": {
"id": 1,
"login": "sc",
"full_name": "SourceControl",
"email": "someone@example.ru",
"avatar_url": "https://localhost:3000/avatars/1",
"username": "sc"
},
"sender": {
"id": 1,
"login": "sc",
"full_name": "SourceControl",
"email": "someone@example.ru",
"avatar_url": "https://localhost:3000/avatars/1",
"username": "sc"
}
}
Ниже приведен пример использования вебхуков для запуска PHP-скрипта при отправке запроса в репозиторий. Для настройки вебхуки в своем репозитории перейдите в Настройки → Веб-хуки и установите значения:
Target URL
HTTP Method: POST
POST Content Type: application/json
Secret: 123
Trigger On: Push Events
Active: Checked
Далее на своем сервере создайте PHP-файл webhook.php:
<?php
$secret_key = '123';
// check for POST request
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
error_log('FAILED - not POST - '. $_SERVER['REQUEST_METHOD']);
exit();
}
// get content type
$content_type = isset($_SERVER['CONTENT_TYPE']) ? strtolower(trim($_SERVER['CONTENT_TYPE'])) : '';
if ($content_type != 'application/json') {
error_log('FAILED - not application/json - '. $content_type);
exit();
}
// get payload
$payload = trim(file_get_contents("php://input"));
if (empty($payload)) {
error_log('FAILED - no payload');
exit();
}
// get header signature
$header_signature = isset($_SERVER['HTTP_X_SC_SIGNATURE']) ? $_SERVER['HTTP_X_SC_SIGNATURE'] : '';
if (empty($header_signature)) {
error_log('FAILED - header signature missing');
exit();
}
// calculate payload signature
$payload_signature = hash_hmac('sha256', $payload, $secret_key, false);
// check payload signature against header signature
if ($header_signature !== $payload_signature) {
error_log('FAILED - payload signature');
exit();
}
// convert json to array
$decoded = json_decode($payload, true);
// check for json decode errors
if (json_last_error() !== JSON_ERROR_NONE) {
error_log('FAILED - json decode - '. json_last_error());
exit();
}
// success, do something
В настройках вебхуков есть кнопка тестовой доставки (Test Delivery), которая позволяет протестировать конфигурацию, а также просмотреть список последних доставок (Recent Deliveries).
Поиск и добавление пользователя#
Поиск осуществляется во внешнем хранилище пользователей. Подключение пользователя к работе доступно в двух вариантах:
соавтор репозитория (доступ предоставляется к конкретному репозиторию);
член команды (доступ предоставляется ко всем репозиториям, с которыми работает команда).
Добавить пользователя в соавторы или члены команды может только владелец репозитория.
Для добавления пользователя в качестве соавтора выполните шаги:
Перейдите в репозиторий.
Перейдите в Настройки, откройте вкладку Соавторы.
В поле Поиск пользователя начните вводить данные для поиска: ФИО пользователя или имя аккаунта. После третьей введенной буквы будут предложены варианты, совпадающие с запросом.
Выберите искомого пользователя.
Нажмите Добавить соавтора.
Для добавления пользователя как члена команды выполните шаги:
Выберите организацию.
Перейдите во вкладку Команды, откройте нужную команду.
В поле Поиск пользователя начните вводить данные для поиска: ФИО пользователя или имя аккаунта. После третьей введенной буквы будут предложены варианты, совпадающие с запросом.
Выберите искомого пользователя.
Нажмите Добавление члена группы разработки.
Для пользователя, независим от способа добавления (соавтор или член команды), можно настроить привилегии: Администратор, Запись, Просмотр. По умолчанию предоставлены права Запись.
При необходимости удалить пользователя перейдите в репозиторий или команду, как описано в первых двух шагах соответствующего алгоритма, и нажмите Удалить.
Комментирование кода#
В SourceControl реализована возможность комментирования кода. Предоставлены следующие возможности:
создать комментарий;
просмотреть комментарии;
добавить реакцию к комментарию;
отредактировать комментарий;
цитировать комментарий в ответе;
удалить комментарий;
завершить обсуждение;
возобновить обсуждение.
Доступность действия для пользователя определяется назначенной группой привилегий (см. Руководство администратора, раздел «Сценарии администрирования» > Назначение привилегий внутри проекта).
Создание комментария#
Для создания комментария выполните шаги:
Перейдите в проект, выберите репозиторий, выберите запрос на слияние.
Перейдите на вкладку Измененные файлы.
Наведите курсор на строку, к которой хотите оставить комментарий. В левой части строки отобразится кнопка-иконка для добавления комментария.

Нажмите на кнопку-иконку. Отобразится диалоговое окно добавления комментария.

Введите текст комментария и нажмите на кнопку Комментировать. При необходимости воспользуйтесь функцией Предпросмотр, перейдя на соответствующую вкладку.
Комментарий будет опубликован и отобразится около той строки кода, к которой заводился. В поле комментария также будут отображены кнопки Реакция (1) и кнопка дополнительных действий (2).
Просмотр комментариев#
Для просмотра комментария (обсуждения) перейдите в соответствующий запрос на слияние и нажмите на кнопку-иконку в левой части строки:

По умолчанию все комментарии свернуты. При нажатии на иконку под строкой, к которой добавлен комментарий/обсуждение, будет развернуто соответствующее сообщение (или сообщения).
Добавление реакции к комментарию#
Для проставления реакции к комментарию перейдите в соответствующий запрос на слияние и выполните шаги:
Нажмите на кнопку Реакция. Отобразится окно выбора эмодзи-реакции:

Выберите реакцию из предложенных. Проставленная реакция будет отображена под текстом комментария:

Редактирование комментариев#
Для редактирования комментария перейдите в соответствующий запрос на слияние и выполните шаги:
Нажмите на кнопку дополнительных действий. Отобразится выпадающее меню:

Выберите Редактировать. Отобразится диалоговое окно редактирования комментария:

Внесите изменения в текст комментария и нажмите Сохранить. При необходимости воспользуйтесь функцией Предпросмотр, перейдя на соответствующую вкладку.
Отредактированный комментарий будет отображен с соответствующей пометкой:
Цитирование комментария в ответе#
Для цитирования комментария в ответе перейдите в соответствующий запрос на слияние и выполните шаги:
Нажмите на кнопку дополнительных действий. Отобразится выпадающее меню:

Выберите Цитировать ответ. Отобразится диалоговое окно создания комментария, в поле ввода текста будет указан текст цитируемого комментария с кодом оформления:

Введите текст комментария и нажмите Ответить. При необходимости воспользуйтесь функцией Предпросмотр, перейдя на соответствующую вкладку.
Комментарий будет опубликован, процитированный текст будет оформлен как цитата:
Удаление комментария#
Для удаления комментария перейдите в соответствующий запрос на слияние и выполните шаги:
Нажмите на кнопку дополнительных действий. Отобразится выпадающее меню:

Выберите Удалить. Отобразится предупреждение «Вы уверены, что хотите удалить этот комментарий?» и кнопки Отмена и ОК.
Выполните одно из двух действий:
нажмите Отмена, если действие выполняется ошибочно;
нажмите ОК, чтобы подтвердить удаление.
Если удаление подтверждено, обновите страницу. Выбранный комментарий не будет отображаться.
Завершение обсуждения#
Для завершения обсуждения перейдите в соответствующий запрос на слияние и выполните шаги:
Откройте комментарий (обсуждение), нажав на кнопку-иконку в левой части строки.
Нажмите Завершить обсуждение:

Комментарии будут схлопнуты. В строке отобразится сообщение «[Имя пользователя] завершил обсуждение», в правой части будет размещена кнопка Показать:

Нажмите Показать. Комментарий (обсуждение) отобразится в развернутом виде:
кнопка Показать изменится на кнопку Скрыть;
отображаются кнопки Возобновить обсуждение и Ответить:

Возобновление обсуждения#
Для возобновления обсуждения перейдите в соответствующий запрос на слияние и выполните шаги:
Откройте завершенный комментарий (обсуждение), нажав на кнопку-иконку в левой части строки.
Нажмите Показать. Комментарий (обсуждение) отобразится в развернутом виде.
Нажмите Возобновить обсуждение. Сообщение с текстом «[Имя пользователя] завершил обсуждение» пропадет. Комментарий отображается под строкой, к которой он добавлен. Под блоком комментария отображаются кнопки Ответить и Завершить обсуждение.
Дополнительные возможности#
При необходимости можно скопировать ссылку на комментарий. Для этого перейдите в соответствующий запрос на слияние и выполните шаги:
Нажмите на кнопку дополнительных действий. Отобразится выпадающее меню:

Выберите Копировать адрес. Отобразится всплывающая подсказка «Скопировано».
При переходе по ссылке будет отображен соответствующий запрос на слияние с фокусом на комментарии, адрес которого был скопирован. Комментарий будет выделен синей рамкой:

Нефункциональные возможности#
Определение лицензий#
Репозитории в SourceControl могут применяться для совместного использования ПО с открытым кодом. При наличии лицензии, установленной автором кода, SourceControl позволяет ее просмотреть для дальнейшего использования, изменения и распространения программного обеспечения.
Доступны следующие возможности:
при просмотре репозитория отображается лицензия, установленная для данного репозитория, если ее удалось определить;
при загрузке в репозиторий кода, содержащего корректный файл лицензии, происходит ее автоматическое определение;
при просмотре файла лицензии отображается информация об условиях, разрешениях и ограничениях, устанавливаемых данной лицензией.
Для файлов лицензий поддерживаются имена, соответствующие следующим форматам:
li[cs]en[cs]e(s?);legal;copy(left|right|ing);unlicense;l?gpl([-_ v]?)(\d\.?\d)?;bsd;apache;mit.
Расширение файла лицензии может быть:
md;rst;html;txt.
Файл лицензии может быть без расширения.
Отображение лицензии#
Названия лицензий, указанных в файлах лицензий в основной ветке, отображены на странице репозитория в отдельном виджете.

Внешний вид и содержимое виджета подчиняются следующим правилам:
если лицензию не удалось определить, виджет не выводится;
если в репозитории удалось определить более одной лицензии, в виджете будет отображено их количество, а названия лицензий будут указаны в виде списка;
если лицензий шесть и более, то в виджете отображаются первые пять лицензий и кнопка Показать все лицензии:

Чтобы свернуть список лицензий, нажмите кнопку Скрыть:

название каждой лицензии является ссылкой, при нажатии на которую осуществляется переход на страницу просмотра файла данной лицензии;
если лицензия устарела, ее название будет выведено в виджете, однако при переходе по ссылке-названию сведения о лицензии не будут отображены.
Просмотр файла лицензии#
Если файл определен как файл лицензии, на странице просмотра файла выводится информационный блок с указанием разрешений, ограничений и условий, определяемых этой лицензией. Сведения (перечень разрешений, ограничений и условий) об основных лицензиях выводятся в соответствии с таблицей.
Если сведения об определенной лицензии отсутствуют, информационный блок с условиями не выводится.

На данный момент информация о лицензиях выводится без перевода, на английском языке.
Взаимодействие с инструментом управления задачами#
Взаимодействие с инструментом управления задачами реализовано в части:
возможности установить (при указании ключа задачи)/удалить связь между запросом на слияние и задачей инструмента управления задачами;
отображения в SourceControl статуса и приоритета связанной задачи;
автоматической передачи при активной связке с задачей статуса запроса на слияние в случае его изменения (открыт, закрыт, слит).