Различия между git remote update и fetch?
-
13-09-2019 - |
Вопрос
Является git remote update
эквивалент git fetch
?
Решение
Обновить:больше информации!
Я должен был сделать это с самого начала:Я поместил примечания к выпуску Git в репозиторий Git Git (такая мета!)
grep --color=always -R -C30 fetch Documentation/RelNotes/* | less
Затем я сделал less
поиск для --all
, и это то , что я нашел под примечания к выпуску для Git версии 1.6.6:
git fetch
изученный--all
и--multiple
параметры, позволяющие запускать выборку из многих репозиториев, и--prune
возможность удалить ветви удаленного отслеживания, которые устарели.Это делаетgit remote update
иgit remote prune
менее необходимый (нет плана по удалениюremote update
ниremote prune
, хотя).
Версия 1.6.6 не была выпущена до 23 декабря 2009, и Оригинальный Постер задал свой вопрос 6 декабря 2009 года.
Итак, как вы можете видеть из примечаний к выпуску, авторы Git были осведомлены о том факте, что git remote update
функциональность команды была несколько дублирована git fetch
, но они решили не удалять его, возможно, для обратной совместимости с существующими скриптами и программами, или, может быть, потому, что это просто слишком много работы и есть элементы с более высоким приоритетом.
Оригинальный ответ с более подробной информацией
ответ ксенотеррацида сейчас ему 3,5 года, и с тех пор Git прошел через несколько версий (он перешел с v1.6.5.5 к версии v1.8.3.2 на момент написания этой статьи), и глядя на текущий документация для git remote update
и git fetch
, похоже , что они оба могут выполнять в основном одну и ту же функцию извлечения новых коммитов с нескольких удаленных устройств, учитывая правильные варианты и аргументы.
Выборка всех пультов дистанционного управления
Одним из способов извлечения нескольких пультов дистанционного управления является использование --all
Отметить:
git fetch --all
Это приведет к извлечению данных со всех ваших настроенных пультов дистанционного управления, предполагая, что у вас нет remote.<name>.skipFetchAll
набор для них:
Если true, то этот пульт дистанционного управления будет пропущен по умолчанию при обновлении с помощью git-выборка(1) или подкоманда обновления git-удаленный (1). — документация git-config
Это было бы эквивалентно использованию
git remote update
без указания какой-либо удаленной группы для извлечения, а также не имея remotes.default
задано в вашей конфигурации репозитория, а также то, что ни один из ваших пультов дистанционного управления не имеет remote.<name>.skipDefaultUpdate
установите значение true.
В текущая документация 1.8.3.2 для настройки Git не упоминает о remotes.default
настройки, но я проконсультировался по этому поводу с Всемогущим Google и нашел это полезное объяснение из Mislav Marohnić:
$ git config remotes.default 'origin mislav staging'
$ git remote update
# fetches remotes "origin", "mislav", and "staging"
Вы можете определить список пультов дистанционного управления по умолчанию, который будет извлекаться
remote update
команда.Это могут быть удаленные пользователи из ваших товарищей по команде, доверенные члены сообщества проекта с открытым исходным кодом или аналогичные.
Так что, по-видимому, если у вас есть remotes.default
установлен, и в нем перечислены не все ваши пульты дистанционного управления, тогда git remote update
не будет извлекаться все удаленные устройства, о которых "известно" вашему репозиторию.
Что касается remote.<name>.skipDefaultUpdate
настройка, документы Git объясните это таким образом:
Если true, то этот пульт дистанционного управления будет пропущен по умолчанию при обновлении с помощью git-выборка(1) или подкоманда обновления git-удаленный (1).
Выборка указанной группы пультов дистанционного управления
Вместо того, чтобы извлекать все пульты дистанционного управления, оба fetch
и remote update
позволяет указать несколько пультов и групп пультов для извлечения:
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)…]
git fetch [<options>] <group>
позволяет вам извлекать несколько пультов дистанционного управления, входящих в группу (чтобы позаимствовать другой пример из Мислав):
$ git config remotes.mygroup 'remote1 remote2 ...'
$ git fetch mygroup
git fetch --multiple
позволяет вам указать несколько репозиториев и групп репозиториев для одновременной выборки (из документы):
Разрешить несколько
<repository>
и<group>
аргументы, которые необходимо указать.НЕТ<refspec>s
может быть уточнен.
Двусмысленность в git remote update
Документация
В краткий обзор для git remote update
указывает , что синтаксис команды следующий:
git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…]
Обратите внимание на последнюю часть, [(<group> | <remote>)…]
?Конечные точки ...
подразумевается, что вы можете указать несколько групп и пультов дистанционного управления с помощью команды, что означало бы, что она ведет себя так же, как git fetch --multiple
...видите, насколько синтаксис между ними настолько похож?
Однако в том же документе приводится объяснение для update
команда ничего не говорит об указании нескольких групповых и удаленных аргументов, только о том, что она
Извлекать обновления [es] для именованного набора удаленных устройств в репозитории, как определено
remotes.<group>
.
Так что неясно, если git remote update
работает идентично git fetch --multiple
что касается указания нескольких отдельных пультов дистанционного управления и нескольких удаленных групп.
Получение одного пульта дистанционного управления
Наконец, всем известен простой случай получения одного пульта дистанционного управления:
git fetch <remote>
Возможно, это тот случай, когда вы также можете использовать
git remote update <remote>
чтобы сделать то же самое, но, как я упоминал в предыдущем разделе, документация для git remote update
неясно, возможно ли извлечь что-либо, кроме одного Группа из пультов дистанционного управления с командой.
Обертывание
Как я уже объяснял, git fetch
и git remote update
ведите себя аналогично в отношении выборки с нескольких удаленных устройств.Однако они имеют схожий синтаксис и аргументы git fetch
он короче, поэтому людям, вероятно, легче его набирать и использовать.
Это может быть тот случай , когда git remote update
не может быть использован для извлечения только одного пульта дистанционного управления, как с git fetch
, но, как я уже указывал, документация не проясняет это.
В сторону
Дублирование функциональности между командами Git porcelain, примером которого является git fetch
и git remote update
выше, не является уникальным.Я заметил аналогичную ситуацию с git rebase --onto
и git cherry-pick
, в том смысле, что для исправления обоих может потребоваться ряд коммитов на новый базовый коммит.
Я предполагаю, что по мере того, как Git развивался на протяжении многих лет, некоторые функциональные возможности были (неизбежно?) дублировались, возможно, иногда для удобства конечных пользователей (например, проще передать диапазон в cherry-pick
, чем передавать один коммит снова и снова, чтобы выбрать диапазон).По - видимому cherry-pick
не всегда принимал ряд коммитов, как объяснено в примечания к выпуску версии v1.7.2:
git cherry-pick
научился выбирать диапазон коммитов (напримерcherry-pick A..B
иcherry-pick --stdin
), так и сделалgit revert
;они не поддерживают более удобное управление последовательностьюrebase [-i]
хотя имеет.
Другие советы
Да и нет. git remote update
извлекается со всех пультов дистанционного управления, а не только с одного.
Не заглядывая в код, чтобы увидеть, является ли remote update
это всего лишь сценарий оболочки (возможно), он, по сути, запускает выборку для каждого удаленного устройства. git fetch
может быть гораздо более детализированным.