Ответы:
ОБНОВЛЕНИЕ: больше информации!
Я должен был сделать это с самого начала: я добавил примечания к выпуску 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
, но они решили не удалять ее, возможно, для обратной совместимости с существующими скриптами и программами, или, возможно, потому что это просто слишком много работы и есть предметы с более высоким приоритетом.
Оригинальный ответ с более подробной информацией
Ответ xenoterracide в 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-fetch (1) или подкоманды update git-remote (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 docs объясняет это так:
Если true, этот удаленный будет пропущен по умолчанию при обновлении с использованием git-fetch (1) или подкоманды update git-remote (1) .
Вместо получения всех пультов ДУ, так fetch
и remote update
позволяют указать несколько пультов ДУ и группы пультов ДУ для извлечения:
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)…]
git fetch [<options>] <group>
позволяет выбрать несколько пультов, входящих в группу (позаимствовать другой пример у Mislav ):
$ 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 фарфор, примером которого 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
может быть гораздо более гранулированным.
git remote update
, см. Страницу руководства git-remote.
git remote
это не сценарий оболочки, но он git fetch
создается во время remote update
.
git fetch
опции команды для git remote update
?
git fetch --all
git rebase
какmv
иgit cherry-pick
какcp
.--onto
Коммутатор не изменит. Вы можете получить эффект копированияgit rebase
только с указанием значений SHA1, иначе ваша ветвь будет перемещена!