Различия между 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]
есть, правда.