Репозитории

Общая информация

Репозиторий это каталог, в котором хранятся файлы проекта, история их изменения и служебная информация. Репозиторий может располагаться на удаленном компьютере, который доступен по таким протоколам как file, git, ssh, http, https, ftp, sftp.

Репозиторий похож на набор снимков миниатюрной файловой системы. Каждый раз, когда вы фиксируете свои изменения в репозитории, Git запоминает, как выглядит каждый из файлов и сохраняет ссылку на этот снимок. Такая ссылка называется коммитом.

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

Когда изменения закончены и проверены, он может поделиться ими с другими разработчиками. Для этого он отправляет их из локального репозитория в исходный. Также разработчик может получить из исходного репозитория изменения других разработчиков, которые они туда отправили.

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

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

Рабочая область 1C:EDT и каталог git-репозитория

Когда вы создаете локальный репозиторий, создавайте его таким образом, чтобы каталог репозитория и рабочая область 1C:EDT не находились в иерархии друг друга.

Репозиторий по сути представляет собой каталог на жестком диске, который является рабочим каталогом — в нем вы будете модифицировать файлы, извлеченные из репозитория. А еще в этом же каталоге находится вложенный каталог с именем .git — который и есть, фактически, репозиторий. Именно в нем хранятся коммиты, ссылки, журналы и т.д.).

Рабочая область 1C:EDT это тоже каталог на жестком диске, в котором находятся все файлы, с которыми вы работаете средствами 1C:EDT. Например, на следующем рисунке показана рабочая область 1C:EDT, которая находится в каталоге coldev. В ней есть служебный каталог .metadata и три каталога для каждого из проектов: проект конфигурации coldev, проекты расширений ВесТоваров и Колонтитулы.

Не следует размещать репозиторий в корневом каталоге проекта. Например, на следующем рисунке репозиторий размещен в корневом каталоге проекта конфигурации coldev (синий). Рабочая область 1C:EDT показана красным.

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

Конечно, вы все равно можете добавлять проекты в виде вложенных каталогов, но известно, что такое вложение проектов вызывает множество проблем. Чтобы добавить еще один проект, вам придется переместить проект в подкаталог в репозитории и добавить второй проект в качестве еще одного подкаталога, прежде чем вы сможете зафиксировать это изменение.

Также не следует размещать репозиторий в корневом каталоге рабочей области. Например, на следующем рисунке репозиторий размещен в корневом каталоге рабочей области coldev (синий). Рабочая область 1C:EDT показана красным.

Есть несколько причин, почему так делать не нужно:

По всем перечисленным причинам мы рекомендуем создавать локальный репозиторий таким образом, чтобы каталог репозитория и рабочая область 1C:EDT не находились в иерархии друг друга. Например, они могут быть расположены на разных жестких дисках. На следующем рисунке рабочая область 1C:EDT показана красным, а репозиторий — синим цветом.

При подключении проекта к репозиторию или при клонировании удаленного репозитория 1C:EDT всегда дает вам возможность выбрать произвольный каталог для локального репозитория и сразу же переместить в него те проекты, которые должны находиться под версионным контролем. Например, вы можете поместить в репозиторий проект конфигурации и проект одного из расширений, а проект другого расширения не версионировать и оставить в рабочей области 1C:EDT.

Клонировать репозиторий (clone)

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

Начать клонирование удаленного репозитория можно разными способами:
  • В главном меню нажмите Файл > Импорт... > Git > Проекты из Git > Клонировать URI;
  • В панели Репозитории Git нажмите (Клонировать репозиторий Git) в командной панели.

1. Выберите исходный репозиторий

В поле URI укажите расположение удаленного репозитория. Например:

ssh://user@example.com:6888/dir/gitproject.git — на удаленном сервере example.com
http://example.com/dir/gitproject.git — на удаленном сервере example.com
file://\\example\gitproject — на сетевом компьютере example
file://D:\dir\gitproject — в локальном каталоге

После этого остальные поля будут заполнены автоматически насколько это возможно.

Предупреждение: Когда вы создаете локальный репозиторий, создавайте его таким образом, чтобы каталог репозитория и рабочая область 1C:EDT не находились в иерархии друг друга. Подробнее об этом читайте здесь.

