Как удаленная ветвь может быть локальной? (git-p4)

#git #git-p4

Вопрос:

Когда я использую git-p4 sync для добавления дополнительных ветвей p4 в репозиторий p4 , который я создал с помощью git-p4 clone , они отображаются как удаленные ветви, например, remotes/p4/ p4branchname. Таким образом, они на самом деле не «в» моем локальном репо, что означает, что я не могу их нажать, и я даже не могу их проверить, не войдя в ужасное состояние «отрешенной ГОЛОВЫ».

Но эти ветви являются локальными для моей машины. Итак, что значит для них быть «удаленными», и есть ли рекомендуемые шаги, чтобы сделать их более нормальными, чтобы я мог с ними работать?

Ответ №1:

Способ, которым ваш локальный Git работает для синхронизации с удаленным Git, заключается в поддержании зеркальных ветвей, которые отражают удаленный Git (обновляется всякий раз, когда вы извлекаете, извлекаете или нажимаете). Они называются ветвями удаленного отслеживания, и их имена начинаются с имени удаленного, возможно , перед именем remotes и после него следует косая черта.

Вы абсолютно правы в том, что они являются «локальными» для вашей машины в том смысле, что они находятся на вашей машине. Но они не являются местными филиалами. Они вам не принадлежат, и вы не можете (как вы правильно сказали) проверить их, кроме как в режиме отстраненной головы, чтобы изучить их. Их единственная цель-поддерживать это синхронизированное зеркальное отражение удаленного Git. И это имеет смысл, для безопасности. Git никогда не коснется ваших ветвей, локальных ветвей, основанных на удаленном Git, если вы специально не попросите его об этом (например, путем объединения или переноса удаленной ветви в локальную ветвь).

Способ работы с филиалом удаленного отслеживания заключается в запуске локального филиала из филиала удаленного отслеживания. Например:

 git switch -c p4branchname remotes/p4/p4branchname  

Это создает локальную ветвь, начиная с ветви удаленного отслеживания, и проверяет ее, чтобы вы могли действительно выполнить работу. Есть ярлыки для высказывания подобных вещей, но я рекомендую использовать полную версию, чтобы вы знали, что делаете.

Комментарии:

1. Обратите внимание, что соглашение о том, что ваша локальная ветвь имеет то же базовое имя, что и соответствующая ветвь удаленного отслеживания,-это просто соглашение. Но это, безусловно, хорошая конвенция, и имеет смысл ей подчиняться, так как в противном случае вы можете запутаться до чертиков.