У меня два вопроса.
1) По какому принципу меняется "состав" рабочего каталога при переключении между ветками?
2) В каких случаях данная команда выбросит исключение и как его обойти в каждом конкретном случае?
Я читал и смотрел многие источники, но везде различная информация - где-то говорится одно, а где-то другое. Знающие люди, дайте, пожалуйста, исчерпывающий ответ.
PS: у меня версия 2.34.1, если что.
Чекаут синхронизирует рабочую копию с коммитом.
Исключения в 99.99% случаем связаны с локальными изменениями которые чекаут боится потерять и просит тебя что-то с этим сделать.
1) По какому принципу меняется "состав" рабочего каталога при переключении между ветками?
Ну просто берет и меняет состав рабочего каталога на соответствие конкретной ветке (последнему коммиту в этой ветке по умолчанию)
2) В каких случаях данная команда выбросит исключение и как его обойти в каждом конкретном случае?
если у тебя есть локальные изменения рабочего каталога, которые ты не закомиттил (или не засташил). Об этом тебе напишет.
Файлы, которых нет в ветке, удаляются, файлы которые есть в ветке копируются.
Что тут еще более конкретного.
Можно сказать, что все файлы удаляются из рабочего каталога, и вместо него копируются файлы из нужной ветки.
Просто происходит это оптимизировано, так как для каждого файла гит знает его хеш, и если файл уже есть, то нет смысла его удалять а потом распаковывать.
Но перед удалением или перезаписью любого файла, проверяется - он в текущей ветке уже закоммичен (или за stash-ен), если нет, выдается исключение и checkout не происходит.
Saboteur, Saboteur, это не совсем точно, потому что, например, я заметил, что неотслеживаемый файл, который был в моей рабочей директории, но которого при этом не было в том коммите, на который я переключился, остался в рабочей директории и никуда не удалился.
Saboteur, я про тот индекс, который является типа буфером для подготовки к коммиту. В какое состояние он переходит после переключения? Или остаётся в том же состоянии, что и до переключения?
переключения не происходит пока изменения не откатятся, или не закоммитятся.
индексом вы называете видимо staged area - это еще не закоммиченные изменения.