Страницы

Поиск по вопросам

суббота, 13 октября 2018 г.

Как обновлять проект с репозитория?

Кто-то может расстолковать какая разница:

Merge Rebase Branch Default
И
Using Stash Using Shelve
Что в каких случаях используется?


Ответ

Для начала git stash или git shelve. Когда Вы подтягиваете новые изменения, в Вашем рабочем каталоге могут быть измененные (незакоммиченные) файлы. Естественно, что эти файлы при слиянии изменений могут потерятся. Поэтому гит предлагает их "спрятать в карман". Это называется git stash. После того, как новый код будет получен с удаленного репозитория, изменения с stash можно накатить назад (естественн, при этом возможно нужно будет решить конфликты). В "кармане" можно хранить сколько угодно изменений (логично - ограничены своим диском) и карман не передается на сервер. Детальнее о git stash на русском.
git shelve - это древний проект (2008 года), который не поддерживается на данный момент. Как и git shash, умеет прятатть изменения, только в отдельные ветки. Зачем оно в студии - не ведомо.
Теперь о первой колонке. При накатывании чужих коммитов может произойти две ситуации - в ветке есть Ваши коммиты и чужие и когда есть только с одной стороны. Понятно, что когда есть только коммиты одной стороны, то принять изменения очень просто - их нужно просто "скопировать себе" и поправить указатели на ветки.
В том случае, если есть и свои коммиты и чужие, нужно их "сложить вместе". Для этого есть две технологии - merge и rebase. При merge происходит слияние файлов. Там, где файлы одинаковые, проблем нет, там где файлы разные, гит пытается сложить вместе. Иногда у него это не выходит и он просит пользователя "разрешить конфликт" - так как только программист знает, что он хочет.
Но есть второй способ - это rebase. Некоторые люди любят этот способ, а некоторые под страхом разрушить репозиторий боятся его использовать. Работает он очень просто. Сравниваются две ветки и ищется общий предок-коммит. Дальше, с локальной ветки откатываются все коммиты до общего коммита. Естественно, что теперь добавить коммиты с удаленного репозитория просто. После этого локальные коммиты "накатываются поверху". Если в процессе накатки возникают конфликты, их нужно решать.
А вот что такое Branch default - я не знаю, возможно, студия запоминает последний выбор и применяет его.

Комментариев нет:

Отправить комментарий