2014-10-06 2 views
2

Newb вопрос, я хочу убедиться, что я это понимаю.Выполняет ли git checkout обновление всех файлов?

Когда я git checkout <revision>, делает это вернуть весь проект его состояние в данный момент, или же это только воссоздать файлы, измененные в конкретного пересмотра?

Например: если моя папка была полностью пустой, кроме ретрансляции .git, а я git checkout master, будут ли результирующие файлы полностью или полностью изменены в последнем коммите?

Я спрашиваю, потому что я проверяю свой проект в разных точках (начиная с самого начала), а вместо проекта медленно растет в размерах, как и следовало ожидать, размер каждой проверки варьируется довольно много.

ответ

2

Когда я git checkout <revision>, делает это вернуть весь проект его состояние в данный момент, или же это только воссоздавать файлы, измененные в этом частности пересмотра?

Если ваше рабочее дерево и плацдарм совершенно пустые (кроме подкаталога .git, конечно), и запустить

git checkout <revision> 

тогда ваше рабочее дерево и плацдарм прекрасно отражают содержание из этого частности пересмотр.

С другой стороны, если ваше рабочее дерево не пусто при запуске git checkout, что происходит гораздо более тонким, и может быть разбит на три случая:

  1. касса не является проблематичной и Git выполняет его, не моргнув глазом: содержимое этой конкретной ревизии копируется на ваше рабочее дерево (и перезаписывает уже имеющиеся там материалы, если это необходимо). Или
  2. Проверка, если она была выполнена, приведет к потере местных изменений; поэтому Git (в предположении, что вы не использовали флаг -f), вы отключаете и прерываете выписку. Или
  3. Возможно, возникнет более сложная ситуация, когда материал будет только частично проверен, а некоторые локальные, незафиксированные изменения сохраняются в рабочем дереве и/или индексе. Более подробную информацию об этой ситуации можно найти в моем ответе на Why are unstaged changes still present after checking out a different branch?.

[...] размер каждой кассе варьируется довольно много.

Вы принимаете во внимание неиспользуемые файлы? Вы зафиксировали, а затем удалили большие файлы? Исходя из информации, приведенной только в вашем вопросе, мы можем сделать не что иное, как гипотезу о причине того, что размер сильно варьируется.

+1

Благодарим вас за объяснение. Я спросил об этом по той причине, что я хотел восстановить весь проект до такой степени, когда фиксация была сделана из пустого рабочего каталога, а не просто для получения содержимого конкретного коммита. Эта команда, похоже, делает то, что мне нужно: 'git checkout .' – user2089518

+0

@ user2089518 Прохладный. Просто помните, что результат «git checkout» варьируется в зависимости от конкретного случая. – Jubobs

1

От documentation: «Обновляет файлы в рабочем дереве в соответствии с версией в индексе или указанном дереве». В случае вашего примера он вернет репозиторий в состояние во время проверки в его целостность.

Однако, поскольку Jubobs указал, что существует разница в поведении, если вы внесли какие-либо изменения в состояние вашего хранилища с момента последней проверки. Его ответ более всеобъемлющий, чем мой, если это так.

Также обратите внимание, что это применимо только к файлам, которые отслеживаются git, поэтому любые другие файлы, на которые вы опирались, не будут затронуты.

+0

* он будет возвращать хранилище государству во время проверки в полном объеме. * Это не совсем верно все время; см. http://stackoverflow.com/questions/25939329/why-are-unstaged-changes-still-present-after-checking-out-a-different-branch/25940509#25940509 – Jubobs

+1

Ах да, хороший момент, я забыл о это и обновит мой ответ. –

Смежные вопросы