Почему в git идет процесс постановки? - PullRequest
15 голосов
/ 23 июля 2011

Почему между "git add" и "git commit" есть промежуточная область? Я понимаю концепцию, но не вижу смысла в добавлении файлов в область подготовки перед фактической фиксацией. Почему бы не пропустить этот шаг?

Ответы [ 5 ]

19 голосов
/ 23 июля 2011

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

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

Например, вы работаете над двумя разными вещами, и теперь ваш код выглядит как

//random code

//bug fix

//new feature

Вы можете ставитьпросто строка //bug fix и фиксация, а затем этап //new feature и фиксация.

Теперь у вас есть два разных коммита для каждого.Позже в ходе тестирования вы поймете, что коммит new feature что-то сломал, вы можете удалить коммит new feature, но не нужно повторно исправлять ошибку

Как отметил в своем ответе Диккон Рид, вы также получаете производительностьпоскольку git commit теперь нужно только добавить то, что находится в индексе, в коммит.Не нужно искать в вашем дереве, чтобы найти все изменения.

13 голосов
/ 23 июля 2011
  1. git commit не должен проверять каждый файл в дереве, чтобы увидеть, изменился ли он.На большом дереве, которое может сэкономить много времени.
  2. Поместив некоторые файлы (или даже некоторые изменения в некоторых файлах), вы получите хороший точный контроль того, что именно вы хотите зафиксировать, а что нет.Например, если вы обнаружите тривиальную ошибку во время частичного изменения, вы можете быстро поставить и зафиксировать исправление ошибки в одну строку, не мешая другим изменениям.
3 голосов
/ 23 июля 2011

Возможно, вы не захотите фиксировать только некоторые из ваших изменений.Если вы что-то исправили, вы можете зафиксировать только соответствующие изменения для исправления.

2 голосов
/ 08 ноября 2012

Это чистая пита (по моему скромному мнению).Очевидно, что большинство инструментов пользовательского интерфейса (на самом деле все, что я знаю, включая EGit Eclipse, Mac XCode и клиент GitHub) не предоставляют эту функцию.Вы не хотите фиксировать все, что у вас есть в вашей файловой системе.Но ввести концепцию «Stage» для нее - это излишнее убийство.

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

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

commit( X, Y, Z)

у вас есть:

add(X), add(Y), add(Z), commit()
0 голосов
/ 13 апреля 2014

Я только начал изучать удивительный мир DVCS и, хотя я уже продал свою душу мерзавцу демону, но у меня все еще есть объективный взгляд. Существует некоторая избыточность в идее области размещения, однако вы можете полностью пренебречь областью размещения (что я делал, когда использовал github-клиент). С другой стороны, это дает больше гибкости, поэтому я бы сказал, что это ненавязчивая избыточность, которая иногда может вам немного помочь.

Что мне пришло в голову, так это то, что в названии слишком много терминов: кэш, область подготовки, индекс. Очевидно, что это дизайнерское решение возникло как совокупность схожих концепций, и в нем заложена история. Моя первая ставка оказалась правдоподобной - я зашел на сайт Bitkeeper и обнаружил там "постановку" (они используют ее для разветвления по требованию)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...