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
- Strona domowa gita
- Git probook
- Cheat sheet
- Szkolenie na codeacademy.com
- git immersion (polecane przez Bartka :))
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