SlideShare a Scribd company logo
Git のワークフローと
アクティビティ
Yasuhiro Asaka
@grauwoelfchen
自己紹介
git init
Yasuhiro Asaka
@grauwoelfchen
grauwoelfchen@gmail.com
Funtoo Linux, StumpWM, Dvorak, Ruby
小松菜、じゃがいも、えんどうまめ
アジェンダ
git branch -a
● Git の ワークフロー
● アクティビティとグラフ
● ブランチ
● タイムライン
● まとめ
Git のワークフロー
git push
CC By 3.0 (original license)
中央集権型
CC By 3.0 (original license)
統合マネージャ型
CC By 3.0 (original licence)
監督と補佐型
git-flow
A successful Git branching model
分散かつ中央集権型のワークフロー
● master
● develop
● features-*
● hotfix-*
● releases-*
CC BY-SA (original licence)
● 開発中のメインブランチ develop
● --no-ff でマージして、ブランチで開発されたこ
とという情報を残す
● develop から分岐して作成、使い終わったら
削除される、機能追加のための features ブラ
ンチ
● develop から分岐して作成される製品リリース
のための releases ブランチ
● release ブランチからはリリースのためにした
変更を最後に master と develop にマージさ
れる
● hotfix は develop と master の計画的でない
変更や修正のために作成されるブランチ これ
も最後に master と develop にマージされる
GitHub Flow
Issues with git-flow
● master はいつもすぐにデプロイ可能
● 新しい作業を始めるときは、説明的な名前でブランチをmaster から作成する
● ローカル上で作成したブランチにコミットし、サーバーの同じ名前のブランチへも
作業内容を 定期的に push する
● フィードバックや助言が欲しい時、ブランチをマージしてほしいと思ったときは、
Pull Request を作成する
● 他の誰かがレビューをして機能に OK を出してくれたら、コードをmasterへマー
ジすることができる
● マージして maste rへ push したらデプロイする
github / github-services
GitHub Flow in the Browser
July 11, 2013
Tidying up after Pull Requests
Dec 3, 2012
アクティビティとグラフ
メンバーの活動をみる
GitHub
Get up to speed with Pulse
April 18, 2013
GitHub
Gitlab GitLab 5.3 Released
Jun. 20th. 2013
Gitstats GitStats - git history statistics generator
ブランチ
git show-branch
GitHub Check the status of your branches
(April 26, 2013)
つくってみた
git for-each ref & git rev-list
% 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 %sn" "$branch" "(behind $behind)" "(ahead $ahead)"
"remotes/${remote}/master"
done
}
# }}}
% 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
% 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
タイムライン
GitHub
Gitlab
Bitbucket
つくってみた
update hook
% 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
% 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"]]
ありがとうございました

More Related Content

What's hot

20220412 IoTLT vol86 kitazaki v1
20220412 IoTLT vol86 kitazaki v120220412 IoTLT vol86 kitazaki v1
20220412 IoTLT vol86 kitazaki v1
Ayachika Kitazaki
 
Archive: Git 入門(2014/1/10 社内勉強会)
Archive: Git 入門(2014/1/10 社内勉強会)Archive: Git 入門(2014/1/10 社内勉強会)
Archive: Git 入門(2014/1/10 社内勉強会)
Yoko TAMADA
 
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
Mitsutoshi Nakano
 
Gitの使い方あれこれ
Gitの使い方あれこれGitの使い方あれこれ
Gitの使い方あれこれ
よしだ あつし
 
「やっちまったぁ!」を防ごう!
「やっちまったぁ!」を防ごう!「やっちまったぁ!」を防ごう!
「やっちまったぁ!」を防ごう!博文 斉藤
 
Ruby - gnuplot on Mac
Ruby - gnuplot on MacRuby - gnuplot on Mac
Ruby - gnuplot on Mac
gotohayato
 
Git 勉強会
Git 勉強会Git 勉強会
Git 勉強会
kinme modoki
 
Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)Teloo
 
15分でわかるGit入門
15分でわかるGit入門15分でわかるGit入門
15分でわかるGit入門
to_ueda
 
Casperjsのインストール
CasperjsのインストールCasperjsのインストール
Casperjsのインストール
Kohei Misu
 
さくらのクラウドAPIをsacloudつかってさわってみた
さくらのクラウドAPIをsacloudつかってさわってみたさくらのクラウドAPIをsacloudつかってさわってみた
さくらのクラウドAPIをsacloudつかってさわってみた
Tak Nishikori
 
2018 07-18 git-hub講座
2018 07-18 git-hub講座2018 07-18 git-hub講座
2018 07-18 git-hub講座
貴一 末田
 
Wiki設置するならgitit!
Wiki設置するならgitit!Wiki設置するならgitit!
Wiki設置するならgitit!
Kiwamu Okabe
 
Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話
yaegashi
 
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料
博文 斉藤
 
勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る
勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る
勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る
Kenichiro MATOHARA
 
Gitとちょっと仲良くなるために覚えたことまとめ
Gitとちょっと仲良くなるために覚えたことまとめGitとちょっと仲良くなるために覚えたことまとめ
Gitとちょっと仲良くなるために覚えたことまとめ
Natsumi Kashiwa
 
