Co oznacza „etap” w git?

315

Trudno mi zrozumieć, ponieważ nie mogłem znaleźć znaczenia słów użytych w czynnościach. Sprawdziłem słownik pod kątem znaczenia „etap” i żadne z tych znaczeń nie było powiązane z koncepcjami kontroli źródła.

Co oznacza „etap” w kontekście git?

000
źródło
11
Git rzeczywiście ma własne słownictwo. A ponieważ każda instrukcja jest sformułowana w specjalnym słowniku, ciężko jest zacząć. „Etap” oznacza wykonanie git add file.extokreślonego pliku lub git add .wpłynięcie na wszystkie zmodyfikowane i nieśledzone pliki. Pliki dodane w ten sposób są nazywane „etapowymi” i zostaną uwzględnione w następnym „zatwierdzeniu”. Zatwierdzenie jest migawką twojej pracy utworzonej np git commit -m "I wrote something". Za pomocą .
Jonatan Öström,
11
Git jest trudny do zrozumienia, ponieważ nie ma tam samouczka pojęciowego. Wszystkie przechodzą niepotrzebne szczegóły.
Xaqron,
2
Czy chciałeś usunąć tag „terminologia” z tego pytania? Wydaje mi się to całkowicie poprawnym tagiem.
Philip Kendall
Z jakiegoś powodu najlepszym sposobem, w jaki mogłem zrozumieć znaczenie inscenizacji, jest ta odpowiedź w Quora: qr.ae/TbSK2I
Lamar

Odpowiedzi:

310

Aby wyeksponować plik, wystarczy po prostu dobrze przygotować go do zatwierdzenia. Git ze swoim indeksem pozwala zatwierdzać tylko niektóre części zmian, które wprowadziłeś od ostatniego zatwierdzenia. Załóżmy, że pracujesz nad dwiema funkcjami - jedna jest zakończona, a druga wymaga jeszcze trochę pracy. Chciałbyś dokonać zatwierdzenia i wrócić do domu (wreszcie godzina 5!), Ale nie chciałbyś zatwierdzić części drugiej funkcji, która nie została jeszcze wykonana. Wystawiasz części, o których wiesz, że należą do pierwszej funkcji, i zatwierdzasz. Teraz zatwierdzenie jest projektem z pierwszą wykonaną funkcją, podczas gdy druga jest wciąż w trakcie pracy w twoim katalogu roboczym.

Wieża
źródło
5
Dobre wytłumaczenie. Zauważ, że git, będąc dystrybuowanym, oczywiście pozwala zatwierdzić obie funkcje, ponieważ zatwierdzenia są lokalne (na początku). Mimo to, możesz chcieć umieścić podzielone modyfikacje w jednym zatwierdzeniu na funkcję, i znowu przydatne jest stopniowanie.
sleske,
77
Nie rozumiem, dlaczego potrzebujesz inscenizacji. Mogę to zrobić za pomocą HG, a nawet SVN, zatwierdzając tylko odpowiednie pliki. Wygląda na to, że ta funkcja została zaprojektowana przede wszystkim z myślą o ludziach, którzy nalegają na pracę z wierszem poleceń, w którym trudniej jest zaznaczyć pola, które popełniasz.
jiggy
78
@jiggy git pozwala na wyeksponowanie części pliku. Możesz także wyeksponować plik, wprowadzić dalsze modyfikacje, a następnie zatwierdzić stan, w jakim znajdował się na etapie przemieszczania. Nie możesz tego zrobić w subwersji.
Izkata
4
@ jiggy W SVN istnieje coś pomiędzy momentem wyboru plików / części plików do zatwierdzenia a zakończeniem pisania wiadomości zatwierdzenia, która rejestruje pliki / części wybrane do zatwierdzenia. Może nigdy nie zostanie wyraźnie wymieniony, może być zaimplementowany w kliencie SVN, a nie w rzeczywistej części repozytorium, może to być tylko kilka flag w pamięci, ale to jest etap SVN. Nie patrzyłem na HG, ale podejrzewam, że robi to samo. Różnica w stosunku do git polega na tym, że git uznaje, że jest to rzecz, nagrywa ją na dysk i pozwala użytkownikowi na bezpośredni dostęp.
8bittree
7
„Pliki etapów” drugiej strzałki na rysunku mogą wprowadzać w błąd. „przystojniaki sceniczne” mogą być dokładniejsze?
Ida,
137

