32
Как удержать проект от анархии с помощью Git

Как удержать проект от анархии с помощью Git

Embed Size (px)

Citation preview

Page 1: Как удержать проект от анархии с помощью Git

Как удержать проект от анархии

с помощью Git

Page 2: Как удержать проект от анархии с помощью Git

Ага, вот эти ребята

Михаил Каморников

Александр ТатульченковПропагандист и популяризатор php-

джихада и медоед-стайл кодинга.

Пишет SQL во вьюхах и несет

$GLOBALS в массы.

Не “тот самый Маршал” из сериала.

Особо опасен в связке с Symfony 2.

Page 3: Как удержать проект от анархии с помощью Git

Опять про GIT ...

Page 4: Как удержать проект от анархии с помощью Git

Недостатки?

- слабости sha1

- git на windows

- несвязанные файлы

- кто и что редактировал?

- история файла

- начальное клонирование

- изменчивые проекты

- глобальный счетчик (svn style)

- пустые подкаталоги

- первоначальный коммит

- причуды интерфейса (a..b, a...b)

Page 5: Как удержать проект от анархии с помощью Git

Явные плюсы?

- всегда с кодом

- “--interactive” режим в командах

- возможность синхронизации с subversion, mercurial [, cvs )) ]

- man всегда под рукой

- формат репозитория дружелюбен к rsync, обычному HTTP и backup’ам

- можно писать свои скрипты

Page 6: Как удержать проект от анархии с помощью Git

“D” в DVCS

- каждому по репозиторию

- write access нужно заслужить

Page 7: Как удержать проект от анархии с помощью Git

Integration Manager Workflow

Page 8: Как удержать проект от анархии с помощью Git

Dictator and Lieutenants Workflow

Page 9: Как удержать проект от анархии с помощью Git

Как устроено у нас

- я ставлю задачу разработчику

- разработчик создает бранч от актуального бранча из главного репозитория

- в этом бранче разработчик решает поставленную задачу

- бранч с выполненной задачей разработчик отправляет в свой рабочий репозиторий

- я беру из рабочего репозитория этот бранч и проверяю его

- если задача выполнена правильно, я сливаю этот бранч с актуальным бранчем

Page 10: Как удержать проект от анархии с помощью Git

Social coding

Page 11: Как удержать проект от анархии с помощью Git

Хорошо, что есть github

Page 12: Как удержать проект от анархии с помощью Git

Хорошо, что есть github

Page 13: Как удержать проект от анархии с помощью Git

Пусть git работает за меня

- стоит посмотреть git flow

- есть утилита лучше git-овской - заставьте git работать через нее

- надоела рутина – пишем скрипты на все случаи жизни

- не забываем про хуки

Page 14: Как удержать проект от анархии с помощью Git

Я устал … слово медоеду

Page 15: Как удержать проект от анархии с помощью Git

На старт, внимание, Git!

$ git init

$ git add .

$ git commit -m "Люк, я тво..."

Page 16: Как удержать проект от анархии с помощью Git

Репозиторий разработчика

$ cd /project/

$ git clone [email protected]

$ git push origin master:stage

$ git checkout -b stage origin/stage

Page 17: Как удержать проект от анархии с помощью Git

Добавляем aliases

.gitconfig

[alias]

st = status

ci = commit

br = branch

co = checkout

df = diff

lg = log -p

git config --global alias.rb rebase

Page 18: Как удержать проект от анархии с помощью Git

Я имел в виду совсем не это... :-)

Ошиблись в комменте

$ git commit --amend

Ой, еще и файл добавить забыли

$ git commit --amend -a

Если все в 10 раз хуже

$ git rebase -i HEAD~10

Page 19: Как удержать проект от анархии с помощью Git

Вон там направо и за угол

$ git checkout 1b6d^^2~10 -b ancient

$ git log HEAD^2

$ git diff HEAD^

Page 20: Как удержать проект от анархии с помощью Git

Найдите 10 отличий

$ git diff

$ git diff --cached

$ git diff HEAD

$ git diff HEAD^

$ git diff master..experimental

$ git diff experimental

Page 21: Как удержать проект от анархии с помощью Git

к0нфликт

git diff

git mergetool

# fix, fix, fix

git commit

Page 22: Как удержать проект от анархии с помощью Git

Назад в прошлое и в будущее

$ git reset HEAD~3 --soft

$ git reset 1b6d

$ git reset ORIG_HEAD

Page 23: Как удержать проект от анархии с помощью Git

Убить коммиты, жесточайше…

$ git reset --hard 1b6d

$ git reset --hard HEAD

$ git reset --hard HEAD^

Page 24: Как удержать проект от анархии с помощью Git

Изменяем состав смеси, добавим вишенку

$ git checkout -b sanitized

$ git cherry-pick medley^^

Page 25: Как удержать проект от анархии с помощью Git

Вас здесь не стояло!

# переключаемся на ветку bug1

$ git checkout bug1

# пересадить историю изменений

$ git rebase master

# глобальный amend

$ git rebase -i HEAD~7

pick 41cf624 Added connection

pick a14e959 Added timeouting to cli

pick 1934b6e Added disconnect event

pick 0e8a050 Changed connections

Page 26: Как удержать проект от анархии с помощью Git

Все секреты по карманам, я гуляю с доберманом

$ git stash

$ git stash list

$ git stash show

$ git stash apply

$ git stash drop

$ git stash pop

$ git stash clear

Page 27: Как удержать проект от анархии с помощью Git

А оно само сломалось !

$ git blame README

$ git gui blame README

Можно указать и конкретные строки

для отображения:

$ git blame -L 2,+3 README

Вывести строки и информацию о

коммитах, их коснувшихся:

$ git annotate README

Page 28: Как удержать проект от анархии с помощью Git

Немного уличной магии

Переписываем историю в духе сталинизма

$ git filter-branch --tree-filter 'rm secretfile' HEAD

Обучаем git игре в карты

$ git rerere

Стопитсотый раз тебе говорю

$ git submodule foreach 'git pull || :'

Page 29: Как удержать проект от анархии с помощью Git

Когда же все пошло не так?

только что обнаружили, что функционал не работает, но вы совершенно

отчетливо помните, что он работал всего несколько месяцев назад

$ git bisect start

$ git bisect bad HEAD

$ git bisect good 1b6d

для полного счастья

$ git bisect reset

Page 30: Как удержать проект от анархии с помощью Git

Много букаф, неасилил

$ git for-each-ref --shell --format="ref=%(refname); commitDate=%(authordate:short)" refs/heads/my* | \

while read entry

do

eval "$entry";

branch=${ref:11};

untilStamp=$(date +%s -d "$1");

commitStamp=$(date +%s -d "$commitDate");

compare=$(expr $untilStamp - $commitStamp);

if [ $compare -gt 0 ]

then

echo ‘branch $branch date: $commitDate‘;

if [ "$2" == "-d" ]

then

echo "git branch -D $branch"

eval "git branch -D $branch"

else

echo "git branch -D $branch"

fi

fi

done

Page 31: Как удержать проект от анархии с помощью Git

Вопросы

Page 32: Как удержать проект от анархии с помощью Git

FIN