電子工作のためのPython
電子工作のためのPython 電子工作のためのPython
電子工作のためのPython
Takuya Nishimoto
 
長いの
長いの長いの
長いのemasaka
 

What's hot (20)

20220412 IoTLT vol86 kitazaki v1
20220412 IoTLT vol86 kitazaki v120220412 IoTLT vol86 kitazaki v1
20220412 IoTLT vol86 kitazaki v1
 
Archive: Git 入門(2014/1/10 社内勉強会)
Archive: Git 入門(2014/1/10 社内勉強会)Archive: Git 入門(2014/1/10 社内勉強会)
Archive: Git 入門(2014/1/10 社内勉強会)
 
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
 
Gitの使い方あれこれ
Gitの使い方あれこれGitの使い方あれこれ
Gitの使い方あれこれ
 
「やっちまったぁ!」を防ごう!
「やっちまったぁ!」を防ごう!「やっちまったぁ!」を防ごう!
「やっちまったぁ!」を防ごう!
 
Ruby - gnuplot on Mac
Ruby - gnuplot on MacRuby - gnuplot on Mac
Ruby - gnuplot on Mac
 
Git 勉強会
Git 勉強会Git 勉強会
Git 勉強会
 
Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)Gitを理解するためにおさえておきたい3つの図(工事中)
Gitを理解するためにおさえておきたい3つの図(工事中)
 
15分でわかるGit入門
15分でわかるGit入門15分でわかるGit入門
15分でわかるGit入門
 
Casperjsのインストール
CasperjsのインストールCasperjsのインストール
Casperjsのインストール
 
さくらのクラウドAPIをsacloudつかってさわってみた
さくらのクラウドAPIをsacloudつかってさわってみたさくらのクラウドAPIをsacloudつかってさわってみた
さくらのクラウドAPIをsacloudつかってさわってみた
 
Git (実践入門編)
Git (実践入門編)Git (実践入門編)
Git (実践入門編)
 
2018 07-18 git-hub講座
2018 07-18 git-hub講座2018 07-18 git-hub講座
2018 07-18 git-hub講座
 
Wiki設置するならgitit!
Wiki設置するならgitit!Wiki設置するならgitit!
Wiki設置するならgitit!
 
Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話
 
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料
 
勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る
勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る
勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る
 
Gitとちょっと仲良くなるために覚えたことまとめ
Gitとちょっと仲良くなるために覚えたことまとめGitとちょっと仲良くなるために覚えたことまとめ
Gitとちょっと仲良くなるために覚えたことまとめ
 
電子工作のためのPython
電子工作のためのPython 電子工作のためのPython
電子工作のためのPython
 
長いの
長いの長いの
長いの
 

Similar to JTF 2013

StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件
yaegashi
 
Osc10do linux nextstep
Osc10do linux nextstepOsc10do linux nextstep
Osc10do linux nextstepsmokey monkey
 
Version Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアルVersion Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアル
Computational Materials Science Initiative
 
git ~start PullRequest~
git ~start PullRequest~git ~start PullRequest~
git ~start PullRequest~
Souichirou Andou
 
Build insider offline session チームでのgit
Build insider offline session チームでのgitBuild insider offline session チームでのgit
Build insider offline session チームでのgit
Tadahiro Ishisaka
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!Yohei Fushii
 
MINCS – containers in the shell script
MINCS – containers in the shell scriptMINCS – containers in the shell script
MINCS – containers in the shell script
Masami Hiramatsu
 
Git pyfes201207-presen
Git pyfes201207-presenGit pyfes201207-presen
Git pyfes201207-presenKouhei Maeda
 
About GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginnersAbout GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginners
Shota TAMURA
 
Gitの紹介
Gitの紹介Gitの紹介
Gitの紹介
Shoot Morii
 
バージョン管理システムチュートリアル
バージョン管理システムチュートリアルバージョン管理システムチュートリアル
バージョン管理システムチュートリアル
Ryo Igarashi
 
Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!
ymmt
 
WindowsでGitを使う際のベストプラクティス
WindowsでGitを使う際のベストプラクティスWindowsでGitを使う際のベストプラクティス
WindowsでGitを使う際のベストプラクティス
Ryo Sumasu
 
Android デバッグ小ネタ
Android デバッグ小ネタAndroid デバッグ小ネタ
Android デバッグ小ネタ
l_b__
 
Microsoft Graph API Library for Go
Microsoft Graph API Library for GoMicrosoft Graph API Library for Go
Microsoft Graph API Library for Go
yaegashi
 
Metahub for github
Metahub for githubMetahub for github
Metahub for github
Suguru Oho
 
Gitを使ってみませんか
Gitを使ってみませんかGitを使ってみませんか
Gitを使ってみませんか
Atsuhiro Takiguchi
 
とある受託ベンダの開発環境
とある受託ベンダの開発環境とある受託ベンダの開発環境
とある受託ベンダの開発環境
Tomoki Hasegawa
 

