Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

自己紹介 git init

Slide 3

Slide 3 text

Yasuhiro Asaka @grauwoelfchen [email protected] Funtoo Linux, StumpWM, Dvorak, Ruby 小松菜、じゃがいも、えんどうまめ

Slide 4

Slide 4 text

アジェンダ git branch -a

Slide 5

Slide 5 text

● Git の ワークフロー ● アクティビティとグラフ ● ブランチ ● タイムライン ● まとめ

Slide 6

Slide 6 text

Git のワークフロー git push

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

git-flow A successful Git branching model

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

● master ● develop ● features-* ● hotfix-* ● releases-* CC BY-SA (original licence)

Slide 13

Slide 13 text

● 開発中のメインブランチ develop ● --no-ff でマージして、ブランチで開発されたこ とという情報を残す ● develop から分岐して作成、使い終わったら 削除される、機能追加のための features ブラ ンチ ● develop から分岐して作成される製品リリース のための releases ブランチ ● release ブランチからはリリースのためにした 変更を最後に master と develop にマージさ れる ● hotfix は develop と master の計画的でない 変更や修正のために作成されるブランチ これ も最後に master と develop にマージされる

Slide 14

Slide 14 text

GitHub Flow Issues with git-flow

Slide 15

Slide 15 text

● master はいつもすぐにデプロイ可能 ● 新しい作業を始めるときは、説明的な名前でブランチをmaster から作成する ● ローカル上で作成したブランチにコミットし、サーバーの同じ名前のブランチへも 作業内容を 定期的に push する ● フィードバックや助言が欲しい時、ブランチをマージしてほしいと思ったときは、 Pull Request を作成する ● 他の誰かがレビューをして機能に OK を出してくれたら、コードをmasterへマー ジすることができる ● マージして maste rへ push したらデプロイする github / github-services

Slide 16

Slide 16 text

GitHub Flow in the Browser July 11, 2013

Slide 17

Slide 17 text

Tidying up after Pull Requests Dec 3, 2012

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

GitHub Get up to speed with Pulse April 18, 2013

Slide 20

Slide 20 text

GitHub

Slide 21

Slide 21 text

Gitlab GitLab 5.3 Released Jun. 20th. 2013

Slide 22

Slide 22 text

Gitstats GitStats - git history statistics generator

Slide 23

Slide 23 text

ブランチ git show-branch

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

% 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 } # }}}

Slide 27

Slide 27 text

% 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

Slide 28

Slide 28 text

% 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

Slide 29

Slide 29 text

タイムライン

Slide 30

Slide 30 text

GitHub

Slide 31

Slide 31 text

Gitlab

Slide 32

Slide 32 text

Bitbucket

Slide 33

Slide 33 text

つくってみた update hook

Slide 34

Slide 34 text

% 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

Slide 35

Slide 35 text

% pry [1] pry(main)> require 'drb' => true [2] pry(main)> MyDrip = DRbObject.new_with_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"]]

Slide 36

Slide 36 text

ありがとうございました