Что означает «этап» в git?

318

Мне трудно понять мерзавца, так как я не мог найти значение слов, используемых для действий. Я проверил в словаре значение «stage», и ни одно из значений не было связано с концепциями управления исходным кодом.

Что означает «этап» в контексте git?

000
источник
12
У Git действительно есть свой словарный запас. И так как каждая инструкция сформулирована в специальном словаре, трудно начать. «Стадия» - это сделать git add file.extдля определенного файла или git add .повлиять на все измененные и неотслеживаемые файлы. Файлы, которые были добавлены таким образом, называются «подготовленными», и они будут включены в следующий «коммит». Фиксация - это снимок вашей работы, созданный, например, с помощью git commit -m "I wrote something".
Джонатан Остром
11
Git трудно понять, потому что там нет концептуального учебника. Все проходят через ненужные детали.
Хакрон
2
Вы хотели удалить тег "терминология" из этого вопроса? Мне кажется, это совершенно правильный тег.
Филипп Кендалл
По какой-то причине я лучше всего понял важность постановки из этого ответа в Quora: qr.ae/TbSK2I
Lamar

Ответы:

310

Чтобы поставить файл просто подготовить его тонко для фиксации. Git с его индексом позволяет вам фиксировать только те части изменений, которые вы сделали со времени последнего коммита. Допустим, вы работаете над двумя функциями - одна закончена, а другая все еще требует определенной работы. Вы хотели бы сделать коммит и вернуться домой (наконец, 5 часов!), Но не хотели бы фиксировать части второй функции, которая еще не сделана. Вы ставите части, которые, как вы знаете, принадлежат первой функции, и делаете коммит. Теперь ваш коммит - это ваш проект с первой функцией, а вторая все еще находится в стадии разработки в вашем рабочем каталоге.

ладья
источник
5
Хорошее объяснение. Обратите внимание, что git, будучи распределенным, очевидно, позволяет вам фиксировать обе функции, поскольку коммиты являются локальными (сначала). Тем не менее, вы можете захотеть разделить модификации на один коммит для каждой функции, и опять-таки пригодится постановка.
слеске
77
Я не понимаю, для чего тебе нужна постановка. Я могу сделать это с HG или даже SVN, только фиксируя соответствующие файлы. Такое ощущение, что эта функция в первую очередь предназначена для помощи людям, которые настаивают на работе с командной строкой, где сложнее установить флажки того, что вы делаете.
Джигги
78
@jiggy git позволяет вам размещать часть файла. Вы также можете подготовить файл, внести дополнительные изменения, а затем зафиксировать состояние, в котором он находился при подготовке. Вы не можете сделать это в подрывной деятельности.
Изката
4
@jiggy В SVN есть что-то между временем, которое вы выбираете, какие файлы / части файлов для фиксации, и тем, когда вы заканчиваете писать свое сообщение о фиксации, которое записывает, какие файлы / части вы выбрали для фиксации. Это никогда не может быть явно упомянуто, это может быть реализовано в клиенте SVN, а не в реальной части хранилища, это могут быть просто некоторые флаги в памяти, но это этап SVN. Я не смотрел на HG, но подозреваю, что он делает то же самое. Отличие от git в том, что git признает, что это вещь, записывает ее на диск и позволяет пользователю получить к ней доступ напрямую.
8bittree
7
Вторая стрелка «файлы сцены» на рисунке может вводить в заблуждение. "сценки" могут быть более точными?
Ида
137

Поскольку до сих пор все отвечали на это «формальным» способом, позвольте мне сделать это с помощью альтернатив, чтобы улучшить обучение силой метафор.

