git. Несколько удалённых репозиториев

git. Несколько удалённых репозиториев

2021-03-27 · 2 мин. для прочтения
blog computer-science
  • Я использую несколько серверов репозиториев: github, gitlab, bitbucket.
  • Возникает необходимость использовать несколько удалённых репозиториев в проекте.
Содержание

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

  • Локальный репозиторий можно связать с несколькими удалёнными репозиториями. Однако только одна из этих ссылок может называться origin. Остальные ссылки должны иметь другие имена.
  • Команда git remote -v отображает все удалённые репозитории, связанные с вашим локальным репозиторием.
  • Для отправки или получения кода из вашего удалённого репозитория по умолчанию используется короткое имя origin.

2 Несколько удалённых репозиториев

  • Можно добавить несколько удалённых репозиториев по https:
    git remote add github https://github.com/your_name/repository_name.git
    git remote add gitlab https://gitlab.com/your_name/repository_name.git
    git remote add bitbucket https://bitbucket.org/your_name/repository_name.git
    
    или по ssh:
    git remote add github git@github.com:your_name/repository_name.git
    git remote add gitlab git@gitlab.com:your_name/repository_name.git
    git remote add bitbucket git@bitbucket.org:your_name/repository_name.git
    
  • По команде git remote -v получим список репозиториев:
    github git@github.com:your_name/repository_name.git (fetch)
    github git@github.com:your_name/repository_name.git (push)
    gitlab git@gitlab.com:your_name/repository_name.git (fetch)
    gitlab git@gitlab.com:your_name/repository_name.git (push)
    bitbucket git@bitbucket.org:your_name/repository_name.git (fetch)
    bitbucket git@bitbucket.org:your_name/repository_name.git (push)
    
  • Для отправки кода в репозиторий необходимо указать его имя:
    git push github master
    git push gitlab master
    git push bitbucket master
    

3 Замена репозитория по умолчанию

  • Любой из репозиториев можно назвать origin, тогда он будет репозиторием по умолчанию.
  • Также можно заменить текущий удалённый репозиторий:
    git remote set-url <remote_name> <remote_url>
    
    Например:
    git remote set-url origin https://github.com/your_name/repository_name.git
    

4 Submodules

  • Если репозиторий содержит подмодули, то желательно, чтобы они находились на том же хостинге.

4.1 Скрипт для автоматической замены URL

  • Можно сделать с помощью хуков.
  • Создайте скрипт .git/hooks/post-checkout:
#!/bin/bash
# fix-submodules.sh

# Определяем текущий origin URL
ORIGIN_URL=$(git remote get-url origin)

if [[ $ORIGIN_URL == *"github.com"* ]]; then
    git submodule set-url lib/mylib https://github.com/user/mylib.git
elif [[ $ORIGIN_URL == *"gitlab.com"* ]]; then
    git submodule set-url lib/mylib https://gitlab.com/user/mylib.git
fi

git submodule sync
  • Сделайте файл исполняемым:
    chmod +x .git/hooks/post-checkout
    
  • Впрочем, поскольку хуки не отправляются в репозиторий, они действуют только локально.
Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Работаю профессором на кафедре теории вероятностей и кибербезопасности Российского университета дружбы народов им. Патриса Лумумбы. Научные интересы относятся к области теоретической физики и математического моделирования.