GIT średniozaawansowany
GIT średniozaawansowany
Znaj abstrakcje, których używasz.
O Książce
Odkryj wewnętrzne piękno i elegancję Gita! Naucz się tworzyć porządne, profesjonalne repozytoria!
Mając w głowie poprawne abstrakcje, wiesz dlaczego i co powinno się zrobić.
Odpowiedź na pytanie jak to zrobić jest wówczas łatwiejsza.
„GIT średniozaawansowany” daje Czytelnikowi wyczucie mechaniki Gita. Szczególnie przydatne, gdy wystąpią sytuacje nieoczywiste.
Na pierwszy rzut oka, Git sprawia wrażenie plątaniny dziwacznych komend z niezrozumiałymi parametrami. Dokumentacja jest trudna w czytaniu. Tak więc wydaje się, że próg wejścia jest wysoki. Rodzi to naturalną pokusę pójścia po linii najmniejszego oporu: nauczenia się kilku operacji (wykonywanych z linii komend, narzędzia graficznego lub IDE) typowych dla sposobu pracy zespołu.
W konsekwencji repozytorium jest zaśmiecone wersjami projektu o słabej jakości, z których wiele nie spełnia ustanowionych standardów. Są to np.:
Wersje „under construction”: Zmiany zatwierdzone „przed obiadem”, po code review itd. Ok, można sobie z tym od biedy radzić, np. używając opcji --squash
.
Wiele niekoherentnych zmian w jednej wersji: Zmiany trudne do przejrzenia/zrozumienia; utrudniające/uniemożliwiające wycofanie się z części z nich. Okazuje się, że nie działa tu zasada „łatwiej kijek pocienkować, niż go potem pogrubasić”.
Czy w roku 2023 takie zaśmiecone repozytorium to nie za mało dla prawdziwie profesjonalnego zespołu? Czy naprawdę jednostką sukcesu powinna być scalona — zesquashowana bądź nie — gałąź? Może jednak należy dążyć do sytuacji, gdy każdy commit wprowadza jedną autonomiczną zmianę?
„GIT średniozaawansowany” jest krótki.
Na 100 stronach luźnego tekstu A4 książka — często poprzez eksperymenty — wprowadza w świat abstrakcji Gita. Daje Czytelnikowi aparat pojęciowy i praktyczną wiedzę zilustrowaną przykładami.
Głównych pojęć potrzebnych, aby czuć mechanikę Gita (dlaczego i co należy robić), jest niewiele. Są to:
- Repozytorium jako graf commitów.
- Refy (różnego rodzaju) jako narzędzia służące do uprawiania grafu (lokalnego i zdalnych).
- Niezmienniczość grafu, a przepisywanie historii (przeszczepianie commitów).
- Współpraca repozytorium lokalnego z repozytoriami zdalnymi jako współdzielenie podgrafów.
Metafory wszystkich tych pojęć wraz z ich wzajemnymi powiązaniami zmieściły się na okładce! Czy potrafisz je rozpoznać? Sprawdź krótką sesję youtube: Making the front cover.
W książce autor „odczarowuje” często niezrozumiałe lub błędnie postrzegane pojęcia szczegółowe (jak coś można zrobić):
- commit
- indeks/staging area
- reset
- rebase
- fast-forward-merge
- konflikt scalania
Książka może posłużyć jako przewodnik „od zera do bohatera”, ale nawet po miesiącach/latach użytkowania Gita, warto czasem zatrzymać się na chwilę i wrócić do źródeł.
Opisywane tematy zilustrowane są przykładami i zawierają odnośniki do dokumentacji. Kwestie zaawansowane (np. refspec
) oraz obszerne (np. git log
) opisane są syntetycznie, ze wskazaniem interesujących zagadnień i odesłaniem do odpowiednich fragmentów dokumentacji.
Powtórzenia zawarte w książce są zamierzone, mają one pomóc Czytelnikowi utrwalić sobie właściwe pojęcia.
Spis treści
- Wstęp
- Część I: Git lokalnie
- 1. Konfiguracja
- 1.1. Instalacja
- 1.2.
git config
, czyli konfigurowanie- 1.2.1. Konfiguracje lokalne i globalne
- 1.2.2. Struktura pliku konfiguracyjnego
- 1.2.3. Przeglądanie wartości
- 1.2.4. Ustawianie wartości
- 1.2.5. Aliasy poleceń
- 1.2.6. Usuwanie wartości
- 1.3. Minimalna konfiguracja
- 1.4. Często używane opcje
- 1.5. Rzadko używane opcje
- 1.6. Konfiguracja używana w tej książce
- 2. Repozytorium lokalne
- 2.1.
git
— the stupid content tracker- 2.1.1. Śledzenie historii zmian, czyli historia commitów
- 2.1.2. Zawartość projektu
- 2.1.3. Pliki tekstowe, pliki binarne
- 2.2. Katalog
.git
, czyli repozytorium Gita - 2.3. Obiekty w repozytorium, graf commitów, mapa adresowana zawartością
- 2.3.1. Obiekt commit
- 2.3.2. Graf commitów
- 2.3.3. Commit ID, mapa obiektów (baza danych)
- 2.3.4. Pozostałe rodzaje obiektów
- 2.3.5. Niemodyfikowalność commitów i grafu commitów
- 2.3.6. Dualizm — graf, a baza danych
- 2.3.7. merge commits
- 2.4. Refy — zwykłe i symboliczne, gałęzie
- 2.4.1. Najważniejszy ref — HEAD
- 2.4.2. Kilka eksperymentów z refami i HEAD-em
- 2.4.3. Głowy, czyli czubki gałęzi, czyli gałęzie
- 2.4.4. Konwencje nazewnicze
- 2.4.5. Przydatne polecenia
- 2.4.6. Etykietki
- 2.1.
- 3. Zabawy z grafem
- 3.1. Trochę przygotowań technicznych
- 3.2.
git commit
, czyli tworzenie nowego commita, czyli rozbudowa grafu- 3.2.1. Używane komendy
- 3.2.2. Pierwsze próby
- 3.2.3. Troszkę ćwiczeń
- 3.3.
git merge
, czyli zrastanie się gałęzi- 3.3.1. Feature/topic branch
- 3.3.2. Zwykłe scalanie
- 3.3.3. Fast-forward merge
- 3.3.4. git merge-base, czyli scalanie "trójstronne" i jego baza
- 3.3.5. Octopus merge
- 3.3.6. Wymuszanie rodzaju scalania
- 3.4.
Wyrażenia adresujące
, czyli chodzenie po grafie i zbiory commitów- 3.4.1. Wyrażenia identyfikujące commit
- 3.4.2. Wyrażenia identyfikujące inne obiekty Gita
- 3.4.3. Wersje blobów i drzew
- 3.4.4. Wyrażenia identyfikujące zakresy commitów
- 4. Przepisywanie historii
- 4.1. Wstęp
- 4.1.1. Mała powtórka
- 4.1.2. Relacja rodzica, a relacja dziecka
- 4.1.3. Historia commita
- 4.1.4. Niezmienna, ale przepisywalna
- 4.2.
git reflog
, czyli lokalna historia zmian refów - 4.3.
git commit --amend
, czyli poprawka ostatniego commita - 4.4.
git revert
, czyli odkręcenie wprowadzonych zmian - 4.5.
git cherry-pick
, czyli przeszczepianie commita/zbioru commitów - 4.6.
git rebase
, czyli przeszczepianie gałęzi- 4.6.1. Uwzględnienie zmian z
master
wfeature
(integrowanie zmian) - 4.6.2. Uwzględnienie zmian z
feature
wmaster
(wcielanie zmian) - 4.6.3. Postać polecenia
- 4.6.4. Jak to działa
- 4.6.5. Parametry i ich wartości domyślne
- <new-base>
- <branch>
- <upstream>
- 4.6.6. Rebase interaktywny
- 4.6.1. Uwzględnienie zmian z
- 4.7.
git reset
nie tworzy commitów - 4.8.
git gc
, czyli odśmiecanie
- 4.1. Wstęp
- 5. Prawdziwa praca
- 5.1. Narzędzia graficzne, czyli Git nie jest twardogłowy.
- 5.2. Drzewo robocze, czyli katalog roboczy
- 5.3. Indeks (staging area)
- 5.4. Przygotowywanie nowego commita, czyli ciężka praca
- 5.4.1. Odnotowywanie w indeksie zmian dokonanych w drzewie roboczym
-
git add
, czyli dodanie nowej wersji pliku do indeksu -
git rm
, czyli usunięcie pliku z drzewa roboczego i/lub indeksu
-
- 5.4.2. Cofanie zmian w indeksie
- 5.4.1. Odnotowywanie w indeksie zmian dokonanych w drzewie roboczym
- 5.5.
git commit
, czyli bułka z masłem- 5.5.1. A może praca bez ciężkiej harówy?
- 5.5.2. Zatwierdzanie z pominięciem indeksu?
- 5.6.
git stash
, czyli chwilowe schowanie zmian - 5.7.
.gitignore
, czyli pliki, których nie chcemy śledzić - 5.8.
git checkout
, czyli odtworzenie zapamiętanego stanu- 5.8.1. Przełączanie pomiędzy gałęziami
- 5.8.2. Przełączenie do poprzedniej gałęzi
- 5.8.3. Odtwarzanie stanów poszczególnych plików
- 5.8.4. Niejednoznaczność parametrów
- 5.8.5. Pliki niemonitorowane itp.
- 5.9.
git reset
, czyli przygotowywanie commita od nowa- 5.9.1. Reset jako cofnięcie commita, aby zrobić go jeszcze raz
-
--soft
, czyli cofnięcie fazy commit -
--mixed
, czyli cofnięcie faz: commit i stage -
--hard
, czyli cofnięcie faz: commit, stage i edition
-
- 5.9.2. Reset poszczególnych plików, czyli przywracanie w indeksie
- 5.9.1. Reset jako cofnięcie commita, aby zrobić go jeszcze raz
- 5.10.
git checkout
agit reset
- 5.11. Scalanie szczegółowo, konflikty scalania
- 5.11.1. Rozpoczynanie, przerywanie i kontynuowanie
- 5.11.2. Strony scalania: ours i theirs
- 5.11.3. commity, drzewa, bloby
- 5.11.4. Scalanie w indeksie
- 5.11.5. Rozwiązywanie konfliktów
- 5.11.6. Strategie scalania
- 5.12.
git rerere
, czyli wielokrotne rozwiązywanie tego samego konfliktu
- 6. Przeglądanie historii
- %nbsp 6.1.
git log
, czyli przeglądanie historii- 6.1.1. Filtrowanie wyniku
- 6.1.2. Sortowanie
- 6.1.3. Graf
- 6.1.4. Formatowanie wyniku
- Prezentacja commita
- Prezentacja różnicy pomiędzy commitami
- 6.2.
git shortlog
, czyli podsumowanie historii
- %nbsp 6.1.
- 1. Konfiguracja
- Część II: Git zdalnie
- 7. Zdalne repozytorium
- 7.1.
git remote
, czyli repozytoria zdalne- 7.1.1. Definiowanie zdalnego repozytorium
- Nazwa zdalnego repozytorium
- Namiary na zdalne repozytorium
- 7.1.2. Współpraca repozytoriów
- 7.1.1. Definiowanie zdalnego repozytorium
- 7.2. Gałęzie lokale, zdalne, śledzące oraz śledzenia i upstreamy śledzących
- 7.2.1. Jawne ustawianie upstreama
- 7.1.
- 8. Pobieranie i wypychanie
- 8.1.
git fetch
, czyli pobieranie podgrafów ze zdalnego repozytorium- 8.1.1. Pobieranie pojedynczej gałęzi
- 8.1.2. Pobieranie wielu gałęzi
- 8.1.3. Ogólna postać pobierania
- 8.1.4. Usuwanie uschniętych gałęzi
- 8.1.5. Przydatne opcje
- 8.2.
git push
, czyli wysłanie podgrafów do repozytorium zdalnego- 8.2.1. Wypychanie pojedynczej gałęzi
- 8.2.2. Wypychanie z utworzeniem gałęzi śledzenia
- 8.2.3. Ogólna postać wypychania
- 8.2.4. Usunięcie zdalnej gałęzi
- 8.2.5. Zmiany non-fast-forward
- 8.2.6. Po stronie zdalnego repozytorium
- 8.2.7. Przydatne opcje
- 8.3.
git pull
, czylifetch
imerge
/rebase
naraz - 8.4.
git clone
, czyli utworzenie repozytorium podrzędnego- 8.4.1. Przydatne opcje
- 8.4.2. Inne ciekawe opcje
- 8.1.
- 7. Zdalne repozytorium
- Część III: Uzupełnienia
- 9. Konfiguracja repozytoriów
- 9.1. refspec, czyli mapowanie pomiędzy repozytorium lokalnym a zdalnym
- 9.1.1. Składnia
- 9.1.2. .git/config
- 9.1.3. Podczas pobierania
- Bez podania
<refspec>
- Z podaniem
<refspec>
- Przykłady
- Bez podania
- 9.1.4. Podczas wypychania
- Przykłady
- 9.2. repository, czyli nie tylko
<remote>
- 9.1. refspec, czyli mapowanie pomiędzy repozytorium lokalnym a zdalnym
- 10. Uzgadnianie zmian raz jeszcze
- 10.1.
git checkout
— tworzenie gałęzi lokalnej na podstawie gałęzi śledzenia - 10.2.
git rebase
— domyślne wartości parametrów - 10.3. Konfiguracja domyślnej pracy z rebase zamiast merge
- 10.1.
- 9. Konfiguracja repozytoriów
- Zakończenie
60-dniowa Gwarancja 100% Satysfakcji Leanpub
W ciągu 60 dni od zakupu możesz otrzymać 100% zwrotu kosztów za każdy zakup na Leanpub, w dwóch kliknięciach.
Technicznie rzecz biorąc, jest to dla nas ryzykowne, ponieważ i tak będziesz mieć pliki książki lub kursu. Jednak jesteśmy tak pewni naszych produktów i usług oraz naszych autorów i czytelników, że z przyjemnością oferujemy pełną gwarancję zwrotu pieniędzy za wszystko, co sprzedajemy.
O tym, jak dobre jest coś, możesz przekonać się tylko próbując, a dzięki naszej 100% gwarancji zwrotu pieniędzy, dosłownie nie ma żadnego ryzyka!
Więc nie ma powodu, żeby nie kliknąć przycisku Dodaj do Koszyka, prawda?
Zobacz pełne warunki...
Zarabiaj 8$ przy zakupie za 10$ i 16$ przy zakupie za 20$
Wypłacamy 80% tantiem od zakupów o wartości 7,99$ lub więcej oraz 80% tantiem minus opłata 50 centów od zakupów między 0,99$ a 7,98$. Zarabiasz 8$ przy sprzedaży za 10$ i 16$ przy sprzedaży za 20$. Więc jeśli sprzedamy 5000 niezwróconych kopii twojej książki po 20$, zarobisz 80 000$.
(Tak, niektórzy autorzy już zarobili znacznie więcej na Leanpub.)
W rzeczywistości autorzy zarobili jużponad 14 milionów dolarówpisząc, publikując i sprzedając na Leanpub.
Dowiedz się więcej o pisaniu na Leanpub
Darmowe Aktualizacje. Bez DRM.
Kupując książkę na Leanpub, otrzymujesz darmowe aktualizacje tak długo, jak autor aktualizuje książkę! Wielu autorów korzysta z Leanpub do publikowania książek w trakcie ich pisania. Wszyscy czytelnicy otrzymują darmowe aktualizacje, niezależnie od tego, kiedy kupili książkę i ile za nią zapłacili (włącznie z darmowymi).
Większość książek Leanpub jest dostępna w formacie PDF (na komputery) oraz EPUB (na telefony, tablety i Kindle). Formaty dostępne dla danej książki są pokazane w prawym górnym rogu tej strony.
Co więcej, książki Leanpub nie posiadają żadnych nonsensownych zabezpieczeń DRM, więc możesz je łatwo czytać na każdym obsługiwanym urządzeniu.
Dowiedz się więcej o formatach ebooków Leanpub i gdzie można je czytać