Различия между удаленным обновлением git и получением?

Является ли git remote update эквивалентом git fetch?

вопрос задан 6.12.2009
David
1128 репутация

2 ответов


  • 138 рейтинг

    Да и нет. git remote update получает со всех пультов, а не только с одного.

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

    ответ дан xenoterracide, с репутацией 6928, 6.12.2009
  • 90 рейтинг

    ОБНОВЛЕНИЕ: больше информации!

    Я должен был сделать это с самого начала: я добавил примечания к выпуску 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 , похоже, что они могут выполнять в основном одну и ту же функцию 2 080 из 408 880, которые в принципе могут выполнять несколько одинаковых функций - 880 из 8688, получая 8808 из 8688, получая при этом 8308 разных удаленных коммюнитов. правильные варианты и аргументы.

    Извлечение всех пультов

    Один из способов получить несколько пультов - с помощью флага --all:

    git fetch --all
    

    Он будет извлекаться из всех настроенных вами пультов, при условии, что для них не настроено remote..skipFetchAll:

    Если значение равно true, этот пульт будет пропущен по умолчанию при обновлении с использованием git-fetch (1) или подкоманды обновления git-remote (1) . - Документация git-config

    Это было бы эквивалентно использованию

    git remote update
    

    без указания какой-либо удаленной группы для извлечения, а также без установки remotes.default в вашей конфигурации репо, а также что ни у одного из ваших пультов не установлено значение remote..skipDefaultUpdate, установленное в true.

    Текущий 1. 8. 3. 2 В документации по конфигурации Git не упоминается настройка remotes.default, но я проконсультировался с Всемогущим Google об этом и нашел это полезное объяснение от Мислав Марохнич :

    $ git config remotes.default 'origin mislav staging'
    $ git remote update
    
    # fetches remotes "origin", "mislav", and "staging"
    

    Вы можете определить список удаленных устройств по умолчанию с помощью команды remote update. Это могут быть удаленные пользователи от ваших товарищей по команде, доверенные участники сообщества проекта с открытым исходным кодом или подобные

    Итак, предположительно, если у вас установлено remotes.default, и в нем указаны не все ваши пульты, то git remote update не получит все пульты, о которых ваше хранилище «знает».

    Что касается параметра remote..skipDefaultUpdate, то в Git docs объясняют это так:

    Если значение равно true, этот пульт будет пропущен по умолчанию при обновлении с использованием git-fetch (1) или подкоманды обновления git-remote (1) .

    Извлечение указанной группы пультов

    Вместо извлечения всех пультов, fetch и remote update позволяют указать несколько удаленных групп и групп удаленных для выборки:

    git fetch [] 
    git fetch --multiple [] [( | )…]
    

    git fetch [] позволяет вам выбрать несколько пультов, которые являются частью группы (заимствовать другой пример из Mislav ):

    $ git config remotes.mygroup 'remote1 remote2 ...'
    $ git fetch mygroup
    

    git fetch --multiple позволяет указать несколько хранилищ и групп хранилищ для выборки одновременно (из документов ):

    Позволяет указать несколько аргументов и . № s может быть указан.

    Неоднозначность в документации git remote update

    Сводка для git remote update указывает, что синтаксис команды следующий:

    git remote [-v | --verbose] update [-p | --prune] [( | )…]
    

    Обратите внимание на последнюю часть, [( | )…]? Конечные точки ... означают, что с помощью команды вы можете указать несколько групп и пультов, что будет означать, что она ведет себя так же, как git fetch --multiple. , , видите, как синтаксис между ними так похож?

    Однако в том же документе объяснение команды update ничего не говорит об указании нескольких групповых и удаленных аргументов, только то, что оно

    Выборка [es] обновлений для именованного набора удаленных устройств в хранилище, как определено remotes..

    Так что неясно, работает ли git remote update идентично git fetch --multiple в отношении указания нескольких отдельных пультов и нескольких удаленных групп.

    Извлечение одного пульта

    Наконец, всем известен простой случай получения одного пульта:

    git fetch 
    

    Возможно, вы также можете использовать

    git remote update 
    
    Чтобы сделать то же самое, но, как я уже упоминал в предыдущем разделе, в документации для 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].

    ответ дан does_not_exist, с репутацией , 7.07.2013