Назначение полей:

  • Расположение
    • URI — полный URI удаленного репозитория или путь в файловой системе. Для выбора локального каталога можно нажать Обзор.... Каталог репозитория это каталог, содержащий папку .git;
    • Сервер — имя удаленного сервера. Если клонируется локальный или сетевой каталог, это поле будет пустым;
    • Путь к репозиторию — путь к репозиторию на сервере или в файловой системе
  • Соединение
    • Протокол — один из поддерживаемых протоколов:
      • file — файловый доступ на локальном компьютере или в локальной сети;
      • ftpFile Transfer Protocol;
      • git — самый эффективный встроенный протокол Git (порт по умолчанию 9418). Этот протокол не обеспечивает аутентификацию. Обычно он используется для анонимного доступа к репозиторию на чтение;
      • httpHypertext Transfer Protocol;
      • httpsHypertext Transfer Protocol Secure;
      • sftpSSH File Transfer Protocol;
      • ssh — Git по протоколу secure shell (SSH). Обычно используется для аутентифицированного доступа к репозиторию на запись;
      Примечание: Если вы находитесь за брандмауэром, вам может потребоваться настроить параметры прокси-сервера: Окно > Параметры... > Общие > Сетевые соединения.
    • Порт — порт сервера;
  • Аутентификация
    • Пользователь — имя пользователя для доступа к удаленному репозиторию;
    • Пароль — пароль пользователя для доступа к удаленному репозиторию;
    • Сохранить в защищенном хранилище — сохранить параметры аутентификации в защищенном хранилище Eclipse.

2. Выберите ветки

На втором шаге мастера выберите те ветки удаленного репозитория, которые надо склонировать. Если вы не уверены, какие именно ветки вам нужны, выберите все.

Также вы можете выбрать способ получения меток из удаленного репозитория:
  • Tag fetching strategy
    • When fetching a commit, also fetch its tags — когда получаете коммит также получить и его метки;
    • Fetch all tags and their commits — получить все метки и их коммиты;
    • Don't fetch any tags — не получать никакие метки.

3. Выберите локальный репозиторий

Предупреждение: Когда вы создаете локальный репозиторий, создавайте его таким образом, чтобы каталог репозитория и рабочая область 1C:EDT не находились в иерархии друг друга. Подробнее об этом читайте здесь.

На третьем шаге мастера в поле Каталог выберите каталог, в котором будет находиться локальный репозиторий.

Также установите флаг Импортировать все проекты после завершения операции клонирования, чтобы проекты из репозитория появились в панели Навигатор.

Назначение полей:

  • Расположение
    • Каталог — каталог, в котором будет находиться локальный репозиторий. Если он не существует, он будет создан.
      Вы можете настроить стандартный путь для локальных репозиториев, для этого нажмите Окно > Параметры... > Групповая разработка > Git > Клонирование репозиториев > Папка репозитория по умолчанию;
    • Начальная ветка — выберите локальную ветку, которая будет создана и первоначально извлечена. Обычно это ветка master;
    • Клонировать подмодули — также клонировать подмодули, содержащиеся в удаленном репозитории;
  • Конфигурация
    • Имя удаленного репозитория — задайте имя для удаленного репозитория. Обычно это origin;
  • Проекты
    • Импортировать все проекты после завершения операции клонирования — импортировать в рабочую область 1C:EDT проекты, содержащиеся в локальном репозитории;
    • Рабочие наборы
      • Добавить проект в рабочие наборы — не используется при разработке прикладных решений «1С:Предприятия».

4. Нажмите Готово

1C:EDT склонирует репозиторий и он появится в панели Репозитории Git (перспектива Git). После этого 1C:EDT импортирует проект и покажет его в панели Навигатор (перспектива 1C:Enterprise).

Поместить проект в локальный репозиторий

Совет: Можете посмотреть пример Подключить проект к локальному репозиторию.

Например, вы хотите версионировать свой проект. Для этого вы можете поместить его в локальный репозиторий и фиксировать в этом репозитории свои изменения.

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

Чтобы поместить проект в локальный репозиторий нажмите Групповая разработка > Общий проект... в контекстном меню проекта.

В поле Репозиторий выберите локальный репозиторий, в котором будет располагаться проект. Если вы хотите создать для проекта новый репозиторий, то нажмите Создать, чтобы выбрать каталог нового репозитория.

