Различия между git remote update и fetch?


и git remote update в эквиваленте git fetch?

2 159

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] есть, правда.

Да и нет. git remote update выбирает из всех пультов, а не только один.

не глядя на код, чтобы увидеть, если remote update это просто сценарий оболочки (возможно) он, в основном, запускает fetch для каждого пульта дистанционного управления. git fetch может быть гораздо более детальными.