Таким образом, область подготовки выглядит так:

  • кеш файлов, которые вы хотите зафиксировать
  • не серия труб, а самосвал, готовый перенести работу, в которую вы его загружаете, в хранилище
  • волшебное место, где выбранные файлы будут превращены в камень с помощью вашего волшебства и могут быть волшебным образом перенесены в хранилище по вашей прихоти
  • дорога из желтого кирпича для файлов, чтобы они благополучно отправлялись в хранилище (или отваливались, если хотите вернуться)
  • вымышленное место в морском порту, где файлы получают пару цементных башмаков, а затем выбрасывают в море хранилища
  • Приемная в библиотеке, вы кладете туда файлы для библиотекаря, чтобы подготовить для подачи в библиотеку
  • ящик, в который вы кладете вещи перед тем, как засунуть их под кровать, где ваша кровать - это хранилище коробок, в которые вы ранее положили вещи
  • загрузочный отсек файлов перед его поступлением в хранилище хранилища с загрузчиком мощности
  • фильтр электрической кофеварки, если файлы похожи на кофейный порошок, то сохраненные файлы - это заваренный кофе
  • в офисе Скруджа МакДака рядом с хранилищем, файлы похожи на монеты, прежде чем они попадают в хранилище его огромной корзины для денег
  • зоомагазин, как только вы приносите домашнее животное домой, вы преданы

Это волшебно !

Spoike
источник
Люблю аналогии; путь,
приятель
Люблю последнюю аналогию.
meTchaikovsky
35

Постановка - это шаг перед процессом фиксации в git. То есть фиксация в git выполняется в два этапа: подготовка и фактическая фиксация.

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

Время сломанной метафоры:

Рассмотрим сценарий, в котором вы вызываете грузчиков, чтобы доставить ваши вещи из старой квартиры в новую. Прежде чем сделать это, вы изучите свои вещи, решите, что взять с собой, а что выбросить, упаковать в мешки и оставить в главном коридоре. Грузчики просто приходят, забирают (уже упакованные) сумки из прихожей и перевозят их. В этом примере все до тех пор, пока грузчики не получат ваши вещи, - это постановка: вы решаете, что куда идти, как упаковать его и так далее (например, вы можете решить, что половина ваших вещей будет выброшена до того, как грузчики даже доберутся до места - это часть постановки).

С технической точки зрения, подготовка также поддерживает транзакции, разделяя все операции на то, что может дать сбой (подготовка), а что не может (принятие):

Фиксация в git осуществляется транзакционно, после того, как подготовка прошла успешно. Несколько этапов подготовки могут завершиться неудачно (например, вам нужно выполнить фиксацию, но ваш жесткий диск заполнен на 99,9999%, а у git нет места для выполнения фиксации). Это не удастся подготовить (ваш репозиторий не будет поврежден при частичной фиксации), и процесс подготовки не повлияет на вашу историю фиксации (он не повредит ваше хранилище в случае ошибки).

utnapistim
источник
... и так мало голосов до сих пор.
ojonugwa ochalifu
26

Подготовить файл - значит подготовить его к коммиту. Поскольку git предоставляет это действие пользовательскому элементу управления, он позволяет вам создавать частичные коммиты или изменять файл, ставить его, снова модифицировать и только фиксировать или возвращать к исходной модификации.

Постановка позволяет вам лучше контролировать, как именно вы хотите приблизиться к управлению версиями.

Джош К
источник
19

Чтобы добавить к другим отличным ответам, вот откуда происходит название «этап»:

Я проверил словарь на предмет значения стадии, и ни одно из значений не было связано с концепциями контроля источников.

На английском языке «на сцену» может означать

организовать и принять участие (публичное мероприятие): сторонники ОДС провели демонстрацию в Софии

http://oxforddictionaries.com/definition/stage )

Название «подготовка» для функции git происходит от этого значения: при подготовке вы готовите и организуете коммит. Конечно, совершить не совсем такой же , как производительность, но это важное событие в VCS :-).

sleske
источник
3
Я бы подумал, что это более точно соответствует использованию в постановочном посте
Бесполезно
То же самое. Кроме того, «точка, период или шаг в процессе или развитии».
Дариен
Также «промежуточный сервер» - довольно распространенный термин, используемый для описания сервера, который находится между разработкой и производством.
Eternal21
4

В большинстве других систем контроля версий есть 2 места для хранения данных: ваша рабочая копия (папки / файлы, которые вы используете в данный момент) и хранилище данных (где система контроля версий решает, как упаковать и сохранить ваши изменения). В Git есть третий вариант: область подготовки (или индекс). Это в основном погрузочный док, где вы можете определить, какие изменения будут отправлены.

