Нет Git хранилище является «особенным» или «более важным», чем любое другое хранилище Git, если только вы сами этого не считаете.
Когда вы git clone ssh://main-PC/...
на ноутбуке А, Git при запуске на ноутбуке A создается Git репозиторий, который является равноправным из Git на main-PC
. Вы рассматриваете только основную версию P C как «более мастер-у», потому что именно так вы ее используете, и на самом деле, во время путешествий, версия ноутбука «более мастер-у», потому что она получает новые коммиты.
В хранилище вашего ноутбука A используется имя origin
для запоминания URL ssh://main-PC/...
. Имя origin
является удаленным . Ваш ноутбук-A Git использует имена для удаленного слежения в форме origin/*
, чтобы запомнить имена филиалов в других Git.
На вашем ноутбуке-B вы можете клонируйте ваш ноутбук-клон или ваш основной клон P C. Ваш ноутбук-B запомнит любой URL, который вы используете здесь под своим именем origin
, и будет использовать имена для удаленного отслеживания origin/*
, чтобы запомнить имена веток, скопированные в процессе клонирования.
You Можно добавить больше удаленных имен для любого ноутбука. Например, при условии, что оба ноутбука A и B работали git clone ssh://main-PC/...
, так что на обоих origin
означает ssh://main-PC/...
, вы можете сделать это на ноутбуке A:
git remote add laptop-b ssh://ip.address/path/to/repo.git
, например (из Конечно, IP-адрес может со временем меняться, поэтому вам придется удалить и повторно добавить или использовать git remote set-url
, чтобы исправить это иногда). Теперь ноутбук-A имеет имя для ноутбука-B, и вы можете git fetch
или git push
от A до B, чтобы получить (получить) или отправить (pu sh) любые коммиты, которые находятся на B, но не A (выборка) или A, но не B (pu sh). Аналогично, на ноутбуке B:
git remote add laptop-a ssh://ip.address/path/to/repo.git
создаст удаленное имя laptop-a
на ноутбуке B, и теперь вы можете git fetch
или git push
, используя это имя.
Подтверждает, что На одном ноутбуке теперь легко переносятся на другой. Обратите внимание, что имя для удаленного слежения , например, laptop-b/master
на ноутбуке A - это то, как один ноутбук будет помнить, что другой ноутбук имеет некоторую фиксацию - так что теперь вы захотите иметь тот ноутбук, который есть " позади »обновите свои локальные имена веток, чтобы запомнить новые коммиты.
Ключевым понятием является то, что все три репозитория равноправны . Ни один из них не имеет особого статуса, кроме тех случаев, когда вы лично решаете, что у вас есть особый статус. Вместо того, чтобы принимать решение о состоянии c, вы можете принять решение на основе идентификаторов коммитов ha sh, записанных под именами удаленного отслеживания, такими как origin/master
, laptop-a/master
и laptop-b/master
.
The имена ветвей в каждом из этих одноранговых репозиториев различны. commit ha sh ID одинаковы при условии, что все они имеют одинаковые коммиты. Когда в одном репозитории отсутствуют какие-либо коммиты, git fetch
будет их возвращать (из репозитория, которому нужны коммиты, в тот, в котором они есть), и / или git push
отправит их (из репозитория, в котором есть коммиты). фиксирует тот, который нуждается в них.)
Эти две операции - выборка и нажатие - почти симметрии c, за исключением одного другого ключевого различия. Операция fetch принимает имена ветвей исходного репозитория и переименовывает их , чтобы они входили под именами удаленного отслеживания, такими как origin/master
. Операция pu sh отправляет коммиты, а затем либо:
- запрашивает у цели pu sh указать несколько названий его ветвей (это вежливо non-принудительное pu sh) или
- дает команду целевому элементу pu sh установить одно из имен его ветвей (принудительный pu sh).
Поскольку цель пу sh устанавливает свои имена branch , выполняется несколько специальных условий:
- Ветвь не должна быть извлечена в рабочее дерево. Это хорошо работает, если репозиторий сделан из
--bare
, так как в нем никогда не извлекается ветвь в рабочем дереве. - Или ветвь может быть извлечена в рабочем дереве, но затем Git получающий пу sh должен получить разрешение на такие операции пу sh (и другие условия должны выполняться). См. Например, Git получать. denyCurrentBranch updateInstead терпит неудачу [Edit: или ваша лучшая ссылка, Что это за предупреждение Git при отправке изменений в удаленный репозиторий? .
По этим причинам иногда лучше использовать весь процесс работы; но затем вам нужно использовать вторую команду Git, чтобы объединить новых коммитов в локальный репозиторий. Многим нравится использовать для этого команду git pull
, так как сначала она запускает git fetch
, а затем запускает вторую команду Git для включения извлеченных коммитов.