Similar to JTF 2013 (20)

StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件
 
Osc10do linux nextstep
Osc10do linux nextstepOsc10do linux nextstep
Osc10do linux nextstep
 
Version Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアルVersion Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアル
 
Git (運用編)
Git (運用編)Git (運用編)
Git (運用編)
 
git ~start PullRequest~
git ~start PullRequest~git ~start PullRequest~
git ~start PullRequest~
 
Build insider offline session チームでのgit
Build insider offline session チームでのgitBuild insider offline session チームでのgit
Build insider offline session チームでのgit
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
 
MINCS – containers in the shell script
MINCS – containers in the shell scriptMINCS – containers in the shell script
MINCS – containers in the shell script
 
Git pyfes201207-presen
Git pyfes201207-presenGit pyfes201207-presen
Git pyfes201207-presen
 
About GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginnersAbout GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginners
 
Gitの紹介
Gitの紹介Gitの紹介
Gitの紹介
 
バージョン管理システムチュートリアル
バージョン管理システムチュートリアルバージョン管理システムチュートリアル
バージョン管理システムチュートリアル
 
Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!
 
WindowsでGitを使う際のベストプラクティス
WindowsでGitを使う際のベストプラクティスWindowsでGitを使う際のベストプラクティス
WindowsでGitを使う際のベストプラクティス
 
Android デバッグ小ネタ
Android デバッグ小ネタAndroid デバッグ小ネタ
Android デバッグ小ネタ
 
Git勉強会
Git勉強会Git勉強会
Git勉強会
 
Microsoft Graph API Library for Go
Microsoft Graph API Library for GoMicrosoft Graph API Library for Go
Microsoft Graph API Library for Go
 
Metahub for github
Metahub for githubMetahub for github
Metahub for github
 
Gitを使ってみませんか
Gitを使ってみませんかGitを使ってみませんか
Gitを使ってみませんか
 
とある受託ベンダの開発環境
とある受託ベンダの開発環境とある受託ベンダの開発環境
とある受託ベンダの開発環境
 

Recently uploaded

シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Eventシグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
K Kinzal
 
RayPen Product Description Documentation - 2024.6.19
RayPen Product Description Documentation - 2024.6.19RayPen Product Description Documentation - 2024.6.19
RayPen Product Description Documentation - 2024.6.19
GrapeCity, inc.
 
RayBarcode Product Description Documentation - 2024.6.19
RayBarcode Product Description Documentation - 2024.6.19RayBarcode Product Description Documentation - 2024.6.19
RayBarcode Product Description Documentation - 2024.6.19
GrapeCity, inc.
 
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer EventSolanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
K Kinzal
 
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdfクラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
TatsuyaHanayama
 
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet DocumentationRaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
GrapeCity, inc.
 
RaySheet Product Description Documentation - 2024.6.19
RaySheet Product Description Documentation - 2024.6.19RaySheet Product Description Documentation - 2024.6.19
RaySheet Product Description Documentation - 2024.6.19
GrapeCity, inc.
 
Bhyve Management Daemon Version 3.0 on FreBSD
Bhyve Management Daemon Version 3.0 on FreBSDBhyve Management Daemon Version 3.0 on FreBSD
Bhyve Management Daemon Version 3.0 on FreBSD
Yuichiro Naito
 

Recently uploaded (8)

シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Eventシグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
 
RayPen Product Description Documentation - 2024.6.19
RayPen Product Description Documentation - 2024.6.19RayPen Product Description Documentation - 2024.6.19
RayPen Product Description Documentation - 2024.6.19
 
RayBarcode Product Description Documentation - 2024.6.19
RayBarcode Product Description Documentation - 2024.6.19RayBarcode Product Description Documentation - 2024.6.19
RayBarcode Product Description Documentation - 2024.6.19
 
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer EventSolanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
 
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdfクラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
 
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet DocumentationRaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
 
RaySheet Product Description Documentation - 2024.6.19
RaySheet Product Description Documentation - 2024.6.19RaySheet Product Description Documentation - 2024.6.19
RaySheet Product Description Documentation - 2024.6.19
 
Bhyve Management Daemon Version 3.0 on FreBSD
Bhyve Management Daemon Version 3.0 on FreBSDBhyve Management Daemon Version 3.0 on FreBSD
Bhyve Management Daemon Version 3.0 on FreBSD
 

JTF 2013

  • 3. Yasuhiro Asaka @grauwoelfchen grauwoelfchen@gmail.com Funtoo Linux, StumpWM, Dvorak, Ruby 小松菜、じゃがいも、えんどうまめ
  • 5. ● Git の ワークフロー ● アクティビティとグラフ ● ブランチ ● タイムライン ● まとめ
  • 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
  • 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 にマージされる
  • 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
  • 19. GitHub Get up to speed with Pulse April 18, 2013
  • 21. Gitlab GitLab 5.3 Released Jun. 20th. 2013
  • 22. Gitstats GitStats - git history statistics generator
  • 24. GitHub Check the status of your branches (April 26, 2013)
  • 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 %sn" "$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
  • 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"]]