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

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

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

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

Список удаленных репозиториев

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

Если вы клонировали репозиторий, то увидите как минимум origin — стандартное имя для исходного репозитория.

Если вы раскроете эту ветку дальше, вы увидите настройки для чтения из этого репозитория и для записи в него. В каждой из них будет указан адрес (URI) репозитория.

В данном случае это репозиторий на сайте GitHub, подключенный по протоколу HTTPS.

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

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

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

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

Проще всего сразу отправить текущую ветку в удаленный репозиторий. В процессе отправки 1C:EDT настроит связь с этим репозиторием.

  1. В панели Навигатор нажмите Групповая разработка > Отправить ветку 'master'... в контекстном меню проекта;
  2. На первом шаге от вас потребуется информация об удаленном репозитории:
    • 1C:EDT подставит стандартное имя для удаленного репозитория — origin. Обычно его не меняют, но вы можете задать любое другое удобное вам имя, например narnia;
    • URI — сюда нужно ввести адрес удаленного репозитория. На его основании 1C:EDT автоматически заполнит другие поля;
    • Пользователь и Пароль — здесь нужно указать учетные данные, которые дают право на запись в удаленный репозиторий. В разных системах контроля версий это могут быть разные учетные данные. На сайте GitHub, например, используется имя пользователя и токен;
    • Установите флажок Сохранить в защищенном хранилище, чтобы 1C:EDT могла автоматически использовать эти данные при обращении к удаленному репозиторию;
    • Нажмите Далее;
  3. На втором шаге задается связь между вашей текущей локальной веткой и локальной веткой удаленного репозитория, которая будет ей соответствовать. Тут менять стандартные настройки не нужно:
    • Локальной ветке master (Источник) будет соответствовать ветка master в удаленном репозитории coldev;
    • 1C:EDT сразу же настроит и запомнит соответствие этих веток (upstream), и стандартно, при получении изменений из ветки удаленного репозитория будет объединять их с локальной веткой (When pulling: Объединить);
    • Нажмите Далее;
  4. 1C:EDT попросит вас подтвердить результат отправки: что ваша ветка master будет отправлена в удаленный репозиторий coldev в его ветку master. Значения флажков, установленные стандартно, вас сейчас устраивают, их менять не надо. Просто нажмите Отправить;
  5. За ходом отправки можно наблюдать в правом нижнем углу экрана;
  6. Через некоторое время 1C:EDT покажет результат отправки;
  7. Все хорошо, в удаленном репозитории создана новая ветка master. Нажмите Закрыть;
  8. Если в вашем репозитории есть другие ветки, которые нужно отправить в удаленный репозиторий, это можно сделать не переключаясь на них. В панели История нажмите Отправить коммит... в контекстном меню ветки, которую нужно отправить;
  9. Здесь вы увидите уже привычные вам страницы мастера, начиная с п.3;
  10. В результате, если вы переключитесь в перспективу Git, то в панели Репозитории Git увидите подключенный удаленный репозиторий origin и ветки удаленного отслеживания для локальных веток, не являющихся текущими. Для текущей ветки 1C:EDT тоже создаст такую ветку автоматически при первой же синхронизации с удаленным репозиторием;
  11. Кроме этого для локальных веток будут настроены upstream-конфигурции. Их можно увидеть в панели Свойства. Для этого на локальной ветке нажмите Показать в > Свойства;

Получить изменения из удаленного репозитория — команды «Получить из origin» и «Получить и слить»

Для получения данных из удаленных репозиториев следует выполнить команду Получить. Таких команд в интерфейсе 1C:EDT несколько.

Когда вы клонируете репозиторий, команда (Клонировать репозиторий Git) автоматически добавляет удаленный репозиторий под именем origin, и настраивает ваш локальный репозиторий на отслеживание этого удаленного репозитория.

Для работы с таким репозиторием в панели Навигатор есть удобная команда Групповая разработка > Получить из origin в контекстном меню проекта. Она извлекает все наработки, отправленные другими на этот удаленный сервер после того, как вы склонировали его, или после того, как в предыдущий раз получили изменения с помощью команды Получить из origin.

Кроме этого есть «универсальная» команда, Групповая разработка > Удаленный репозиторий > Получить из..., которая позволяет связаться с произвольным репозиторием и получить ссылки на все его ветки. Затем эти ветки в любой момент могут быть просмотрены или слиты.

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

Если у вас есть локальная ветка, связанная с веткой удаленного отслеживания (обратитесь к разделу Ветвление в Git за более подробной информацией), то вы можете использовать команду Групповая разработка > Получить и слить , чтобы автоматически получить изменения из удаленной ветви и влить их в свою текущую ветвь.

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

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

Отправить изменения в удаленный репозиторий — команда «Push to origin»

Когда вы хотите поделиться своими наработками, вам необходимо отправить их в удаленный репозиторий — Групповая разработка > Push to origin в контекстном меню проекта в панели Навигатор. Эта команда срабатывает только в случае, если вы клонировали репозиторий с сервера, на котором у вас есть права на запись, и если никто другой с тех пор не выполнял команду Push to origin.

Например, вы и другой разработчик одновременно клонировали удаленный репозиторий, а затем этот другой разработчик выполнил команду Push to origin. Если после этого команду Push to origin выполняете вы, то ваш Push to origin точно будет отклонен. Вам придется сначала получить изменения другого разработчика и объединить их с вашими — Получить и слить. Только после этого вам будет позволено выполнить Push to origin. См. раздел Ветвление в Git для более подробного описания, как отправлять данные в удаленный репозиторий.

Чаще всего необходимость отправить изменения в удаленный репозиторий возникает сразу после их фиксации, поэтому в панели Индексирование Git предусмотрена кнопка Фиксировать и отправить.

Эта команда фиксирует изменения в вашем локальном репозитории и сразу отправляет их в удаленный репозиторий. Для информации она показывает список коммитов, отправленных на сервер.

Удалить репозиторий из панели «Репозитории Git»

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

По материалам книги Pro Git (авторы Scott Chacon и Ben Straub, издательство Apress). Книга распространяется по лицензии Creative Commons Attribution Non Commercial Share Alike 3.0 license.