Podstawy użycia GITa

Wojciech 'urban' Urbański

Trzy słowa od ojca prowadzącego

  • System kontroli wersji
  • Linus Torvalds to jest gość
  • Wszystko jest kodem (kod jest wszystkim?)
  • Przechowywanie plików konfiguracyjnych
  • Uporządkowany proces współpracy

SVN vs GIT

Centralny vs rozproszony

Każda operacja na repozytorium SVN wykonywana jest na serwerze

Większość operacji w gicie wykonywana jest lokalnie.

Do serwera dane trafiają po push'u

Rewizje kodu

SVN przechowuje jedynie zmiany dokonane w kolejnych rewizjach

Git przechowuje zrzuty (snapshots) całego repozytorium w kolejnych rewizjach (commitach)

Podstawowe operacje

  • Wstępna konfiguracja
  • Tworzenie/klonowanie repo
  • Operacje na zmianach
  • Grupowanie zmian
  • Przeglądanie historii
  • Synchronizacja zmian

Wstępna konfiguracja

  • git config

$ git config [params]

$ git config --global user.name "[name]"

$ git config --global user.email "[email address]"

[opcjonalnie:]
$ git config --global color.ui auto

Konfiguracja gita

Tworzenie repozytorium

  • git clone
  • git init

$ git init [project-name]

$ mkdir test

$ cd test

$ git init
Initialized empty Git repository in /home/urban/repos/test/.git/

Tworzenie repozytorium

$ git clone [url]

$ git clone https://github.com/wurbanski/skos-git.git
Initialized empty Git repository in /home/urban/repos/test/skos-git/.git/
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.

Pobranie repozytorium wraz z historią

Operacje na zmianach

  • git status
  • git diff
  • git add [file]
  • git reset [file]
  • git commit -m "[wiadomość]"

$ git status

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   test.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

Wyświetla wszystkie zmiany w plikach śledzonych

$ git diff

$ git diff
diff --git a/test.txt b/test.txt
index e69de29..4fc43a6 100644
--- a/test.txt
+++ b/test.txt
@@ -0,0 +1 @@
+test

Wyświetlanie różnic w plikach

$ git add [file]

$ touch test2

$ git add test2

Dodanie pliku do wersjonowania

$ git reset [file]

$ git add test.txt

$ git reset test.txt
Unstaged changes after reset:
M       test.txt

Przeciwieństwo do git add, zachowuje zawartość pliku

$ git commit -m "[message]"

$ git add test.txt

$ git commit -m "Dodana istotna zawartość pliku test.txt"
[master 03bbc98] Dodana istotna zawartość pliku test.txt
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 test2

Stworzenie snapshot'u z dodanych plików

$ git reset [--hard] [commit]

$ git reset 03bbc980
Unstaged changes after reset:
M       test.txt

03bbc98 Dodana istotna zawartość pliku test.txt
55b6db8 Pierwszy commit
b528b6b Initial commit

Cofnięcie stanu repozytorium do commita

--hard usuwa lokalne zmiany

Grupowanie zmian

  • git branch
  • git checkout
  • git merge

$ git branch

$ git branch
* master
  test1
  test2
  test3

Lista branch'y repozytorium

$ git branch [name]

$ git branch szkolenie

$ git branch
* master
  szkolenie
  test1
  test2
  test3

Tworzenie nowego branch'a

$ git checkout [-b] [name]

$ git checkout szkolenie
Switched to branch 'szkolenie'

$ git branch
  master
* szkolenie
  test1
  test2
  test3

Przejście na innego branch'a

-b tworzy branch "w locie"

$ git merge [branch]

$ git checkout master
Switched to branch 'master'

$ git merge szkolenie
Updating 03bbc98..9dfaa28
Fast-forward
 test.txt |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

$ git log --oneline
9dfaa28 Zmiany na branchu szkolenie
03bbc98 Dodana istotna zawartość pliku test.txt
55b6db8 Pierwszy commit
b528b6b Initial commit

Łączenie historii branch'a z obecnym

Przeglądanie historii

  • git log
  • git diff
  • git show

$ git log

$ git log
commit 9dfaa28762f41efa8323a4efdd5465d5ee9ad581
Author: Wojciech Urbanski <urban@ds.pg.gda.pl>
Date:   Tue Mar 31 10:48:55 2015 +0200

    Zmiany na branchu szkolenie

commit 03bbc9803a060925ab2e63b00e0cd92d96e456a7
Author: Wojciech Urbanski <urban@ds.pg.gda.pl>
Date:   Tue Mar 31 10:23:28 2015 +0200

    Dodana istotna zawartość pliku test.txt

commit 55b6db8f046d168165d6eab10b7f5fd2ea4d8001
Author: Wojciech Urbanski <urban@ds.pg.gda.pl>
Date:   Tue Mar 31 10:15:43 2015 +0200

    Pierwszy commit

commit b528b6b5672bef2965df0b7f27fe49afff8cf6d1
Author: Wojciech Urbański <teh.urb@gmail.com>
Date:   Sun Mar 29 22:40:59 2015 +0200

    Initial commit

Wyświetla historię zmian obecnego branch'a

$ git diff [br1]..[br2]

$ git diff master..test2
diff --git a/test.txt b/test.txt
index 5407457..4fc43a6 100644
--- a/test.txt
+++ b/test.txt
@@ -1,2 +1 @@
 test
-test2

Wyświetlenie zmian między branch'ami

$ git show [branch]

$ git show master
commit 9dfaa28762f41efa8323a4efdd5465d5ee9ad581
Author: Wojciech Urbanski <urban@ds.pg.gda.pl>
Date:   Tue Mar 31 10:48:55 2015 +0200

    Zmiany na branchu szkolenie

diff --git a/test.txt b/test.txt
index 4fc43a6..5407457 100644
--- a/test.txt
+++ b/test.txt
@@ -1 +1,2 @@
 test
+test2

Wyświetla informacje o danym branch'u

Synchronizacja zmian

  • git remote
  • git fetch
  • git push
  • git pull

$ git remote 

$ git remote add skos git@www2:szkolenie

$ git remote
origin
skos

Zarządzanie odnośnikami do repozytoriów

$ git push [repo] [branch]

$ git push skos master
Counting objects: 9, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (9/9), 798 bytes, done.
Total 9 (delta 0), reused 3 (delta 0)
To git@www2:szkolenie
 * [new branch]      master -> master

Wysłanie zmian do repozytorium

$ git fetch [repo] [branch]

$ git fetch skos master
From www2:szkolenie
 * branch            master     -> FETCH_HEAD

Pobranie historii z danego repozytorium

$ git pull [repo] [branch]

$ git pull skos master
From www2:szkolenie
 * branch            master     -> FETCH_HEAD
Already up-to-date.

Pobranie zmian z repozytorium i włączenie ich do odpowiedniego branch'a

Przydatne linki

Obrazy na licencji Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License pobrano z githuba

[SKOS PG] Co i jak z tym gitem?

By Wojciech Urbański

[SKOS PG] Co i jak z tym gitem?

  • 308