Важно сопоставить философию дизайна git с философией более традиционного инструмента управления исходным кодом, такого как SVN.
Subversion был спроектирован и построен с моделью клиент / сервер. Существует один репозиторий, который является сервером, и несколько клиентов могут получить код с сервера, поработать с ним, а затем передать его обратно на сервер. Предполагается, что клиент всегда может связаться с сервером, когда ему нужно выполнить операцию.
Git был разработан для поддержки более распределенной модели без необходимости в центральном репозитории (хотя вы, безусловно, можете использовать ее, если хотите). Кроме того, git был спроектирован так, что клиент и «сервер» не должны быть в сети одновременно. Git был разработан для того, чтобы люди по ненадежной ссылке могли обмениваться кодом даже по электронной почте. Можно работать полностью отключенным и записывать CD для обмена кодом через git.
Для поддержки этой модели git поддерживает локальный репозиторий с вашим кодом, а также дополнительный локальный репозиторий, который отражает состояние удаленного репозитория. Сохраняя копию удаленного репозитория локально, git может выяснить, какие изменения необходимы, даже если удаленный репозиторий недоступен. Позже, когда вам нужно отправить изменения кому-то еще, git может передать их как набор изменений с момента времени, известного удаленному хранилищу.
git fetch
- это команда, которая говорит «обновить мою локальную копию удаленного хранилища».
git pull
говорит «перенести изменения в удаленном хранилище туда, где я храню свой собственный код».
Обычно git pull
делает это, выполняя git fetch
, чтобы обновить локальную копию удаленного репозитория, а затем объединяет изменения в свой собственный репозиторий кода. и, возможно, ваша рабочая копия.
Нужно помнить, что на вашей рабочей станции часто есть как минимум три копии проекта. Одна копия - это ваш собственный репозиторий с собственной историей коммитов. Вторая копия - ваша рабочая копия, где вы редактируете и строите. Третья копия - ваша локальная «кэшированная» копия удаленного репозитория.