Code Carrots

System kontroli wersji GIT


Autorka prezentacji: Barbara Litwińska

Czego się dziś nauczymy?

Czym jest git?

Konfiguracja

(git config)

Podstawy pracy z gitem i moje pierwsze repo

(git init, status, add, rm, commit, log, diff, reset)

Praca ze zdalnym repozytorium

(git clone, pull, merge, push)

Czym jest git?

  • Git to rozproszony system kontroli wersji
  • Pozwala m.in. na:
    • śledzenie zmian w plikach
    • łatwy powrót do wcześniejszej wersji pliku
    • sprawną zdalną współpracę
  • 'Nie programuję, czy potrzebny mi git?'

Konsola czy Git for Windows?

Konfiguracja

Ustawiamy swoje dane:

git config --global user.name „...”
git config --global user.email ...

Konfiguracja może być przechowywana w plikach:

/etc/gitconfig
~/.gitconfig
.git/config

Aby wyświetlić wszystkie ustawienia:

git config –-list

Podstawy pracy z gitem i moje pierwsze repo

git init


Wywołane w istniejącym katalogu utworzy podkatalog .git zawierający szkielet repozytorium


Initialized empty Git repository

Jak to działa?

Plik może znajdować się w czterech stanach:

  • nieśledzony (eng. untracked, zaraz po stworzeniu nowego pliku)
  • zmodyfikowany (eng. modified, plik zmieniony, zmiany niezapisane do bazy)
  • śledzony (eng. staged, zmiany przeznaczone do zatwierdzenia przy następnej operacji commit)
  • zatwierdzony/niezmodyfikowany (eng. commited/unmodified, bezpiecznie zachowany w lokalnej bazie danych)

Jak to działa

  1. Dokonujesz modyfikacji plików w katalogu roboczym.
  2. Oznaczasz zmodyfikowane pliki jako śledzone (add), dodając ich bieżący stan do przechowalni.
  3. Dokonujesz zatwierdzenia (commit), podczas którego zawartość plików z przechowalni jest zapisywana.

git status


Podglądamy repozytorium


On branch master

nothing to commit, working directory clean

.gitignore


  • Plik zawierający informacje, których plików nigdy nie chcemy dodawać do repozytorium.
  • Nie będą one widoczne również po wywołaniu git status

  • secret.js

    (Ukryje plik secret.js)

  • *.txt

    (Spowoduje, że git zignoruje wszystkie pliki o rozszerzeniu .txt

git add/rm

Czas wprowadzić zmiany!

Dodanie wszystkich zmian:

git add .

Dodanie konkretnego pliku:

git add my_file

Jednak nie chcę śledzić tego pliku..

git rm --cached my_file

git commit

Jestem gotowa na zapisanie moich zmian!

git commit -m 'my first commit :-)'
git commit . -m 'my first commit'

http://xkcd.com/1296/

git log

Wyświetlamy wszystkie commity:

git log --graph –-pretty=oneline

git diff

Co zmieniło się od ostatniej operacji commit?

Wyświetl różnice w jednej linii:

git diff –-color-words

git reset

Cofanie ostatnich commitów:

git reset HEAD~1

Ściąganie plików ze 'sceny':


git reset HEAD .
git reset HEAD my_file

Uwaga na opcję –-hard,

nieodwracalnie

usuwa wszystkie zmiany!

Do dzieła!

  1. Stwórzcie puste repozytorium
  2. Dodajcie dowolny plik (np. zadanie domowe z poprzedniego tygodnia ;-))
  3. Dodajcie plik do repozytorium i wykonajcie pierwszy commit
  4. Wprowadźcie zmiany w pliku
  5. Wyświetlcie status repozytorium
  6. Zobaczcie co zmieniło się w pliku
  7. Dodajcie commita ze zmianami
  8. Dodajcie kolejny plik
  9. Wprowadźcie zmiany w obu plikach
  10. Dodajcie commit ze zmianami tylko w nowym pliku

Praca ze zdalnym repozytorium

git clone

Klonowanie istniejącego repozytorium:

git clone https://github.com/basial/CodeCarrotsJS.git

git remote

Dodawanie zdalnego repozytorium :

git remote add origin git@github:basial/CodeCarrotsJS.git

Wyświetlanie listy wszystkich zdalnych repo:

git remote -v

Usuwanie:

git remote remove origin

git push

Dodajmy nasze zmiany do zdalnego repozytorium!

Pierwszy push:

git push -u origin master

Później już tylko:

git push

ssh-key

https://help.github.com/articles/generating-ssh-keys/

ls -al ~/.ssh
ssh-keygen -t rsa -C "your_email@example.com"
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa

git pull i merge

Ściąganie zmian ze zdalnego repozytorium:

git pull

Co jeśli jeden plik został zmieniony zdalnie i lokalnie?

Wykorzystajmy wiedzę w praktyce!

  1. Stwórzcie zdalne repozytorium na GitHubie
  2. Połączcie je ze swoim repozytorium lokalnym
  3. Dodajcie swój pierwszy commit do zdalnego repozytorium