Почему Git не может разрешить удаленные ветви, когда используется --single-branch? - PullRequest
3 голосов
/ 26 марта 2019

Итак, мы часто оптимизируем клонов, эффективно клонируя с помощью --single-branch.Тем не менее, мы не можем получить дополнительные ветви позже.Какая разница, с точки зрения сантехники, между git-клоном с --single-branch и без него?Как мы можем получить дополнительные ветви позже?

Стандартный клон:

$ git clone -b branch-name https://repo.url standard
$ cd standard
$ git checkout remote-branch
Branch 'remote-branch' set up to track remote branch 'remote-branch' from 'origin'.
Switched to a new branch 'remote-branch'

Клон с одной ветвью:

$ git clone -b branch-name --single-branch https://repo.url singlebranch
$ cd singlebranch
$ git checkout remote-branch
error: pathspec 'remote-branch' did not match any file(s) known to git

ОБНОВЛЕНИЕ

Согласно ответу @AndrewMarshall, ниже, вам необходимо обновить ссылку на выборку по умолчанию в конфигурации.Даже несмотря на то, что вы можете обойти выборку, чтобы снять правильные коммиты, ваша попытка проверки абсолютно отрицает, что вы ничего не знаете об этой ветке, если вы сначала не исправите свою конфигурацию:

$ git fetch origin +refs/heads/remote-branch:refs/remotes/origin/remote-branch
From https://gerrit.magicleap.com/a/platform/mlmanifest
 * [new branch]      remote-branch -> origin/remote-branch

$ git checkout remote-branch 
error: pathspec 'remote-branch' did not match any file(s) known to git

$ git remote set-branches origin --add remote-branch
$ git checkout remote-branch 
Branch 'remote-branch' set up to track remote branch 'remote-branch' from 'origin'.
Switched to a new branch 'remote-branch'

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

1 Ответ

3 голосов
/ 26 марта 2019

--single-branch работает, устанавливая свойство fetch пульта дистанционного управления только в качестве имени одной ветви вместо глобуса:

$ git config --get-all remote.origin.fetch
+refs/heads/master:refs/remotes/origin/master

Итак, давайте добавим запись с git remote set-branches:

$ git remote set-branches origin --add other-branch
$ git config --get-all remote.origin.fetch    
+refs/heads/master:refs/remotes/origin/master
+refs/heads/other-branch:refs/remotes/origin/other-branch

$ git fetch
From origin
 * [new branch]      other-branch        -> origin/other-branch

$ git checkout other-branch
Branch 'other-branch' set up to track remote branch 'other-branch' from 'origin'.
Switched to a new branch 'other-branch'

Или, наоборот, сделать его глобальным, чтобы можно было выбирать все ветви (по умолчанию, поведение не в одной ветви):

git remote set-branches origin '*'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...