Ponieważ do tej pory wszyscy odpowiedzieli na to „formalnie”, pozwólcie, że zrobię to z alternatywami, aby poprawić uczenie się dzięki sile metafor.

Tak więc obszar inscenizacji wygląda następująco:

  • pamięć podręczna plików, które chcesz zatwierdzić
  • nie seria rur, ale właściwie wywrotka, gotowa do przeniesienia pracy, którą ładujesz, do repozytorium
  • magiczne miejsce, w którym wybrane pliki zamieniają się w kamień za pomocą twojej magii i można je magicznie przetransportować do repozytorium według twojej fantazji
  • żółta cegła droga, by pliki trafiły do ​​repozytorium (lub spadły, jeśli chcesz przywrócić)
  • fikcyjne miejsce w porcie morskim, w którym pliki otrzymują parę cementowych butów, a następnie wrzucane do morza repozytorium
  • w recepcji, w bibliotece, umieszczasz tam pliki, które bibliotekarz może przygotować do przechowywania w bibliotece
  • pudełko, w którym wkładasz rzeczy przed włożeniem ich pod łóżko, gdzie twoje łóżko jest repozytorium pudeł, w których wcześniej wepchnąłeś
  • pole ładowania plików, zanim trafi do magazynu repozytorium z modułem ładującym
  • filtr elektrycznego ekspresu do kawy kroplowej, jeśli pliki są jak kawa w proszku, zatwierdzone pliki to parzona kawa
  • w biurze Scrooge McDuck obok skarbca, pliki są jak monety, zanim trafią do skarbca jego ogromnego pojemnika na pieniądze
  • sklep zoologiczny, kiedy przyniesiesz zwierzaka do domu, jesteś zaangażowany

To magiczne !

Łup
źródło
Uwielbiam analogie; way to go bud ^ _ ^
Musa Al-hassy
Uwielbiam ostatnią analogię.
meTchaikovsky
35

Etapowanie jest krokiem przed procesem zatwierdzania w git. Oznacza to, że zatwierdzenie w git odbywa się w dwóch etapach: pomostowym i rzeczywistym.

Tak długo, jak zestaw zmian znajduje się w obszarze przemieszczania, git pozwala edytować go tak, jak chcesz (zamieniać pliki przemieszczania na inne wersje plików przemieszczania, usuwać zmiany ze przemieszczania itp.).

Przerwany czas metafory:

Rozważ scenariusz, w którym dzwonisz do osób przeprowadzających, aby przenieść swoje rzeczy ze starego mieszkania do nowego. Zanim to zrobisz, przejrzysz swoje rzeczy, zdecydujesz, co zabierzesz ze sobą i co wyrzucisz, zapakujesz w torby i zostawisz w głównym korytarzu. Po prostu przyjeżdżają, zabierają (już spakowane) torby z korytarza i transportują je. W tym przykładzie wszystko się dzieje, dopóki ruchowcy nie zdobędą twoich rzeczy, jest inscenizowany: sam decydujesz, co się dzieje, jak je spakować i tak dalej (np. Możesz zdecydować, że połowa twoich rzeczy zostanie wyrzucona, zanim ludzie się tam dostaną - to część inscenizacji).

Z technicznego punktu widzenia etapowanie obsługuje również transakcyjne zatwierdzenia, dzieląc wszystkie operacje na to, co może zawieść (etapowanie) i co nie może zawieść (zatwierdzenie):

