15. Git

15. Git

15. Git

11 декември 2013

Днес

Бъдещето на образованието

лирическо отклонение

Flipped Classrooms

Образование

Образование

Образование

и вашата роля

Защо отделяме два часа, за да говорим за 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

Работната директория

Хранилището

Staging област

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

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

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

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

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

Да разгледаме staging областта

С примери

git status

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

git diff

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

git add new_or_modified.rb

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

git add lectures/11

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

git rm old.rb

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

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

Commits 1

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

Състои се от:

Commits 2

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

git cat-file -p 5fae695

Commits 3

Списък с 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

Commits 4

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

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

Commits 5

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

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

Добри практики за съобщението:

Branches 1

Особености

Branches 1

Branches 2

Създаване

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

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

git checkout killer-feature
git checkout master

Branches 2

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

Branches 2

Branches 3

Обновяване

git pull
git pull origin

Публикуване

git push
git push origin killer-feature

Сливане

git merge killer-feature
git merge --squash killer-feature

Различни стратегии на сливане. Основните са 2:

Fast-Forward стратегия

Просто премества указателя за клона

Fast-Forward стратегия

Просто премества указателя за клона

Recursive стратегия

Слива 2 разделили се клона с обща история.

Recursive стратегия

Жълтото e merge commit-a. Той съдържа промените и от двата клона.

Branch 4

Изтриване

git branch -d killer-feature
git push origin --delete killer-feature # Ако сте го push-нали

Branch 4

Типичен процес на работа

Типичен процес на работа

Заради "евтините" branch-ове на git можем да направим следното:

Типичен процес на работа

Резултат

Машината на времето

Или как да върнем "безвъзвратно" загубените промени.

git reset
git checkout
git commit --amend
git revert
git reflog

Машината на времето

git reset <commit> <files>
git reset HEAD lectures/git.slim

Машината на времето

git checkout <files>

Машината на времето

git commit --amend
git push --force   # Ако вече сте push-нали

Машината на времето

git revert <commit>

Машината на времето

git reflog

Игнориране на файлове

Файлът .gitignore

Игнориране на файлове

Формат на .gitignore

\/bin           # Файла/директорията bin в главната директория на проекта
bin             # Всички файлове и директории с име bin
bin/            # Всички директории с име bin
compiled/*.html # Всички файлове с разширение html в compiled-lectures
lib/**/*.txt    # Всички текстови файлове в lib или нейна поддиректория
*.exe           # Всички изпълними файлове за Windows

Git rebase

Най-мощният инструмент за пренаписване на историята

git checkout killer-feature
git rebase master
git rebase -i master
git rebase -i HEAD~4

Git blame

Или "Кой написа това?"

git blame lectures/index.yml

Изводи

Искайте помощ:

Графичен интерфейс

GitX

Графичен интерфейс

TortoiseGit

Графичен интерфейс

GitHub

Материали

Въпроси по Git?

Сега е добър момент да ги зададете.

Проекти

Въпроси