Що означає "стадія" в git?


315

Мені важко зрозуміти git, оскільки я не зміг знайти значення слів, що використовуються для дій. Я перевірив словник на значення "етап", і жодне значення не було пов'язане з поняттями управління джерелами.

Що означає "етап" у контексті git?



11
У Git дійсно є свій словниковий запас. А оскільки кожна інструкція сформульована в спеціальній лексиці, важко почати. "Етап" - це зробити git add file.extдля певного файлу або git add .вплинути на всі модифіковані та невиправлені файли. Файли, додані таким чином, вважаються "поетапними", і вони будуть включені до наступного "фіксації". Фіксація - це знімок вашої роботи, створений, наприклад, з git commit -m "I wrote something".
Йонатан Естрем

11
Гіт важко зрозуміти, оскільки там немає жодного концептуального посібника. Усі проходять непотрібні деталі.
Xaqron

2
Ви мали на увазі видалити тег "термінологія" з цього питання? Мені це здається абсолютно правильним тегом.
Філіп Кендалл

Чомусь найкращий спосіб я зрозуміти важливість постановки - це відповідь у Quora: qr.ae/TbSK2I
Ламар,

Відповіді:


310

Щоб поставити файл просто підготувати його тонко для фіксації. Git, з його індексом, дозволяє вносити лише певні частини змін, які ви зробили з моменту останнього виконання. Скажімо, ви працюєте над двома функціями - одна закінчена, а одна ще потребує певної роботи. Ви хочете взяти на себе зобов’язання та повернутися додому (нарешті, 5 годин!), Але не хотіли б скористатись частинами другої функції, що ще не зроблено. Ви ставите деталі, які ви знаєте, належать до першої функції, і здійснюєте виконання. Тепер ваша фіксація - ваш проект із першою виконаною функцією, тоді як друга все ще працює у вашому робочому каталозі.


5
Гарне пояснення. Зауважте, що git, розповсюджуючись, очевидно, дозволяє виконувати обидві функції, оскільки коміти є локальними (спочатку). Тим не менш, ви можете встановити поділ модифікацій на один коміт за функцію, і знову інсценування стане в нагоді.
sleske

77
Я не розумію, для чого вам потрібні постановки для цього. Я можу це зробити з HG або навіть SVN, лише ввівши відповідні файли. Схоже, ця функція призначена насамперед для того, щоб допомогти людям, які наполягають на роботі з командним рядком, де складніше встановити прапорці на те, що ви робите.
джиггі

78
@jiggy git дозволяє налаштувати частину файлу. Ви також можете налаштувати файл, внести подальші зміни, а потім встановити стан, у якому він знаходився під час постановки. Ви не можете цього зробити в підривній роботі.
Ізката

4
@jiggy У SVN між часом, коли ви вибираєте, які файли / частини файлів виконувати, і коли ви закінчите писати повідомлення про фіксацію, є щось, що записує, які файли / частини ви вибрали для здійснення. Це ніколи не може бути прямо вказано, він може бути реалізований у клієнті SVN, а не у фактичній частині сховища, це можуть бути лише деякі прапори в пам'яті, але це етап SVN. Я не дивився на HG, але підозрюю, що це робить те саме. Різниця з git полягає в тому, що git визнає, що це річ, записує її на диск і дозволяє користувачеві безпосередньо дістатися до неї.
8bittree

7
Друга стрілка "Файли етапів" на малюнку може ввести в оману. "сценічні хунки" можуть бути точнішими?
Іда

137

Оскільки всі поки що відповіли на це "формальним" способом, дозвольте мені це зробити за допомогою альтернатив, щоб посилити навчання силою метафор.

Тож площа постановки виглядає так:

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

Це магічно !


Любіть аналогії; дорога до буд ^ _ ^
Муса Аль-Хассі

Любіть остаточну аналогію.
meTchaikovsky

35

Постановка - це крок до процесу фіксації в git. Тобто, фіксація в git виконується в два етапи: постановка та фактична фіксація.

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

Розбитий час метафори:

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

З технічної точки зору, інсценізація також підтримує трансакційні комісії, розділяючи всі операції на те, що може завершитися (стадія), а що не може відмовити (здійснити):

Здійснення в git здійснюється транзакційно, після того, як постановка буде успішною. Кілька кроків у постановці може бути невдалим (наприклад, вам потрібно виконати, але ваш жорсткий диск на 99,9999% заповнений, а git не має місця для виконання комісії). Це не вдасться здійснити поетапну роботу (ваш сховище не буде пошкоджено частковою комісією), а процес постановки не вплине на вашу історію комісій (він не пошкодить ваше сховище у разі помилки).


... і так мало голосів поки.
ojonugwa ochalifu

26

