Linux Labs

Автоматизация: Git и Ansible / Ступень 2 из 6

Конфиг из репозитория: pull и конфликты

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 4 из 7 · на машине · 7 мин

Отправить свою правку

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

Коммит из прошлого урока (git add и git commit -m) живёт только в этой рабочей копии: git status после него пишет «ahead of 'origin/main' by 1 commit». git push отправляет новые коммиты ветки в origin, и другие копии получают их своим pull. После push status снова пишет «up to date with 'origin/main'».

Упражнение · сделать

Отправь правку в репозиторий

Команда решила поднять лимит загрузки lab-site до 50m на всех серверах. В /etc/nginx/conf.d поменяй лимит в lab-site.conf, запиши правку коммитом и отправь её в репозиторий /srv/git/lab-site.git, чтобы её забрали остальные копии.

Войти и начать Машина доступна после входа

Цели · 0 из 2

  • Записать новый лимит коммитом ещё не выполнена
  • Отправить коммит в общий репозиторий ещё не выполнена

Репозиторий принимает push, только если твой коммит продолжает его историю. Если кто-то отправил коммит раньше тебя, git откажет: ! [rejected] main -> main (fetch first) или (non-fast-forward). Чужой коммит не пропадёт и не перезапишется — сначала забери его pull, потом отправляй снова.

Заметка

Когда новые коммиты есть и у тебя, и в репозитории, git pull спросит, как их соединить: «Need to specify how to reconcile divergent branches». git pull --no-rebase --no-edit соединяет их коммитом слияния с готовым сообщением, после него push проходит (в Вики).

Проверь себя 1 вопрос

Ты закоммитил правку, а git push ответил «! [rejected] main -> main (fetch first)». Что сделаешь?

  • reset --hard выбросит твой коммит, и отправлять станет нечего. Свою правку пришлось бы делать заново.

  • nginx к отказу не причастен: репозиторий не принял коммит, потому что в нём есть коммиты, которых нет у тебя.

  • --force заменит историю репозитория твоей, и коммит коллеги пропадёт из общей ветки. Отказ как раз защищает его.

Репозиторий принимает push, только если твой коммит продолжает его историю. Сначала pull забирает чужие коммиты, затем push проходит.

Цели шага

0 из 2
  • Записать новый лимит коммитом — ещё не выполнена
  • Отправить коммит в общий репозиторий — ещё не выполнена
Ubuntu 24.04

Цели шага

0 из 2
  • Записать новый лимит коммитом — ещё не выполнена
  • Отправить коммит в общий репозиторий — ещё не выполнена
Загрузка…