Zatwierdzenie w git jest implementowane transakcyjnie po pomyślnym przemieszczeniu. Kilka etapów przemieszczania może się nie powieść (na przykład musisz zatwierdzić, ale twój dysk twardy jest w 99,9999% zapełniony, a git nie ma miejsca na wykonanie zatwierdzenia). To nie powiedzie się w procesie przemieszczania (twoje repozytorium nie zostanie uszkodzone przez częściowe zatwierdzenie), a proces przemieszczania nie wpłynie na historię zmian (nie uszkodzi twojego repozytorium w przypadku błędu).

utnapistim
źródło
... i do tej pory tak mało głosów.
ojonugwa ochalifu
26

Przygotowanie pliku to przygotowanie go do zatwierdzenia. Ponieważ git udostępnia tę akcję kontroli użytkowników, pozwala tworzyć częściowe zatwierdzenia lub modyfikować plik, ustawiać go, modyfikować ponownie, a jedynie zatwierdzać lub przywracać oryginalne modyfikacje.

Stopniowanie umożliwia lepszą kontrolę dokładnie nad tym, jak chcesz podejść do kontroli wersji.

Josh K.
źródło
19

Aby dodać do innych doskonałych odpowiedzi, oto nazwa „etap” pochodzi:

Sprawdziłem słownik pod kątem znaczenia etapu i żadne z tych znaczeń nie było powiązane z koncepcjami kontroli źródła.

W języku angielskim „na scenę” może oznaczać

zorganizować i wziąć udział w (imprezie publicznej): zwolennicy UDF zorganizowali demonstrację w Sofii

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

Nazwa „inscenizacja” dla funkcji git wywodzi się z tego znaczenia: Podczas inscenizacji przygotowujesz i organizujesz zatwierdzenie. Oczywiście zatwierdzenie nie jest tym samym, co wykonanie, ale jest ważnym wydarzeniem w VCS :-).

Śleske
źródło
3
Pomyślałbym, że to bardziej pasuje do postu
Bezużyteczny
Tak samo. Także „punkt, okres lub krok w procesie lub rozwoju”.
Darien,
Również „serwer pośredniczący” jest dość powszechnym terminem używanym do opisania serwera, który znajduje się między rozwojem a produkcją.
Eternal21
4

W większości innych systemów kontroli wersji istnieją dwa miejsca do przechowywania danych: kopia robocza (foldery / pliki, których aktualnie używasz) i magazyn danych (gdzie kontrola wersji decyduje o sposobie pakowania i przechowywania zmian). W Git jest trzecia opcja: obszar postoju (lub indeks). Zasadniczo jest to dok załadunkowy, w którym można ustalić, jakie zmiany zostaną wysłane.

źródło: http://gitready.com/beginner/2009/01/18/the-staging-area.html

Mostafiz Rahman
źródło
1
wydaje się, że nie dodaje to nic istotnego w porównaniu z poprzednimi 6 odpowiedziami
komnata
Wspomina o indeksie. I odniesienia do bardzo dokładnego artykułu. Upvoting. BTW, niektóre odpowiedzi powyżej to tylko żarty.
Gangnus
1

„Etap” jest technicznie wymaganym pośrednim etapem procesu sprawdzania pliku, a mianowicie zebraniem zmian, które zostaną dodane do repozytorium. Autorzy Git postanowili uczynić ten krok widocznym i trwałym, gdy inne VCS sprawiają, że jest to przejściowa część procesu zatwierdzania. Więc to tylko opcja, którą daje ci git, ponieważ może, więc dlaczego nie?

Z mojego punktu widzenia najważniejsze jest to, że git „stage” nie pozwala innym VCS na używanie punktu kontrolnego do pliku. W rzeczywistości jest to nienazwany, nieskomentowany lokalny zatwierdzenie, które daje pośredni krok między wykonaniem całej pracy i przekazaniem go do repozytorium na stałe, a nie zapisaniem niczego w lokalnym repozytorium.

