Słowem wstępu…
U nas co prawda wszyscy świetnie Gita znają, ale są pewnie i tacy, którzy niekiedy muszą bardziej zaawansowane rzeczy z nim zrobić. Artykuł ten jest wstępem do szkolenia jakie z Kamilem Ciesielskim będę organizował w pracy. Nazwaliśmy je "Git share #1". Tak, będą na nim różne sztuczki zaprezentowane ;-). Artykuł ten natomiast jest też jak widać częścią I, ponieważ w przyszłości będą omawiane różne kolejne, ciekawe tematy, będą kolejne części. Po lekturze zapraszam do wzięcia udziału w Ankiecie, która jest na końcu. Pomimo iż mamy tylko rzeczy niebanalne omawiać, podam ogólne cechy Gita : Dobre wsparcie dla rozgałęzionego procesu tworzenia oprogramowania: jest dostępnych kilka algorytmów łączenia zmian z dwóch gałęzi, a także możliwość dodawania własnych algorytmów Praca off-line: każdy programista posiada własną kopię repozytorium, do której może zapisywać zmiany bez połączenia z siecią; następnie zmiany mogą być wymieniane między lokalnymi repozytoriami. Wsparcie dla istniejących protokołów sieciowych: dane można wymieniać przez HTTP(S), FTP, rsync, SSH. Efektywna praca z dużymi projektami: system Git według zapewnień Torvaldsa, a także według testów fundacji Mozilla, jest o rzędy wielkości szybszy niż niektóre konkurencyjne rozwiązania Każda rewizja to obraz całego projektu: w przeciwieństwie do innych systemów kontroli wersji, Git nie zapamiętuje zmian między kolejnymi rewizjami, lecz kompletne obrazy. Z jednej strony wymaga to nieco więcej pracy aby porównać dwie rewizje, z drugiej jednak pozwala np. na automatyczną obsługę zmian nazw plików
Git-bash-prompt
Teraz trochę dla tych wszystkich, którzy pracują w trybie linii komend. Czyli o rewelacyjnym Git-bash-prompt. Jest to mały soft usprawniający nam działania, przede wszystkim wyświetlający status w repozytoriach. Pobieramy stąd: https://github.com/magicmonty/bash-git-prompt Instalacja: cd ~ git clone https://github.com/magicmonty/bash-git-prompt.git .bash-git-prompt –depth=1 następnie dodanie do ~/.bashrc: GIT_PROMPT_ONLY_IN_REPO=1 source ~/.bash-git-prompt/gitprompt.sh Nie będę się rozwodził z teorią, podam od razu różne przykłady wyświetlania stanu w linii komend, z objaśnieniami:
- (master↑3|✚1): branch master, 3 pliki do commit, 1 jeden plik zmieniony ale niezaindekownay (ang.unstaged)
- (status|●2): w branch o nazwie status, 2 pliki zaindeksowane (ang. staged)
- (master|✚7…): branch master, 7 plików zmienionych, niektóre nieśledzone
- (master|2✚3): branch master, 2 konflikty, 3 pliki zmienione
- (master|⚑2): branch master, 2 pliki w schowku (ang.stash)
- (experimental↓2↑3|): branch experimental; w branchu oczekują 3 commity, zdalnie 2 commity; repo czyste
- (:70c2952|): w żadnym branchu; commit hash 70c2952; repo czyste
Symbole c.d.:
-
Symbole lokalne
- : „czyste” repozytorium
- ●n: n plików zaindeksowanych (ang.staged)
- n: n plików w konflikcie merge
- -n: n plików zaindeksowanych wayting for removal
- ✚n: n plików zmienionych ale stan niezaindeksowane (ang.unstaged)
- …n: n plików nie śledzonych (ang.untracked)
- ⚑n: n plików w schowku (ang. stash)
Dostępne poprzez ustawienie GIT_PROMPT_SHOW_UPSTREAM=1
Skórki
Większość ustawień jest przechowywana w plikach skórek. Aby wybrać skórkę, ustaw zmienną GIT_PROMPT_THEME na odpowiednią nazwę nazwę :
Kilka ciekawych komend.
Wyświetlenie pomocy Git
git help everyday
Wyświetlenie spisu pomocników
git help -g
Szybkie przełączenie na poprzedniego brancha
git checkout –
Usunięcie branchy które zostały zmergowane z master
git branch –merged master | grep -v '^\*' | xargs -n 1 git branch -d
Listowanie wszystkich branchy i ich ostatnich commitów
git branch -vv
Cofnięcie commita poprzez utworzenie nowego
git revert
Perełki w sieci.
Adresy, które powinniście znać: https://git-scm.com/book/pl/v1/Pierwsze-kroki-Wprowadzenie-do-kontroli-wersji https://github.com/git-tips/tips