Предупреждение: Когда вы создаете локальный репозиторий, создавайте его таким образом, чтобы каталог репозитория и рабочая область 1C:EDT не находились в иерархии друг друга. Подробнее об этом читайте здесь.

Назначение полей:

Таблица ПроектТекущее расположениеЦелевое расположение показывает путь, по которому файлы проекта будут перемещены в рабочую область репозитория.

Нажмите Готово. 1C:EDT переместит ваш проект в каталог репозитория. После этого вы можете:
  1. Настроить поддержку Git LFS в этом репозитории (если планируете разрабатывать в нем большие проекты);
  2. Зафиксировать изменения;
  3. Отправить эти изменения в удаленный репозиторий, чтобы другие разработчики могли его клонировать и начать совместную с вами разработку.

Начать разработку проекта из локального репозитория

Например, вы создаете новый проект 1C:EDT Start и хотите использовать с ним имеющийся локальный репозиторий, в котором находится разрабатываемый проект.

  1. Нажмите Файл > Импорт... > Git > Проекты из Git > Существующий локальный репозиторий в главном меню;
  2. Нажмите Добавить и выберите каталог существующего локального репозитория;
  3. Выделите этот репозиторий в списке и нажмите Добавить;
  4. Выделите добавленный репозиторий в списке и нажмите Далее;
  5. Выберите Импорт из существующего проекта Eclipse и нажмите Далее;
  6. Установите флажок у нужного проекта и нажмите Готово.

Импортированный проект появится в панели Навигатор.

Добавить в репозиторий сразу несколько проектов

Например, в рабочей области у вас есть несколько проектов, которые вы хотите версионировать: проект конфигурации и несколько проектов расширений. Вы можете добавить все эти проекты в репозиторий одним действием:
  • Выделите все нужные проекты в панели Навигатор;
  • Нажмите Групповая разработка Общий проект... в контекстном меню, чтобы добавить их в локальный репозиторий.

Создать локальный репозиторий (init)

В поле Каталог репозитория укажите путь к репозиторию или выберите его, нажав на Обзор....

Предупреждение: Когда вы создаете локальный репозиторий, создавайте его таким образом, чтобы каталог репозитория и рабочая область 1C:EDT не находились в иерархии друг друга. Подробнее об этом читайте здесь.

Нажмите Создать.

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

Добавить существующий локальный репозиторий в панель

  1. Откройте панель Репозитории Git;
  2. Нажмите (Добавить существующий локальный репозиторий Git) в командной панели;
  3. В поле Каталог введите путь к локальному репозиторию или выберите его, нажав на Обзор.... Назначение полей:
    • Искать вложенные репозитории — вы можете добавить сразу несколько репозиториев. Для этого в поле Каталог выберите каталог, который является родительским для всех нужных репозиториев, и установите этот флажок. Будут найдены все вложенные репозитории. У тех репозиториев, которые нужно добавить, установите флажки;
    • Пропускать скрытые директории — про поиске репозиториев пропускать скрытые каталоги;
  4. Установите флажок у найденного репозитория;
  5. Нажмите Добавить.

Добавить существующий локальный репозиторий по его пути

  1. Скопируйте путь к репозиторию в буфер обмена. Путь к репозиторию это полный путь к его каталогу .git;
  2. Добавить репозиторий можно несколькими способами в панели Репозитории Git:
    • В командной панели нажмите (Показать меню) Вставить путь к репозиторию или URI;
    • В контекстном меню группы репозиториев нажмите Вставить путь к репозиторию или URI.

Исключить репозиторий из списка

Чтобы исключить репозиторий из списка в панели Репозитории Git, нажмите Удалить репозиторий из панели в контекстном меню репозитория. Запись исчезнет из панели, но сам репозиторий останется в файловой системе.

Удалить репозиторий

