2. Ага, вот эти ребята Михаил Каморников Александр Татульченков Пропагандист и популяризатор php-джихада и медоед-стайл кодинга. Пишет SQL во вьюхах и несет $GLOBALS в массы. Не “тот самый Маршал” из сериала. Особо опасен в связке с Symfony 2.
4. Недостатки? - слабости sha1 - git на windows - несвязанные файлы - кто и что редактировал? - история файла - начальное клонирование - изменчивые проекты - глобальный счетчик (svn style) - пустые подкаталоги - первоначальный коммит - причуды интерфейса (a..b, a...b)
5. Явные плюсы? - всегда с кодом - “--interactive” режим в командах - возможность синхронизации с subversion, mercurial [, cvs )) ] - man всегда под рукой - формат репозитория дружелюбен к rsync, обычному HTTP и backup’ам - можно писать свои скрипты
6. “ D” в DVCS - каждому по репозиторию - write access нужно заслужить
9. Как устроено у нас - я ставлю задачу разработчику - разработчик создает бранч от актуального бранча из главного репозитория - в этом бранче разработчик решает поставленную задачу - бранч с выполненной задачей разработчик отправляет в свой рабочий репозиторий - я беру из рабочего репозитория этот бранч и проверяю его - если задача выполнена правильно, я сливаю этот бранч с актуальным бранчем
13. Пусть git работает за меня - стоит посмотреть git flow - есть утилита лучше git-овской - заставьте git работать через нее - надоела рутина – пишем скрипты на все случаи жизни - не забываем про хуки
17. Добавляем aliases .gitconfig [alias] st = status ci = commit br = branch co = checkout df = diff lg = log -p git config --global alias.rb rebase
18. Я имел в виду совсем не это... :-) Ошиблись в комменте $ git commit --amend Ой, еще и файл добавить забыли $ git commit --amend -a Если все в 10 раз хуже $ git rebase -i HEAD~10
19. Вон там направо и за угол $ git checkout 1b6d^^2~10 -b ancient $ git log HEAD^2 $ git diff HEAD^
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. Все секреты по карманам, я гуляю с доберманом $ git stash $ git stash list $ git stash show $ git stash apply $ git stash drop $ git stash pop $ git stash clear
27. А оно само сломалось ! $ git blame README $ git gui blame README Можно указать и конкретные строки для отображения: $ git blame -L 2,+3 README Вывести строки и информацию о коммитах, их коснувшихся: $ git annotate README
28. Немного уличной магии Переписываем историю в духе сталинизма $ git filter-branch --tree-filter 'rm secretfile' HEAD Обучаем git игре в карты $ git rerere Стопитсотый раз тебе говорю $ git submodule foreach 'git pull || :'
29. Когда же все пошло не так? только что обнаружили, что функционал не работает, но вы совершенно отчетливо помните, что он работал всего несколько месяцев назад $ git bisect start $ git bisect bad HEAD $ git bisect good 1b6d для полного счастья $ git bisect reset
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