Git workflow and activity

Git workflow and activity

Git のワークフローを紹介して、チームの状態やメンバーのアクティビティを把握するための方法やツールを発表した。
Git のリポジトリから取得できる情報を使ってブランチ毎の状態を把握するコマンドを作って紹介した。
dRuby と daemontools を使い、分散オブジェクトのサーバとクライアントを作り、update フックを介して、リジトリには直接は含まれないブランチとタグの操作を追記していく簡単なタイムラインツールを作り、使い方を発表した。

# スライド中のリンク

* http://nvie.com/posts/a-successful-git-branching-model/
* http://scottchacon.com/2011/08/31/github-flow.html
* https://github.com/blog/1557-github-flow-in-the-browser
* https://github.com/blog/1335-tidying-up-after-pull-requests
* https://github.com/blog/1476-get-up-to-speed-with-pulse
* http://blog.gitlab.org/gitlab-5-dot-3-released/
* http://gitstats.sourceforge.net/
* https://github.com/blog/1484-check-the-status-of-your-branches
* https://github.com/grauwoelfchen/timeline

3ccdb90bb443152e41221b4a2c5c65b7?s=128

Yasuhiro Asaka

July 14, 2013
Tweet

Transcript

  1. Git のワークフローと アクティビティ Yasuhiro Asaka @grauwoelfchen

  2. 自己紹介 git init

  3. Yasuhiro Asaka @grauwoelfchen grauwoelfchen@gmail.com Funtoo Linux, StumpWM, Dvorak, Ruby 小松菜、じゃがいも、えんどうまめ

  4. アジェンダ git branch -a

  5. • Git の ワークフロー • アクティビティとグラフ • ブランチ • タイムライン

    • まとめ
  6. Git のワークフロー git push

  7. CC By 3.0 (original license) 中央集権型

  8. CC By 3.0 (original license) 統合マネージャ型

  9. CC By 3.0 (original licence) 監督と補佐型

  10. git-flow A successful Git branching model

  11. 分散かつ中央集権型のワークフロー

  12. • master • develop • features-* • hotfix-* • releases-*

    CC BY-SA (original licence)
  13. • 開発中のメインブランチ develop • --no-ff でマージして、ブランチで開発されたこ とという情報を残す • develop から分岐して作成、使い終わったら

    削除される、機能追加のための features ブラ ンチ • develop から分岐して作成される製品リリース のための releases ブランチ • release ブランチからはリリースのためにした 変更を最後に master と develop にマージさ れる • hotfix は develop と master の計画的でない 変更や修正のために作成されるブランチ これ も最後に master と develop にマージされる
  14. GitHub Flow Issues with git-flow

  15. • master はいつもすぐにデプロイ可能 • 新しい作業を始めるときは、説明的な名前でブランチをmaster から作成する • ローカル上で作成したブランチにコミットし、サーバーの同じ名前のブランチへも 作業内容を 定期的に

    push する • フィードバックや助言が欲しい時、ブランチをマージしてほしいと思ったときは、 Pull Request を作成する • 他の誰かがレビューをして機能に OK を出してくれたら、コードをmasterへマー ジすることができる • マージして maste rへ push したらデプロイする github / github-services
  16. GitHub Flow in the Browser July 11, 2013

  17. Tidying up after Pull Requests Dec 3, 2012

  18. アクティビティとグラフ メンバーの活動をみる

  19. GitHub Get up to speed with Pulse April 18, 2013

  20. GitHub

  21. Gitlab GitLab 5.3 Released Jun. 20th. 2013

  22. Gitstats GitStats - git history statistics generator

  23. ブランチ git show-branch

  24. GitHub Check the status of your branches (April 26, 2013)

  25. つくってみた git for-each ref & git rev-list

  26. % cat ~/.zshrc ### commands - experiment {{{ function stats-branch()

    { local branch remote ahead behind if [[ -n $1 ]]; then remote=$1 else remote="upstrm" fi git for-each-ref --format="%(refname:short)" refs/heads refs/remotes | \ while read branch do ahead=`git rev-list remotes/"${remote}"/master..${branch} --count 2>/dev/null` behind=`git rev-list ${branch}..remotes/"${remote}"/master --count 2>/dev/null` printf "%-30s %16s | %-15s %s\n" "$branch" "(behind $behind)" "(ahead $ahead)" "remotes/${remote}/master" done } # }}}
  27. % stats-branch origin master (behind 0) | (ahead 1) remotes/origin/master

    stumpish-notifier (behind 0) | (ahead 1) remotes/origin/master origin/HEAD (behind 0) | (ahead 0) remotes/origin/master origin/master (behind 0) | (ahead 0) remotes/origin/master origin/stumpish-notifier (behind 0) | (ahead 1) remotes/origin/master origin/v2.0 (behind 16) | (ahead 1) remotes/origin/master origin/v2.0_refactorings (behind 16) | (ahead 35) remotes/origin/master upstrm/gh-pages (behind 1519) | (ahead 3) remotes/origin/master upstrm/master (behind 0) | (ahead 5) remotes/origin/master upstrm/v2.0 (behind 16) | (ahead 1) remotes/origin/master upstrm/v2.0_refactorings (behind 16) | (ahead 46) remotes/origin/master
  28. % cat ~/.gitconfig ... [alias] ... ls-branch = "!(for i

    in `git branch -a | colrm 1 2 | awk '{print $1}'` ; do echo `git log --date=iso8601 -n 1 --pretty='format:[%ai] %h' $i` $i ; done) | sort -r " % git ls-branch [2013-06-17 11:33:59 +0200] 67be380 remotes/upstrm/master [2013-06-14 08:10:03 -0700] b99ccc2 remotes/upstrm/v2.0_refactorings [2013-06-10 14:12:26 +0200] 1aa6fdf remotes/upstrm/gh-pages [2013-06-06 16:12:40 +0900] 48566d4 stumpish-notifier [2013-06-06 16:12:40 +0900] 48566d4 remotes/origin/stumpish-notifier [2013-06-06 16:12:40 +0900] 48566d4 master [2013-05-31 00:13:17 -0700] 6363368 remotes/origin/master [2013-05-31 00:13:17 -0700] 6363368 remotes/origin/HEAD [2013-05-22 01:27:14 +0200] fdbb652 remotes/origin/v2.0_refactorings [2013-04-20 22:54:57 +0200] 31a4956 remotes/upstrm/v2.0 [2013-04-20 22:54:57 +0200] 31a4956 remotes/origin/v2.0
  29. タイムライン

  30. GitHub

  31. Gitlab

  32. Bitbucket

  33. つくってみた update hook

  34. % cat client.rb require "drip" user,action,target,name,date = ARGV MyDrip =

    DRbObject.new_with_uri("druby://localhost:54321") MyDrip.write([action, target, name, date], user) % cat server.rb require 'drip' require 'drb' drip = Drip.new(".drb") DRb.start_service("druby://localhost:54321", drip) DRb.thread.join % git clone https://github.com/grauwoelfchen/timeline.git
  35. % pry [1] pry(main)> require 'drb' => true [2] pry(main)>

    MyDrip = DRbObject.new_with_uri("druby://localhost:54321") => #<DRb::DRbObject:0x000000026b3008 @ref=nil, @uri="druby://localhost:54321"> [3] pry(main)> MyDrip.read(0, 2) #=> Queue 構造になっていて `head` メソッドも便利 ;) => [[1373569317719130, ["create", "branch", "master", "e64c41f63586a0020552dc0ba07a1d25f1e309b9", "timeline.git", "Fri Jul 12 04:01:57 JST 2013"], "yasuhiro"], [1373569650654906, ["create", "branch", "create-server-script", "ecd0afee973ce623b873e0a31b6988d69d50bcb9", "timeline.git", "Fri Jul 12 04:07:30 JST 2013"], "yasuhiro"]]
  36. ありがとうございました