exam

Работа с удалёнными репозиториями GitHub, GitLab, Bitbucket.

Работа с удалёнными репозиториями на GitHub, GitLab и Bitbucket в целом строится по одним и тем же принципам (Git), но есть нюансы в интерфейсах и некоторых функциях. Ниже — универсальные команды и специфика каждой платформы.


Базовые команды для работы с удалённым репозиторием

Клонирование проекта

git clone <URL-репозитория>

URL берут на странице репозитория (кнопка Code на GitHub/GitLab, Clone на Bitbucket). Можно использовать HTTPS или SSH.

SSH удобнее для регулярной работы: не нужно каждый раз вводить пароль, а для команды настраивают SSH‑ключ.

Проверка подключённых удалённых репозиториев

git remote -v

Обычно используется имя origin для основного удалённого репозитория.

Отправка изменений (push)

git push -u origin <имя-ветки>

Флаг -u один раз связывает локальную ветку с удалённой, чтобы потом можно было писать просто git push.

Получение изменений (pull)

git pull origin <имя-ветки>

Это эквивалентно git fetch + git merge. Если нужна более чистая история, вместо pull используют git rebase.

Fetch без слияния

git fetch origin

Получает данные об удалённых ветках и коммитах, но не меняет рабочую директорию. Полезно, чтобы посмотреть, что есть на сервере, прежде чем делать merge или rebase.


Типичный рабочий процесс

  1. Клонируем проект: git clone ....
  2. Создаём ветку для задачи: git checkout -b feature/new-login.
  3. Вносим изменения, делаем коммиты: git add ., git commit -m "...".
  4. Отправляем ветку на сервер: git push -u origin feature/new-login.
  5. Создаём запрос на слияние (Pull/Merge Request) в интерфейсе платформы.
  6. Проходим ревью, при необходимости вносим правки и делаем новые коммиты — они автоматически попадают в тот же PR/MR.
  7. После одобрения сливаем ветку в основную (обычно это делает ревьюер или CI/CD).
  8. Удаляем удалённую ветку: git push origin --delete feature/new-login (локальную можно удалить через git branch -d feature/new-login).

Особенности GitHub, GitLab, Bitbucket

ПлатформаХарактерные особенности
GitHubСамый популярный хостинг. Акцент на Pull Requests, Actions (CI/CD), шаблоны репозиториев, GitHub Discussions, Codespaces (облачная среда разработки). Часто используют GitHub Flow (короткие feature‑ветки → PR → merge в main).
GitLabСильная интеграция CI/CD (GitLab CI) «из коробки», продвинутые правила защиты веток, environments, deploy tokens, удобные инструменты для DevOps. Есть GitLab Flow и Trunk Based Development.
BitbucketТесная интеграция с Jira и другими продуктами Atlassian. Хорошо подходит для корпоративных команд, где уже используют экосистему Atlassian. Поддерживает как Git, так и Mercurial (хотя Git сейчас основной).

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


Важные практики и нюансы

  • Защита основной ветки. На всех платформах можно настроить правила: нельзя делать push напрямую в main/master, обязательны Pull/Merge Requests, проверки CI, минимум N ревьюеров и т.п.
  • Squash и rebase. При слиянии можно выбрать, как сохранить историю: обычный merge (сохраняет все коммиты), squash (все коммиты ветки превращаются в один), rebase (перекладывает коммиты поверх актуальной истории).
  • Force push. Команда git push --force перезаписывает историю на удалённом репозитории. Это опасно для общих веток: можно потерять чужие коммиты. Используйте только для своих временных веток, если точно знаете, что делаете.
  • Работа с несколькими удалёнными. Иногда добавляют второй remote (например, upstream для форка):git remote add upstream <URL-оригинального-репозитория> git fetch upstream git merge upstream/main Это нужно, когда вы работаете с форком чужого проекта и хотите подтягивать изменения из оригинала.

Пример: работа с форком на GitHub

  1. На GitHub нажимаете Fork — создаётся ваша копия репозитория.
  2. Клонируете её: git clone <ваш-URL>.
  3. Добавляете оригинал как upstream:git remote add upstream <URL-оригинала>
  4. Регулярно обновляете свою копию:git fetch upstream git checkout main git merge upstream/main
  5. Для новой задачи создаёте ветку, коммитите, git push -u origin <ветка>, затем создаёте Pull Request в оригинальном репозитории.

Частые проблемы и решения

  • «Updates were rejected because the tip of your branch is behind» — на сервере появились новые коммиты, которых нет у вас. Сделайте git pull или git rebase, разрешите конфликты, затем push.
  • «src refspec … does not match any» — проверьте имя ветки и убедитесь, что она существует локально.
  • Конфликты слияния. Откройте файлы, найдите маркеры конфликта (<<<<<<<, =======, >>>>>>>), оставьте нужный код, удалите маркеры, сделайте git add, затем завершите слияние коммитом.