Могу ли я указать в .git/config для извлечения нескольких refspec?
Я не хочу получать каждую ветку из источника, потому что их много. Я просто хочу отслеживать несколько (например, master
) и мои ветки (организованные в подкаталоге my_name
). Я могу сделать следующее:
$ git fetch origin refs/heads/my_name/*:refs/remotes/origin/my_name/* refs/heads/master:refs/remotes/origin/master refs/heads/some_branch:refs/remotes/origin/some_branch
Я хочу, чтобы указанный выше "набор" refspecs был значением по умолчанию git fetch
. Я пробовал
$ git config remote.origin.fetch refs/heads/my_name/*:refs/remotes/origin/my_name/*
$ git config --add remote.origin.fetch refs/heads/master:refs/remotes/origin/master
Не удается:
$ git config remote.origin.fetch
refs/heads/my_name/*:refs/remotes/origin/my_name/*
error: More than one value for the key remote.origin.fetch: refs/heads/master:refs/remotes/origin/master
Я также пробую следующее, но это также не удается:
$ git config remote.origin.fetch 'refs/heads/my_name/*:refs/remotes/origin/my_name/* refs/heads/master:refs/remotes/origin/master refs/heads/some_branch:refs/remotes/origin/some_branch'
$ git fetch
fatal: Invalid refspec 'refs/heads/my_name/*:refs/remotes/origin/my_name/* refs/heads/master:refs/remotes/origin/master refs/heads/some_branch:refs/remotes/origin/some_branch'
Примечание: Git 1.7.11
Ответы
Ответ 1
Вы можете добавить следующие строки в .git/config
, чтобы указать несколько refspec для извлечения:
[remote "origin"]
fetch = refs/heads/my_name/*:refs/remotes/origin/my_name/*
fetch = refs/heads/master:refs/remotes/origin/master
fetch = refs/heads/some_branch:refs/remotes/origin/some_branch
Вы можете добавить префикс +
перед refspec, если вы хотите также переопределить выборку ссылок без перемотки вперед, например:
[remote "origin"]
fetch = +refs/heads/my_name/*:refs/remotes/origin/my_name/*
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/some_branch:refs/remotes/origin/some_branch
Обратите внимание, что частичное globbing не поддерживается (т.е. a/b/ca*
не поддерживается, но a/b/*
is).
10.5 Git Внутренние - Refspec
Ответ 2
Примечание: если вы хотите извлечь из другого refspec по одному вызову (переопределяя временно refcpec, зарегистрированный в конфиге), вы можете сделать это с Git 2.1 (август 2014 г.).
Смотрите зафиксировать c5558f8 Junio C Hamano (gitster
):
С момента появления оппортунистических обновлений ветвей удаленного отслеживания началось около f269048 (fetch
: оппортунистически обновлять ссылки отслеживания, 2013-05-11) с несколькими обновлениями в эпоху v1.8.4, конфигурация remote.*.fetch
всегда срабатывает, даже если в командной строке указан параметр refspec, чтобы указать, что выбрать, и нет способа отключить или переопределить его для каждого вызова.
Учите команду, чтобы обратить внимание на параметры командной строки --refmap=<lhs>:<rhs>
, которые можно использовать для переопределения использования сконфигурированного remote.*.fetch
как refmap.
Это дает вам новую возможность:
--refmap=<refspec>
При извлечении ссылок, перечисленных в командной строке, используйте указанный refspec (может быть предоставлен более одного раза) для сопоставления ссылок refs с ветками удаленного отслеживания вместо значений remote.*.fetch
переменных конфигурации для удаленного репозитория. < ш > Подробнее см. Раздел "Конфигурированные ветки удаленного отслеживания".
(Этот раздел Git "Конфигурированные ветки удаленных следов" также датируется Git 2.1: см. "Имея трудное понимание git fetch
" )
Ответ 3
Чтобы перезаписать существующие параметры fetch refetch, без необходимости вручную редактировать .git/config
, вы можете использовать --unset-all
, а затем как можно больше --add
.
Для примера требуемых рефлексов в вопросе это будет:
$ git config --unset-all remote.origin.fetch
$ git config --add remote.origin.fetch +refs/heads/my_name/*:refs/remotes/origin/my_name/*
$ git config --add remote.origin.fetch +refs/heads/master:refs/remotes/origin/master
Затем используйте git config --get-all remote.origin.fetch
, чтобы проверить результат.