Linux Labs

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

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

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

Шаг 2 из 7 · теория · 5 мин

Откуда pull берёт коммиты

Рабочая копия помнит адрес общего репозитория и сверяет с ним свою историю.

Общий репозиторий, куда все отправляют коммиты, — bare-репозиторий: в /srv/git/lab-site.git нет рабочих файлов, только история (ls покажет HEAD, objects, refs). Рабочую копию на сервере делают командой git clone /srv/git/lab-site.git <каталог>: git копирует историю и запоминает адрес репозитория под именем origin — его показывает git remote -v.

git pull делает два шага. Сначала git fetch скачивает новые коммиты в ветку origin/main — так рабочая копия видит, что сейчас лежит в репозитории. Рабочие файлы при этом не меняются. Затем pull переносит эти коммиты в твою ветку main и в файлы. В опыте отказ случился на втором шаге: коммит уже скачан, поэтому status и пишет «behind 'origin/main' by 1 commit». Подробнее о fetch, pull и push — в Вики.

bash
# скачать новые коммиты, файлы не трогать
sudo git fetch
# что скачано, но ещё не применено
sudo git log --oneline HEAD..origin/main
Проверь себя 1 вопрос

В репозитории новый коммит, меняющий lab-site.conf. Ты запускаешь sudo git fetch. Что станет с lab-site.conf в рабочей копии?

  • Маркеры появляются при слиянии, когда обе стороны поменяли одни строки. fetch ничего не сливает и файлов не трогает.

  • Отказ «would be overwritten» случается при переносе в файлы. fetch файлов не касается, поэтому правка ему не мешает.

  • Файлы меняет второй шаг pull — перенос коммитов в ветку. fetch лишь скачивает их в origin/main: git log HEAD..origin/main покажет, что пришло.

git fetch только скачивает коммиты и обновляет origin/main. Рабочие файлы и ветка main не меняются, пока коммиты не перенесёт pull.

Главное в шаге

  • bare-репозиторий хранит общую историю без рабочих файлов; рабочая копия знает его под именем origin.
  • git pull — это git fetch (скачать коммиты в origin/main) и перенос их в свою ветку и файлы.
  • git log HEAD..origin/main показывает коммиты, которые скачаны, но ещё не применены.
Ubuntu 24.04
Загрузка…