15. Git

15. Git

15. Git

26 ноември 2014

Днес

Защо отделяме два часа, за да говорим за Git?

Version Control System (VCS)

Не просто система, следяща промени в код!

Познавате ли този човек?

Linus Torvalds

Бащата на Linux

Създател на Git

Малко история

Linux kernel

Какво е нужно?

Централизирана VCS

Децентрализирана VCS

Защо точно git?

В началото беше git init

git init

Създава празно хранилище в текущата директория.

Виждате папката .git - съхранява всичко, което е нужно за историята.

Клониране на хранилище

git clone https://github.com/fmi/ruby-lectures.git

Работната директория (working directory)

Хранилището

Staging област

Отдалечено хранилище

Четирите области

Четирите области

4 състояния на файл

4 състояния на файл

Staging областта

С примери

git status

Списък с всички променени, изтрити и нови файлове.

git diff

Промени на файловете в работната директория, спрямо тези в staging областта. Със --staged (--cached в по-стари версии) - промени на файлове в staging, спрямо последния commit в хранилището.

git add new_or_modified.rb

Добавя файла към staging.

git add lectures/11

Добавя всички променени файлове в директорията.

git rm old.rb

Изтрива файл от работната директория и го маркира като изтрит в staging.

Типове обекти

Commit

Конкретна версия на дърво (snapshot)

Състои се от:

Commit

Всичко е просто файл

git cat-file -p 5fae695

Commit

Списък с commit-и в историята

git log
git log --stat
git log --since=2.weeks
git log --since=5.days.15.minutes
git log --until=2013-11-30
git log --grep 'Proc.new'
git log --author 'Dimitar Dimitrov'
git log lectures/01-introduction-to-ruby.slim

Commit

Да разгледаме

git show 5fae69568cd5420e13a34c06f6f495ea9bcb9a4e
git show 5fae695
git show HEAD
git show HEAD^
git show HEAD^^^
git show HEAD~3
git diff HEAD~3..HEAD

Commit

git commit
git commit -m "Fix a typo on slide 3"

Commit-вайте възможно най-малките, логически свързани промени, които не чупят нищо.

Commit съобщения

Commit съобщения

Най-важното нещо във всяка VCS

Commit съобщения

Лош пример

Update Gemfile.lock

Commit съобщения

Добър пример

Update skeptic and libv8

The skeptic update showed errors in edge cases with the "spaces around
operators" restriction.

The libv8 update was because of compile problems I had with the older
version on OS X Yosemite.

Branch-ове (разклонения)

Branch-ове

Особености

Branch-ове

Създаване на branch

git branch killer-feature
git checkout -b killer-feature

Превключване между вече създадени

git checkout killer-feature
git checkout master

Създаване на branch

Демонстрация

git branch

Обновяване

git pull
git pull origin
git pull origin master

Публикуване

git push
git push origin killer-feature
git push origin local-branch-name:killer-feature # Ако са с различни имена

Въпроси