remote

remote Remote — другая копия репозитория, о которой знает данная.

Сведения о remote записываются в .git/config. Remote задаётся именем (оно не значимо) и URL.

См. git-config(1), ищите там ключ remote.<name>.url и те, что под ним.

fetch

fetch git fetch обновляет сведения о ветках и тегах в remote-репозиториях и выкачивает объекты, доступные из них.

Список веток хранится в .git/refs/remotes/имя/.

Чтобы увидеть не только ветки в локальном репозитории, но и в remote, нужно выполнить git branch --all.

upstream

Upstream (tracking)-ветка См. git-config(1), ключи:

  • branch.<name>.remote ”--- в каком репозитории хранится “главная” версия данной ветки;

  • branch.<name>.merge ”--- как называется соответствующая ветка в том репозитории.

Назначение веток:

  • git checkout X, если ветки нет в локальном репозитории, но есть в каком-то remote, создаст новую ветку и назначит ей upstream.

  • git push -u Y X назначит ветке upstream-ветку из remote .

pull и push

  • git pull делает git fetch, а затем git merge Y/X, где ”--- это upstream-ветка для данной.

  • git pull --rebase делает git fetch, а затем git rebase Y/X.

  • git push отсылает изменения в upstream и делает git merge, но на стороне upstream.

  • git push --force отсылает изменения в upstream и делает git reset на стороне upstream.

  • git push --force-with-lease отсылает изменения в upstream, сверяет состояние upstream с тем, которое выкачано локально, и делает git reset только в том случае, если upstream не менялся.

submodules

git submodules Submodules — механизм git, позволяющий отсылаться к содержимому других репозиториев (с другими проектами) из данного.

Например, можно положить как submodule в свой репозиторий какую-нибудь библиотеку, исходники которой нужны для сборки.

Репозитории для submodule хранятся в .git/modules; описания submodule — в .git/config. В index и в tree-объектах хранится запись о директории submodule, где в качестве хэша указан хэш коммита в репозитории данного submodule.

Список этих хэшей можно увидеть командой git submodule.

По умолчанию git clone не выкачивает submodule, из-за чего сборка может ломаться. Тогда можно вызвать git submodule init или сразу выкачивать с git clone --recurse-submodules.

См. git-submodule(1).