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

858
-1

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
858
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Как удержать проект от анархии с помощью Git
  2. 2. Ага, вот эти ребята Михаил Каморников Александр Татульченков Пропагандист и популяризатор php-джихада и медоед-стайл кодинга. Пишет SQL во вьюхах и несет $GLOBALS в массы. Не “тот самый Маршал” из сериала. Особо опасен в связке с Symfony 2.
  3. 3. Опять про GIT ...
  4. 4. Недостатки? - слабости sha1 - git на windows - несвязанные файлы - кто и что редактировал? - история файла - начальное клонирование - изменчивые проекты - глобальный счетчик (svn style) - пустые подкаталоги - первоначальный коммит - причуды интерфейса (a..b, a...b)
  5. 5. Явные плюсы? - всегда с кодом - “--interactive” режим в командах - возможность синхронизации с subversion, mercurial [, cvs )) ] - man всегда под рукой - формат репозитория дружелюбен к rsync, обычному HTTP и backup’ам - можно писать свои скрипты
  6. 6. “ D” в DVCS - каждому по репозиторию - write access нужно заслужить
  7. 7. Integration Manager Workflow
  8. 8. Dictator and Lieutenants Workflow
  9. 9. Как устроено у нас - я ставлю задачу разработчику - разработчик создает бранч от актуального бранча из главного репозитория - в этом бранче разработчик решает поставленную задачу - бранч с выполненной задачей разработчик отправляет в свой рабочий репозиторий - я беру из рабочего репозитория этот бранч и проверяю его - если задача выполнена правильно, я сливаю этот бранч с актуальным бранчем
  10. 10. Social coding
  11. 11. Хорошо, что есть github
  12. 12. Хорошо, что есть github
  13. 13. Пусть git работает за меня - стоит посмотреть git flow - есть утилита лучше git-овской - заставьте git работать через нее - надоела рутина – пишем скрипты на все случаи жизни - не забываем про хуки
  14. 14. Я устал … слово медоеду
  15. 15. На старт, внимание, Git! $ git init $ git add . $ git commit -m "Люк, я тво..."
  16. 16. Репозиторий разработчика $ cd /project/ $ git clone me@trololo.git $ git push origin master:stage $ git checkout -b stage origin/stage
  17. 17. Добавляем aliases .gitconfig [alias] st = status ci = commit br = branch co = checkout df = diff lg = log -p git config --global alias.rb rebase
  18. 18. Я имел в виду совсем не это... :-) Ошиблись в комменте $ git commit --amend Ой, еще и файл добавить забыли $ git commit --amend -a Если все в 10 раз хуже $ git rebase -i HEAD~10
  19. 19. Вон там направо и за угол $ git checkout 1b6d^^2~10 -b ancient $ git log HEAD^2 $ git diff HEAD^
  20. 20. Найдите 10 отличий $ git diff $ git diff --cached $ git diff HEAD $ git diff HEAD^ $ git diff master..experimental $ git diff experimental
  21. 21. к0нфликт git diff git mergetool # fix, fix, fix git commit
  22. 22. Назад в прошлое и в будущее $ git reset HEAD~3 -- soft $ git reset 1b6d $ git reset ORIG_HEAD
  23. 23. Убить коммиты, жесточайше… $ git reset --hard 1b6d $ git reset --hard HEAD $ git reset --hard HEAD^
  24. 24. Изменяем состав смеси, добавим вишенку $ git checkout -b sanitized $ git cherry-pick medley^^
  25. 25. Вас здесь не стояло! # переключаемся на ветку 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
  26. 26. Все секреты по карманам, я гуляю с доберманом $ git stash $ git stash list $ git stash show $ git stash apply $ git stash drop $ git stash pop $ git stash clear
  27. 27. А оно само сломалось ! $ git blame README $ git gui blame README Можно указать и конкретные строки для отображения: $ git blame -L 2,+3 README Вывести строки и информацию о коммитах, их коснувшихся: $ git annotate README
  28. 28. Немного уличной магии Переписываем историю в духе сталинизма $ git filter-branch --tree-filter 'rm secretfile' HEAD Обучаем git игре в карты $ git rerere Стопитсотый раз тебе говорю $ git submodule foreach 'git pull || :'
  29. 29. Когда же все пошло не так? только что обнаружили, что функционал не работает, но вы совершенно отчетливо помните, что он работал всего несколько месяцев назад $ git bisect start $ git bisect bad HEAD $ git bisect good 1b6d для полного счастья $ git bisect reset
  30. 30. Много букаф, неасилил $ 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
  31. 31. Вопросы
  32. 32. FIN
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×