Итак, ситуация:
$git статус
# На сервере ветки
# Ваша ветка опережает "происхождение/мастер" с помощью [x]. #
Есть несколько вопросов об этом на SO уже, но ни один из них, похоже, специально не описывает тип сценария, который у меня есть. Этот ответ по одному из вопросов подходит ближе, но не вдаваться в подробности.
Я просто процитирую это дословно:
Если вы получите это сообщение после выполнения "git pull remote branch", попробуйте выполнить его с помощью "git fetch".
Кажется, что Fetch обновляет локальное представление удаленной ветки, что не обязательно происходит, когда вы выполняете "git pull remote branch".
Этот совет действительно работает. Но "не обязательно"? Почему нет? Мне нужно это понять. Что тянет не делать?
Я не хочу брать на себя этот вопрос, поэтому здесь мой сценарий подробно:
Три компьютера. Mac, на котором я разрабатываю, мой домашний сервер, на котором существует репозиторий git (т.е. Источник/ведущий), и учетную запись Webfaction, которая извлекается с этого сервера.
Я выполняю транзакции и git push origin master
только на Mac. Единственной командой, которая когда-либо запускается в Webfaction как часть обычного рабочего процесса, является git pull origin master
(как часть развертывания Fabric script). Я не изменяю код там. Я - одинокий разработчик, поэтому никто не делает другого.
Время от времени я вхожу в Webfaction и проверяю вещи, включая git status
. Неизбежно, я всегда получаю сообщение "Ваша ветка впереди...". Запуск git fetch
заставляет сообщение уходить.
Я собираюсь добавить git fetch
в Fabric script для этой проблемы, но я хочу знать, почему это нужно сделать, особенно для клонирования origin-master. Я не очень разбираюсь в git, хотя ежедневно использую базовые функции, поэтому приветствую новички.
Обновить по запросу, соответствующие биты из config
:
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = [email protected][server_address]:[path/to/repo.git]
[branch "master"]
remote = origin
merge = refs/heads/master