Вопрос

Является 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 может быть гораздо более детализированным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top