Различия между git remote update и fetch?
и git remote update в эквиваленте git fetch?
2 ответа:
обновление: дополнительная информация!
я должен был сделать это с самого начала: я захватил заметки о выпуске Git в Git repo (so meta!)
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, но они решили не удалять его, возможно, для обратной совместимости с существующими скриптами и программами, или, может быть, потому, что это просто слишком много работы и есть более приоритетные элементы.
оригинальный ответ с более подробной информации
xenoterracide это сейчас 3,5 года, и с тех пор Git прошел через несколько версий (он ушел от В1.6.5.5 к v1. 8. 3. 2 на момент написания этой статьи), и глядя на настоящее документация
git remote updateиgit fetch, похоже, что они оба могут выполнять в основном ту же функцию извлечения новых коммитов из нескольких пультов дистанционного управления, учитывая правильные варианты и аргументы.извлечение всех пультов
один из способов получить несколько пультов с
--allфлаг:git fetch --allэто принесет от всех ваши настроенные пульты дистанционного управления, предполагая, что у вас нет
remote.<name>.skipFetchAllустановить для них:если true, этот пульт будет пропущен по умолчанию при обновлении с помощью git-fetch (1) или подкоманда обновления git-remote (1). - git-config documentation
это было бы эквивалентно использованию
git remote updateбез указания какой-либо удаленной группы для выборки, а также не имея
remotes.defaultнабор в конфигурации РЕПО, а также то, что ни один из ваших пультов ДУremote.<name>.skipDefaultUpdateзначение true.The текущая документация 1.8.3.2 для конфигурации Git не упоминает
remotes.defaultнастройка, но я проконсультировался с всемогущим Google об этом и нашел это полезное объяснение от Marohnić Мислав:$ git config remotes.default 'origin mislav staging' $ git remote update # fetches remotes "origin", "mislav", and "staging"вы можете определить список пультов дистанционного управления по умолчанию, который будет выбран . Это могут быть пульты дистанционного управления от вашего товарищи по команде, доверенные члены сообщества проекта с открытым исходным кодом или аналогичные.
так что предположительно, если у вас есть
remotes.defaultустановить, и не все ваши пульты дистанционного управления перечислены в нем, тоgit remote updateне будет извлекать все пульты дистанционного управления, о которых ваше РЕПО "знает".что касается
remote.<name>.skipDefaultUpdateнастройки Git docs объяснить это так:если true, этот пульт будет пропущен по умолчанию при обновлении с помощью git-fetch (1) или обновить подкоманду git-remote (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документацияThe синопсис для
git remote updateуказывает, что синтаксис команды выглядит следующим образом:git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…]обратите внимание на последнюю часть,
[(<group> | <remote>)…]? Перемещение точки...подразумевается, что вы можете указать несколько групп и пультов дистанционного управления с помощью команды, что будет означать, что он ведет себя так же, какgit fetch --multiple...видите, как синтаксис между ними настолько похож?однако, в том же документе, объяснение
updateкоманда ничего не говорит об указании нескольких групповых и удаленных аргументов, только то, что онаFetch [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]есть, правда.