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

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

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

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

Просмотреть удаленные репозитории

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

В разделе Remote Configuration вы увидите информацию о доступных удаленных репозиториях.

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

Рядом с именем репозитория вы видите адреса для чтения (Fetch) и записи (Push), привязанные к репозиторию. В данном случае они одинаковые — https://github.com/1C-EDT-Developer/coldevex.

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

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

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

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

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

  1. Нажмите Удаленный > Добавить удаленный репозиторий... (Remote > Add Remote...) в дополнительном меню репозитория;
  2. В палитре команд введите адрес удаленного репозитория, например, https://github.com/1C-EDT-Developer/coldevexremote.git, и выберите его из списка;
  3. Задайте имя репозитория — origin. Это стандартное имя, которое Git использует для удаленного репозитория, но вы можете задать любое другое удобное вам имя, например narnia;
  4. Отправьте первый раз свои изменения в удаленный репозиторий. Для этого нажмите Отправка (Push) в дополнительном меню репозитория;
  5. Visual Studio Code сообщит вам, что локальная ветка main, в которой вы находитесь, пока еще не связана ни с какой веткой удаленного отслеживания. А раз так, то Visual Studio Code не знает, в какую ветку удаленного репозитория отправлять ваши изменения из ветки main.
    Visual Studio Code предлагает вам опубликовать ветку main, то есть установить стандартное соответствие вашей ветки main и ветки main, находящейся в удаленном репозитории. Нажмите ОК;
  6. Изменения будут переданы в удаленный репозиторий и в разделе Граф системы управления версиями (Source Control Graph) вы увидите, что у последнего коммита, рядом с веткой main появилось обозначение ветки удаленного отслеживания — origin/main;
    Это говорит о том, что ваш локальный репозиторий и удаленный репозиторий имеют одинаковую историю коммитов. Все коммиты, которые есть у вас в локальном репозитории, есть теперь и в удаленном.
  7. Если вы загляните в конфигурационный файл .git\config, находящийся в вашем локальном репозитории, то увидите в нем следующие записи:
    [remote "origin"]
    	url = https://github.com/1C-EDT-Developer/coldevexremote.git
    	fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "main"]
    	remote = origin
    	merge = refs/heads/main

    Первая секция говорит о том, что подключен удаленный репозиторий с именем origin и при получении изменений из него, его локальная ветка <ветка> поступает в вашу локальную ветку origin/<ветка>.

    Вторая секция говорит о том, что при отправке изменений в удаленный репозиторий и при получении изменений из него ваша локальная ветка main соответствует его локальной ветке main.

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

Для получения данных из удаленного репозитория следует выполнить команду Принесение (Fetch). Эта команда расположена в дополнительном меню репозитория.

Если у вас подключено несколько удаленных репозиториев, то в этом же меню есть аналогичная команда Вытягивание, отправка > Забрать из всех удаленных репозиториев (Pull, Push > Fetch From All Remotes).

Также эта команда доступна и в разделе Граф системы управления версиями (Source Control Graph): (Забрать из всех удаленных репозиториев / Fetch From All Remotes)

Данная команда, Принесение (Fetch), связывается с удаленным репозиторием и забирает все те данные проекта, которых у вас еще нет. После того как вы выполнили команду, у вас должны появиться ссылки на все ветки из этого удаленного репозитория, которые вы можете просмотреть или слить в любой момент.

Когда вы клонируете репозиторий, Visual Studio Code автоматически добавляет этот удаленный репозиторий под именем origin. Таким образом, команда Принесение (Fetch) извлекает все наработки, отправленные на этот сервер после того, как вы его клонировали или получили изменения с помощью Принесение (Fetch).

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

Если ветка настроена на отслеживание удаленной ветки (см. следующий раздел и главу Ветвление в Git чтобы получить больше информации), то вы можете использовать команду Вытягивание (Pull) чтобы автоматически получить изменения из удаленной ветки и слить их со своей текущей. Этот способ может для вас оказаться более простым или более удобным. К тому же, Visual Studio Code по умолчанию при клонировании автоматически настраивает вашу локальную ветку main на отслеживание удаленной ветки main на сервере, с которого вы клонировали репозиторий. Название веток может быть другим и зависит от ветки по умолчанию на сервере.

Команда Вытягивание (Pull):
  1. Извлекает (Принесение (Fetch)) данные с сервера, с которого вы изначально клонировали, и
  2. Автоматически пытается влить их (Ветвь > Объединить... (Branch > Merge...)) в код, над которым вы в данный момент работаете.

Если у вас подключено несколько удаленных репозиториев, то тогда вы можете использовать команду Вытягивание, отправка > Получить из... (Pull, Push > Pull from...). Она позволяет выбрать нужный репозиторий.

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

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

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

Чаще всего необходимость отправить изменения в удаленный репозиторий возникает сразу после их фиксации, поэтому в разделе Система управления версиями (Source Control) есть кнопка Фиксация и отправка (Commit & Push):

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

Удалить или переименовать удаленный репозиторий

Для переименования удаленного репозитория можно использовать расширение Git Graph. Откройте расширение, нажмите (Repository Settings) в его командной панели, а затем нажмите (Edit Remote...) у нужного удаленного репозитория.

Расширение откроет диалоговое окно, в котором вы сможете выполнить изменения. Например, с origin на michael (если вы, например, подключили репозиторий своего коллеги).

Стоит упомянуть, что это также изменит имена удаленных веток в вашем репозитории. То, к чему вы обращались как origin/main, теперь стало michael/main.

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

Аналогичная ей команда Удаленный > Удалить удаленный репозиторий (Remote > Remove Remote) находится и в контекстном меню репозитория в представлении Система управления версиями (Source Control).

При удалении ссылки на удаленный репозиторий все отслеживаемые ветки и настройки, связанные с этим репозиторием, так же будут удалены.

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