Подтвердить что ты не робот

Могу ли я указать в .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

4b9b3361

Ответ 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, чтобы проверить результат.