Celem obszaru przeciwstawnego jest stworzenie elastycznej przestrzeni do zatwierdzenia. Myślę, że stanie się to wyraźniejsze, jeśli skontaktujesz git z scentralizowanymi systemami kontroli wersji, takimi jak subversion.
Obalenie
W subversion możesz wybrać, aby zatwierdzić pewne pliki kopii roboczej. Ale tylko pełne pliki. Teraz: Co zrobić, jeśli chcesz wykonać etap pliku A, a nie pliku Bi części pliku, Cktóre odnoszą się do pliku, Aale nie części, które zależą od zmian w pliku B(od tego czasu miałbyś problem ze spójnością zatwierdzania).
Git
Git rozwiązuje to, podając, że inscenizacja jest drugą kopią roboczą. W obszarze przeciwności tworzysz migawkę, którą popełnisz (z grubsza mówiąc).
Dlatego w obszarze pomostowym można utworzyć migawkę zawierającą zmiany Ai wersję pliku, Cktóra odzwierciedla tylko zmiany w A.
Dla konkretnych pytań
Możesz występować w dowolnym momencie. osobiście wolę występować tuż przed uruchomieniem zatwierdzenia.
Po wprowadzeniu zmian w pliku przemieszczonym, a następnie zmianie tego pliku w kopii roboczej, oczywiście nie zmieniłeś pliku tymczasowego. Możesz zdecydować, czy chcesz je wystawić, czy też nie, aby wprowadzić zmiany. To znaczy, jeśli uruchomisz git gui citool, zobaczysz różnice między wersjami etapowymi i nieetapowymi (ładne i proste narzędzia do inscenizacji i zatwierdzania linii).
Git jest tutaj ostrożny, co prawdopodobnie jest dobrą rzeczą.
Ogólna strategia zatwierdzania: szczegółowe zatwierdzanie
Wydaje mi się, że mówiąc o pytaniu „Kiedy powinienem występować”, należy również mówić o nawykach związanych z popełnianiem błędów.
Scentralizowany VCS
W scentralizowanych systemach kontroli wersji, w których angażujesz się na centralnym serwerze, ważne było dla twoich współpracowników, aby twoje zobowiązania były kompletne i dobrze przetestowane. Dlatego ludzie próbują popełniać niezbyt często, a następnie zatwierdzać stan kompletnych plików, aby zminimalizować możliwość wystąpienia błędu. Dlatego zatwierdzenia są zwykle dość dużymi fragmentami, które zawierają wiele zmian (jeśli nie są to proste poprawki). Zmiany w zatwierdzeniu mogą być całkowicie niezwiązane.
Git
W Git zatwierdzenie jest wykonywane lokalnie, tylko wypychanie ich na serwer czyni je publicznymi. Dlatego zatwierdzenie jest w pewnym sensie tanie . Zatwierdzenie w sensie subwersji jest raczej porównywalne do kilku git commitnastępujących po nim git push. Ta różnica ma znaczenie.
Git pozwala zatwierdzać pojedyncze wiersze kodu, nawet jeśli zmieniłeś także inne wiersze w tym samym pliku. Daje to wiele korzyści, ponieważ można na przykład naprawić błąd bezpieczeństwa w wierszu 100, zmieniając wiersze 300–350 i wprowadzając nową funkcję.
- Możesz rozdzielić różne zmiany w różnych zatwierdzeniach. To ładnie oddziela je w historii wersji, a nawet pozwala cofnąć jedno, ale nie drugie.
- Twoje zatwierdzenie niekoniecznie musi odzwierciedlać stan „kompilacji” twojej kopii roboczej (chociaż staram się tak zachować).
Więc gdzie jest „kontrola jakości” i gwarancja kompilacji w zatwierdzeniu, której oczekiwałby użytkownik subversion? Został przeniesiony do innych akcji w git. Nadal chcesz wypchnąć funkcjonujący stan programu w publicznym repozytorium. Dlatego upewnij się, że testy się powiodły, a program działa przed wypchnięciem swoich zmian.
Spróbuj także wykorzystać gałęzie do maksimum. Przy wprowadzaniu wielu drobnych zmian skończysz z dość dużą historią wersji. Jeśli pracujesz w gałęziach, możesz kategoryzować te szczegółowe zatwierdzenia według nazwy gałęzi, a następnie scalić je z powrotem (opcja --no-ffzachowa również, że te funkcje żyły w unikalnej gałęzi).
Tj. Możesz zachować nawyk łączenia się z masteroddziałem tylko wtedy, gdy oddział jest w dobrym stanie. Możesz także użyć tagów do śledzenia kamieni milowych i wydań.
Teraz powróć do inscenizacji: po zatwierdzeniu kilku linii na zatwierdzenie przejdziesz bezpośrednio przed zatwierdzeniem. (Przynajmniej tak to robię).
git diffigit diff --cachedsą dobre, ale czasami chcę więcej).