Załóżmy na przykład, że funkcja jest częściowo ukończona. Jest w stabilnym stanie, przechodzi wszystkie testy i może przejść do produkcji, ale masz więcej pracy. Możesz wprowadzić wszystkie zmiany, a następnie kontynuować pracę nad tą funkcją.

Później będziesz mógł po prostu zatwierdzić to, co przygotowałeś (i wypchnąć to zatwierdzenie do zdalnego repozytorium) lub dodać nowe zmiany do obszaru pomostowego, a następnie zatwierdzić to wszystko od razu, lub cofnąć tylko nowe zmiany i przywróć katalog roboczy do stanu, w jakim znajdował się podczas wprowadzania zmian.

Zupełnie możliwe jest całkowite pominięcie strefy przeciwności i skorzystanie z -aopcji, git commitjeśli nie uważasz strefy przeciwności za przydatną koncepcję. Wiele osób pomija etapy, a GUI zwykle na to pozwalają.

Old Pro
źródło
„inne VCS nie” - co tak myślisz? Regały w Perforce wydają się robić to, co opisujesz, a nawet z kilkoma dodatkowymi dzwonkami i gwizdkami
komary
1
@gnat tak, oczywiście wiele innych VCS daje ci coś w rodzaju inscenizacji. Przez „inne VCS” mam na myśli inne VCS, które nie mają czegoś takiego jak scena gita, ponieważ do tego właśnie odnosiło się OP.
Old Pro
Uważam, że ta odpowiedź jest znacznie lepsza niż wszystkie powyższe, ponieważ jest to jedyna, która wyjaśnia, dlaczego Występowanie w ogóle istnieje (jest technicznie wymagane ), wyjaśnienie jego pochodzenia ( autorzy Git postanowili uczynić ten krok widocznym i trwałym ), dodając to, co osobiście uważam za dobrą definicję ( pośrednie, nienazwane, niekomentowane zatwierdzenie lokalne ). Sądzę jednak, że można to poprawić, podając źródło oświadczenia o pochodzeniu inscenizacji i wyjaśniając, dlaczego jest to technicznie wymagane . @OldPro
alexlomba87
-1

Rozumiem, załóżmy, że rozwijam funkcję logowania i wymagam 5 kolejnych kroków do wykonania. Tak więc inscenizacja pomoże ci pracować nad krokami takimi jak
zrobione z krokiem 1 na etapie.
zrobione z krokiem 2, teraz zarówno krok 1, jak i krok 2 są poprawnymi etapami.
zepsuć się z krokiem 3, nie ma problemu, sprawdź ostatni etapowy etap, który jest krokiem 2 w ten
sam sposób po wykonaniu wszystkich 5 kroków, co oznacza, że ​​funkcja jest zakończona, teraz wykonaj zatwierdzenie.

palash140
źródło
wydaje się, że nie dodaje to nic istotnego w porównaniu z punktami poczynionymi i wyjaśnionymi w poprzednich 9 odpowiedziach
gnat
tak, masz rację, właśnie starałem się, aby wyjaśnienie było proste i słodkie
palash140
I jak chciałbym praktycznie wykorzystać tę koncepcję, próbowałem to wyjaśnić
palash140,
zastanów się nad dyskusją tutaj: Czy drugie odpowiedzi TL; DR są do przyjęcia? (FWIW w porównaniu z poprzednimi odpowiedziami nie wydaje mi się prosta ani słodka)
komar
dziękuję, proszę pana, mam pytanie. Natknąłem się na wiele odpowiedzi, a większość z nich jest zbyt skomplikowana, tak, są one poprawne, ale jednocześnie trudne do strawienia. Wierzę, że jeśli nie potrafisz niczego wyjaśnić w prosty sposób, to nie nauczyłeś się tego poprawnie lub nie wiesz, jak to zrobić użyć tego. Więc czy źle jest teraz umieścić podsumowanie lub prosty sposób odpowiedzi?
palash140,