источник: http://gitready.com/beginner/2009/01/18/the-staging-area.html

Мостафиз Рахман
источник
1
это не добавляет ничего существенного по сравнению с предыдущими 6 ответами
комнат
Упоминается индекс. И ссылки на очень основательную статью. Upvoting. Кстати, некоторые ответы выше - просто шутки.
Гангнус
1

«Этап» - это технически необходимый промежуточный этап в процессе проверки в файле, а именно сбор изменений, которые необходимо добавить в репозиторий. Авторы Git решили сделать этот шаг видимым и постоянным, когда другие VCS делают его временной частью процесса фиксации. Так что это просто опция, которую дает вам git, потому что может, так почему бы и нет?

На мой взгляд, главное, что git "stage" дает вам, чего нет в других VCS, - это то, что вы можете использовать его для проверки файла. Это фактически безымянная, некомментированная локальная фиксация, которая дает вам промежуточный шаг между выполнением всей вашей работы и постоянной фиксацией ее в хранилище, и вообще ничего не сохраняется в вашем локальном репо.

Например, допустим, у вас есть частично законченная функция. Он находится в стабильном состоянии, проходит все тесты и может быть запущен в производство, но у вас еще есть над чем поработать. Вы можете поставить все свои изменения и продолжить работу над этой функцией.

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

Вполне возможно практически полностью пропустить область подготовки и просто использовать эту -aопцию, git commitесли вы не находите область подготовки полезной концепцией. Многие люди пропускают инсценировку, и инструменты GUI обычно также допускают это.

Old Pro
источник
"другие VCS не делают" - что заставляет вас так думать? Стеллажи в Perforce, кажется, делают то, что вы описываете, и даже с несколькими дополнительными прибамбасами
комнат
1
@gnat да, конечно, многие другие VCS дают вам что-то вроде постановки. Под «другими VCS» я подразумеваю другие VCS, которые не имеют ничего похожего на стадию git, поскольку именно об этом ссылался OP.
Old Pro
Я обнаружил, что этот ответ намного лучше, чем все вышеперечисленное, поскольку он единственный, который разъясняет, почему Staging вообще существует (будучи технически необходим ), объяснение его происхождения ( авторы Git решили сделать этот шаг видимым и постоянным ), добавив что я лично считаю хорошим определением для него ( промежуточный, безымянный, некомментированный локальный коммит ). Тем не менее, я думаю, что это можно улучшить, процитировав источник для утверждения о происхождении Постановки и уточнив, почему это технически необходимо . @OldPro
alexlomba87
-1

Насколько я понимаю, предположим, что я разрабатываю функцию входа в систему и требует 5 последовательных шагов для завершения. Так что здесь постановка поможет вам работать над шагами, как
это было сделано с шагом 1 стадии его.
сделано с шагом 2, теперь шаг 1 и шаг 2 являются правильными этапом его.
испортить шаг 3 без проблем оформить последний поэтапный шаг, который является шагом 2
точно так же, как только вы выполнили все 5 шагов, это означает, что функция завершена, теперь выполните коммит.

palash140
источник
это, кажется, не добавляет ничего существенного к пунктам, сделанным и объясненным в предыдущих 9 ответах
комнат
да, вы правы, я просто попытался сделать объяснение простым и приятным
palash140
И что я чувствую, чтобы использовать эту концепцию практически, я пытался объяснить это
palash140
рассмотрите возможность обсуждения здесь: приемлемы ли вторые ответы TL; DR? (FWIW по сравнению с предыдущими ответами, этот не выглядит ни простым, ни сладким для меня)
gnat
Спасибо, сэр, у меня есть вопрос. Я сталкивался со многими ответами, и большинство из них слишком сложны, да, они правильные, но трудно усваиваются сразу, я верю, что если вы не можете объяснить что-либо простым способом, то вы не научились правильно или не знаете, как использовать это. Так плохо ли сейчас формулировать резюме или простой способ ответить ??
palash140