И GitHub, и Gitlab — это отличные способы размещения ваших репозиторий Git онлайн. У них оба имеют отличные инструменты для управления вашим проектом, будьте его открытым исходным или личным кодом. Я не собираюсь сравнивать обе службы в глубине, так как многие направляющие уже делают это. Для меня общее разницу между Github и Gitlab — Gitlab, ориентирован на больше усилий по трубопроводам и инструментам CI/CD для компаний, в то время как GitHub больше сосредоточен на сообществе и создает платформу, чтобы поделиться с открытым исходным кодом. Оба могут быть использованы для любого сценария … что делает его действительно трудно выбрать между ними!
Но что, если я сказал вам, вам не нужно было выбирать O_O?
Почему я хочу использовать как gitlab, так и github
Просто быстрый отказ от ответственности, это метод, который я использую. Это работает для меня, но не может работать для всех. Я рекомендую экспериментировать с вещами для себя, выполните некоторые тесты. Я делюсь своим опытом, потому что я чувствую, что это может быть полезно для кого-то в той же позиции, что и я.
Мне нравится уметь организовать свои репозитории в проекты (или группы в GitLab). К сожалению, GitHub не делает этого. Я также хочу иметь возможность достичь как можно больше людей с моим репозиториями, Github имеет наибольшее сообщество. Черт возьми, я застрял, хочу функции обоих провайдеров.
К счастью для меня, Gitlab имеет две вещи, которые делают симбиоз между двумя возможными инструментами:
- Репозиторий Github Import. Это делает импорт репозитория из GitHub Super легко
- Синхронизация репозитории от GitLab -> Github (бесплатно) Это позволяет мне использовать Gitlab в качестве основного источника истины, но также иметь хранилище на GitHub. Я могу использовать выпуск Github Tracker, Wiki и Forum (дискуссия GitHub)
- Great Ci/CD (хорошо, я солгал, когда я сказал две вещи)
Этот простой. Вы можете настроить некоторые CI/CD сами. Но Gitlab автоматически сделает это для вас.
- Перейдите в «Настройки> Репозиторий> Репозитории зеркалирования»
- Введите репо GitHUB с вашим именем пользователя перед
https://<имя пользователя github> @ github.com/путь/к/ваше/refo.git - В поле Пароль введите токен GitHub
- Выберите толчок (Это требует подписки)
- Нажмите зеркальный репозиторий
Отныне изменения в Gitlab будут отражаться на Github
Есть два способа сделать это (оба эквивалентны только с противоположных платформ)
- Либо вы устанавливаете CI/CD-трубопровод на GitHub, который вызывает, используя веб -ook (на запросах на push и pull).
- Либо вы устанавливаете CI/CD-трубопровод на GitLab, которые триггеры используют веб -ook (на запросах на push и pull). Оказывается, это на самом деле премиум … Вы не можете использовать Thult Webhook, не платя сейчас
Я лично решил сделать это с стороны GitHub, поскольку метод GitHub свободен
Метод 1 GitHub CI/CD
- Создайте следующие секреты в вашем репозитории GitHUB
Target_url.Значение: URL-адрес хранилища GitLabTarget_tokenценность: Gitlab TokenTarget_usernameценность: Username gitlab.
- Создайте действие GitHub для вашего репозитория следующим кодом:
name: GitlabSync
on:
- push
- delete
jobs:
sync:
runs-on: ubuntu-latest
name: Git Repo Sync
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- uses: wangchucheng/git-repo-sync@v0.1.0
with:
# Such as https://github.com/wangchucheng/git-repo-sync.git
target-url: ${{ secrets.TARGET_URL }}
# Such as wangchucheng
target-username: ${{ secrets.TARGET_USERNAME }}
# You can store token in your project's 'Setting > Secrets' and reference the name here. Such as ${{ secrets.ACCESS\_TOKEN }}
target-token: ${{ secrets.TARGET_TOKEN }}
- Убедитесь, что ветвь, которую вы нажатием в GitLab, не защищены или допускают нажим
Способ 2 Gitlab CI/CD (требуется GitLab Premium)
Обратите внимание, что если у вас есть подписка с GitLab, вы также можете сделать это за несколько кликов в одном ашпионе, что и настроив синхронизацию от GitLab в Github.
Перейдите в «Настройки> Репозиторий> Репозитории зеркалирования»
- Введите репо GitHUB с вашим именем пользователя перед
https://<имя пользователя github> @ github.com/путь/к/ваше/refo.git - В поле Пароль введите токен GitHub
- Выберите Pull (это требует подписки)
- Нажмите зеркальный репозиторий
Ручная настройка
Настройка веб-капонов
Если вы создали проект GitLab через инструмент импорта GitHub, вы можете полностью пропустить этот шаг.
- В вашем репозитории GitHub перейдите в «Настройки> веб-кавказки»
- Создать новый веб -ook
- Путь полезной нагрузки:
https://gitlab.com/API/V4/projects/(Идентификатор проекта можно найти в «Настройках> Общие»)>/Зеркало/Pull - Тип содержимого:
Приложение/JSON - Проверение SSL: выключенный
- Только отправить для: толкать и тянуть
- Путь полезной нагрузки:
Активировать
В проекте GitLab перейдите в «Настройки> веб-кавказки»
Выберите Толкать события из репозитория и введите репозиторий GitHUB (с токеном, если он является частным)
Настройка переменных CI/CD
- В проекте GitLab Перейдите в «Настройки> CI/CD> Переменные»
Создайте переменную с помощью ключа:
Access_Tokenи значение: (сделать его скрытым, потому что это чувствительно)- Создайте переменную с помощью ключа:
Remote_Repository_urlи ценность:<Ваш токен GitHub> @ <ваш репозиторий URL>(Сделай его скрытым, потому что это чувствительно)
- Создайте переменную с помощью ключа:
Настройка CI/CD
- Создайте трубопровод, иду на «CI/CD> Editor» или создавая файл
.gitlab-ci.ymlВ вашем корневом проекте и добавьте следующий контент:
sync-with-github:
before_script:
- git config --global user.name "${GITLAB_USER_NAME}"
- git config --global user.email "${GITLAB_USER_EMAIL}"
script:
- git remote add github $REMOTE_REPOSITORY_URL
- git checkout master
- git pull origin master
- git pull github master
- git status
- git push http://root:$ACCESS_TOKEN@$CI_SERVER_HOST/$CI_PROJECT_PATH.git HEAD:master
Это не приходит без нисходящих. Вот несколько я нашел при тестировании этой настройки.
- Вики, проблемы, обсуждения, доски и т. Д. Не будут синхронизироваться между двумя провайдерами хостинга. Это будет только синхронизировать, что в вашем хранилище. Есть способы синхронизации Wikis (Wiki по существу является скрытым хранилищем .git, а github, и gitlab используют один и тот же формат wiki)
- Это может быть запутано иметь два удаленных репозитория одновременно
- Они могут выйти из синхронизации, если несколько коммитов происходят в двух местах одновременно и создают конфликты (я использую это только на репозиториях, которые я и только использую)
Оригинал: «https://dev.to/brunorobert/github-and-gitlab-sync-44mn»