Чтобы удалить репозиторий, выполните следующие действия:

  1. Откройте панель Репозитории Git;
  2. Нажмите Удалить репозиторий... в контекстном меню репозитория;
  3. Выберите один из вариантов удаления:
    • Delete Git repositiry data and history — удаляет репозиторий Git, но оставляет рабочий каталог репозитория и все проекты, находящиеся в нем. Вы можете продолжать работать с проектами, которые были в этом репозитории, но уже без версионирования;
    • Remove the project in the reporitory from the workspace — дополнительно к предыдущему удаляет проект из рабочей области 1C:EDT. Проект исчезает из панели Навигатор, но его файлы остаются на диске. Вы можете импортировать этот проект в другую рабочую область 1C:EDT;
    • Also delete working tree — дополнительно к предыдущему, удаляет и рабочий каталог репозитория;
      Предупреждение: Это действие, естественно, удаляет все проекты, которые находятся в рабочем каталоге репозитория. После этого работа с файлами, хранившимися в репозитории, будет невозможна.
  4. Нажмите Удалить.

Группа параметров «Оформление меток»

Группа параметров Оформление меток позволяет настраивать то, каким образом будет отображаться состояние ресурсов, находящихся под версионным контролем. Для этого используются два элемента оформления: текстовое оформление и оформление иконками.

Открыть группу параметров «Оформление меток»

Нажмите Окно > Параметры... > Групповая разработка > Git > Оформление меток в главном меню.

Текстовое оформление

Текстовое оформление может появляться слева или справа от имени ресурса. Например, стандартное обозначение ресурса, который находится под версионным контролем и был изменен, это угловая скобка > слева от его имени.

Например, на рисунке выше справочник Склады изменен, а справочник Банки — нет.

Текстовое оформление можно настроить на вкладке Оформление текста. Стандартные настройки выглядят следующим образом.

Для описания шаблона, применяемого к файлам и каталогам, используются переменные dirty, staged и name. Если они истинны, то 1C:EDT показывает текст, расположенный после двоеточия.

Для описания шаблона, применяемого к проектам, используются дополнительные переменные repository, branch and branch_status.

Переменная repository показывает имя репозитория.

Переменная branch показывает имя текущей ветки, извлеченной в рабочий каталог. Если извлечена не ветка, а коммит, тогда отображаются первые 7 символов идентификатора коммита.

Например, на рисунке выше в первом случае извлечена ветка master (в угловых кавычках — имя связанной информационной базы), а во втором случае извлечен коммит с идентификатором be66dd6541b2146d3dbf58efaf51577129032117.

Переменная branch_status показывает состояние локальной ветки по сравнению с веткой удаленного отслеживания. Ее визуальное представление можно описать следующими шаблонами:
  • ?N — в локальной ветке есть N коммитов, которые пока не отправлены в ветку удаленного отслеживания. Это можно понимать, как "N коммитов для отправки";
  • ?M — в ветке удаленного отслеживания есть M коммитов, которые пока не получены в локальную ветку. Это можно понимать как "M коммитов для слияния или перебазирования";
  • ?N?M — локальная ветка и ветка удаленного отслеживания разошлись. Одновременно существуют обе ситуации, описанные выше;
  • Пустое представление переменная имеет в том случае, если локальная ветка и ветка удаленного отслеживания совпадают.
Переменную branch_status можно использовать с пробелом в начале, например:
{ branch_status}
В этом случае пробел будет добавляться только тогда, когда статус не пуст.
Оформление иконками

Оформление иконками появляется в нижней правой части значка ресурса. Стандартные настройки выглядят следующим образом.

  • — объект (файл), который пока не находится под версионным контролем;
  • — новый объект (файл), помещенный в индекс и готовый к фиксации в репозитории;
  • — объект (файл), который уже находится под версионным контролем. В рабочем каталоге он не изменен, по сравнению с репозиторием;
  • — угловая кавычка справа от объекта (файла), находящегося под версионным, контролем говорит о том, что в рабочем каталоге этот объект изменен по сравнению с тем, что находится в репозитории;
  • — измененный объект (файл), находящийся под версионным контролем. Его изменения помещены в индекс и готовы к фиксации в репозитории;
  • — частично проиндексированный объект (файл). Есть изменения этого объекта, уже помещенные в индекс (но еще не зафиксированные), и есть изменения, которые были выполнены после этого и еще не помещены в индекс;
  • — файл, который содержит конфликты слияния;
  • — файл, который находился под версионным контролем и был удален из файловой системы;
  • — файл, который игнорируется системой контроля версий Git;
  • — файл, отмеченный как Assume Unchanged.

Оформление иконками можно настроить на вкладке Оформление значков. Снимая флажки можно запретить показ перечисленных иконок для тех или иных групп ресурсов. Сами иконки изменить нельзя.