Git: Данная удаленная ветка отслеживания - Как найти, какую удаленную ветку он отслеживает - PullRequest
0 голосов
/ 16 мая 2018

У меня есть пульт с особой fetchspec

[remote "devall"]
url = https://BNahum90789@dcilpa670/scm/devops/dev4all.git
fetch = +refs/heads/dev/BNahum90789_2/*:refs/remotes/dev_BNahum90789/*

Теперь я нажимаю на пульт:

git push -u devall my:dev/BNahum90789_2/my_on_remote

Итак, моя ветка удаленного отслеживания выглядит так:

git rev-parse --symbolic-full-name dev_BNahum90789/my_on_remote
refs/remotes/dev_BNahum90789/my_on_remote

Учитывая эту удаленную ветку отслеживания 'Ссылки / пультов ДУ / dev_BNahum90789 / my_on_remote' Как я могу найти имя удаленного и филиала на удаленном ?? (Обратите внимание, он не содержит ни удаленного имени, ни локальной ветви отслеживания !!!)

(Единственный способ, о котором я могу подумать, - это просмотреть все спецификации fetch всех пультов и найти, какой из них соответствует)

Спасибо Боаз

Ответы [ 2 ]

0 голосов
/ 16 мая 2018
[remote "devall"]
url = https://BNahum90789@dcilpa670/scm/devops/dev4all.git
fetch = +refs/heads/dev/BNahum90789_2/*:refs/remotes/dev_BNahum90789/*

Git по умолчанию встраивает удаленное имя в имена веток удаленного отслеживания. Когда вы вынули это, вы ничего не сломали, все, что отслеживает r-t-b, все еще отслеживает их без этого, fetch все еще обновляет их, все все еще работает. Просто становится немного труднее следовать.

как я могу найти имя удаленного и филиал на удаленном

Поищите refspecs, которые сопоставляют ваше имя с r-t-b.

git config --get-regexp fetch refs/remotes/dev_BNahum90789

чтобы увидеть все refspecs, которые отображаются на это имя r-t-b. В вашем случае вы получите не менее

remote.devall.fetch +refs/heads/dev/BNahum90789_2/*:refs/remotes/dev_BNahum90789/*

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

Кстати, у меня есть

git config alias.grl '!f() { git config --local --get-regexp "${@-.}"; }; f' 
git config alias.gr '!f() { git config --get-regexp "${@-.}"; }; f'

, который по умолчанию выполняет поиск, чтобы показать все и значительно упрощает поиск, git grl fetch BNahum, вероятно, сделает это.

0 голосов
/ 16 мая 2018

Вы правы, для очень сложных случаев, таких как этот, вы должны пройти через все fetch-specs для всех пультов.Это похоже на то, что Git делает внутренне при извлечении: он берет каждую ссылку, представленную другим Git (как показано git ls-remote <em>remote-url</em>), и пропускает ее через все строки fetch для этого конкретного пульта, чтобы увидеть, какие именаэто сопоставляется с.Если более одного входного имени отображается на это выходное имя, это ошибка. 1

В вашем случае у вас нет имени входа, а есть имя выхода.Нет гарантии, что существует уникальное сопоставление выходного имени с возможным входным именем.Конечно, вы можете запустить git ls-remote на этом пульте, чтобы увидеть, какие у них есть входные имена, и, следовательно, повторить работу, которую сделает Git.

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


1 В некоторых версиях Git вы не получаете никакой реальной ошибки, вы просто получаетестранное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...