Постановити файл - це підготувати його до фіксації. Оскільки git виявляє цю дію для керування користувачами, це дозволяє створювати часткові коміти або змінювати файл, стадіювати його, знову змінювати та лише здійснювати або повертати до початкової модифікації.

Постановка дозволяє точніше контролювати, як саме ви хочете підійти до контролю версій.


19

Щоб додати до інших відмінних відповідей, ось звідки походить назва "етап":

Я перевірив словник на значення етапу, і жодне значення не було пов'язане з поняттями управління джерелами.

Англійською мовою "на сцені" може означати

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

http://oxforddic slova.com/definition/stage )

Назва "інсценізація" для функції git походить від цього значення: Під час постановки ви готуєте та організовуєте комісію. Звичайно, зробити не зовсім такий же , як продуктивність, але це важлива подія в VCS :-).


3
Я б подумав, що це більше відповідає використанню в постановочному посту
Марно

Дітто. Також "точка, період або етап у процесі чи розвитку".
Дарієн

Крім того, "сервісний етап" - це досить поширений термін, який використовується для опису сервера, який знаходиться між розробкою та виробництвом.
Вічний21

4

У більшості інших систем контролю версій є два місця для зберігання даних: робоча копія (папки / файли, які ви зараз використовуєте) та сховище даних (де контроль версій вирішує, як упакувати та зберігати зміни). У Git є третій варіант: область постановки (або індекс). Це в основному завантажувальний док, де ви можете визначити, які зміни відвантажуються.

джерело: http://gitready.com/beginner/2009/01/18/the-staging-area.html


1
це, здається, не додає нічого істотного за попередні 6 відповідей
gnat

Тут згадується індекс. І посилання на дуже ретельну статтю. Оголошення. До речі, деякі відповіді вище - це лише жарти.
Gangnus

1

"Етап" - це технічно необхідний проміжний крок у процесі перевірки у файлі, а саме збирання змін, які потрібно додати до сховища. Автори Git вирішили зробити цей крок видимим та стійким, коли інші VCS роблять його перехідною частиною процесу фіксації. Тож це просто варіант, який дає вам git, оскільки він може так, чому б і ні?

Як я це бачу, головне, що "етап" git дає вам те, що інші VCS не мають, це те, що ви можете використовувати його для перевірки файлу. Це фактично безіменний, не коментований місцевий комітет, який дає вам проміжний крок між виконанням усієї вашої роботи та постійним внесенням його у сховище та взагалі нічого не зберігається у вашому місцевому репо-репо.

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

Пізніше ви матимете змогу просто здійснити те, що ви виконали (і натиснути це на віддалене сховище) або додати свої нові зміни до місця постановки, а потім здійснити все відразу або скасувати лише нові зміни та поверніть свою робочу директорію до стану, в якому він знаходився під час постановки змін.

Цілком можливо пропустити зону інсценізації взагалі і просто скористатися цим -aваріантом, git commitякщо ви не знайдете область постановки корисною концепцією. Багато людей пропускають постановку та інструменти графічного інтерфейсу, як правило, також дозволяють це зробити.


"інші VCS не роблять" - що змушує вас так думати? Схоже на те, що полиця в Перфорсі робить те, що ви описуєте, і навіть маючи кілька додаткових дзвіночків
гнат

1
@gnat так, звичайно, багато інших VCS дають вам щось на зразок постановки. Під "іншими VCS" я маю на увазі інші VCS, які не мають нічого подібного до сцени git, оскільки саме про це йдеться в ОП.
Старий Про

Я знайшов цю відповідь надзвичайно кращою за всі вищевикладені, оскільки це єдина, яка пояснює, чому постановка взагалі існує ( необхідна технічно ), пояснення її походження ( автори Git вирішили зробити цей крок видимим і стійким ), додавши що я особисто вважаю гарним визначенням цього ( проміжне, безіменне, неметоване місцеве зобов'язання ). Однак я думаю, що це можна було б покращити, цитуючи джерело твердження про походження постановки, та детальніше пояснити, чому це технічно потрібно . @OldPro
alexlomba87

-1

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


це , здається, не додає нічого істотного над точкою зроблена і пояснена в раніше 9 відповідей
комар

так, ти маєш рацію, я просто намагався зробити пояснення простим і солодким
palash140,

І що мені хочеться практично використовувати цю концепцію, я намагався пояснити це
palash140

Розглянемо тут питання обговорення: Чи прийнятні другі відповіді TL; DR? (FWIW порівняно з попередніми відповідями, це не здається мені простим і не солодким)
gnat

дякую, сер, у мене є запитання. Я натрапив на багато відповідей, і більшість з них занадто складні, так це правильні, але важко засвоюються одразу, я вірю, якщо ви не можете нічого пояснити просто, тоді ви не навчилися належним чином або не знаєте, як використовувати його. То чи погано зараз ставити резюме чи простий спосіб відповісти ??
palash140
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.