git-svn intro
DESCRIPTION
git-svn introTRANSCRIPT
git-svn intro
Kenichirou Oyama (k1LoW)
DistributedHoge 2
• type:– Programmer (PHPer)
• Emacs Level:– Enjoy Emacs Lisp
• Products:– cake.el– drill-instructor.el(鬼軍曹.el)– tokyotyrant_php– and more.
• membership:– Fusic Co.,Ltd >> http://fusic.co.jp
– codecheck.in >> http://trac.codecheck.inand 101000code / 3rdSTONE
(self-introduce "k1LoW")
DistributedHoge 3
What is git-svn?
DistributedHoge 4
What is git-svn?
• GitリポジトリとSVNリポジトリを同期するためのもの
• GitとSVNの利点を享受することができる
DistributedHoge 5
SVN• 基本は1つのリポジトリ• リポジトリからcheckoutしたワーキングコピーで作業
をする– ワーキングコピーはあくまで作業用
• →[edit]→commit→update→[edit]→• 利点:リポジトリが1つなのでソースの作業履歴が1つに
集まる– きっちり集中管理しないといけないときに仕様上そうなってい
るので何も考えなくてよい• 欠点:commitは1つしかないリポジトリにしかできない
– commit権限を持たない人は作業履歴をそのSVN管理化では残すこと(commitすること)ができない→patch?
DistributedHoge 6
SVN
svn co
svn ci
svn up
svnリポジトリ
ワーキングコピー
DistributedHoge 7
Git• 基本は分散した複数のリポジトリ• リポジトリからcloneしたリポジトリで作業をする
– cloneされたリポジトリもcloneしたリポジトリもリポジトリ• →[edit]→commit→push→pull→[edit]→• 利点:それぞれがリポジトリを持つのでそれぞれか作業
履歴を残す(commitする)ことができる– みんな平等。分散。– ネットワークが切れていてもcommitできる。
• 欠点:(プロジェクトの性質によっては)どれがマスターのリポジトリかわからなくなると困る– 運用ルールが大事。
DistributedHoge 8
Git
Gitリポジトリ
git clonegit pushgit pull
Gitリポジトリ
Gitリポジトリ
git commit
DistributedHoge 9
SVNでのワークフローある開発者のかつての日常
DistributedHoge 10
SVNでのワークフロー1. ある開発プロジェクトに参加することになっ
たのでsvnリポジトリを作成→メンバーに知らせる
• trunkとbranchesとtagsはディレクトリ分けしておく
2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up
DistributedHoge 11
SVNでのワークフロー1. ある開発プロジェクトに参加することになっ
たのでsvnリポジトリを作成→メンバーに知らせる
• trunkとbranchesとtagsはディレクトリ分けしておく
2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up
DistributedHoge 12
SVNでのワークフロー1. ある開発プロジェクトに参加することになっ
たのでsvnリポジトリを作成→メンバーに知らせる
• trunkとbranchesとtagsはディレクトリ分けしておく
2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up
DistributedHoge 13
SVNでのワークフロー1. ある開発プロジェクトに参加することになっ
たのでsvnリポジトリを作成→メンバーに知らせる
• trunkとbranchesとtagsはディレクトリ分けしておく
2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up
DistributedHoge 14
SVNでのワークフロー1. ある開発プロジェクトに参加することになっ
たのでsvnリポジトリを作成→メンバーに知らせる
• trunkとbranchesとtagsはディレクトリ分けしておく
2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up
DistributedHoge 15
SVNでのワークフロー1. ある開発プロジェクトに参加することになっ
たのでsvnリポジトリを作成→メンバーに知らせる
• trunkとbranchesとtagsはディレクトリ分けしておく
2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up
DistributedHoge 16
SVNでのワークフロー1. ある開発プロジェクトに参加することになっ
たのでsvnリポジトリを作成→メンバーに知らせる
• trunkとbranchesとtagsはディレクトリ分けしておく
2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up
DistributedHoge 17
SVNでのワークフロー8. svn ci9. なんかバージョン的に残しておく必要があり
そうだからtagsにフォルダを作成してファイルをコピー
10. svn ci11. commit頻度が細かすぎてコミットログを汚
染する12. commit頻度を下げてまとめていたら、動かな
くなって仕方なくリビジョン戻そうにもネットワークの調子が悪くて作業停止。
13. branchつくってtrunkにmerge?怖いからやらない。
DistributedHoge 18
SVNでのワークフロー8. svn ci9. なんかバージョン的に残しておく必要があり
そうだからtagsにフォルダを作成してファイルをコピー
10. svn ci11. commit頻度が細かすぎてコミットログを汚
染する12. commit頻度を下げてまとめていたら、動かな
くなって仕方なくリビジョン戻そうにもネットワークの調子が悪くて作業停止。
13. branchつくってtrunkにmerge?怖いからやらない。
DistributedHoge 19
SVNでのワークフロー8. svn ci9. なんかバージョン的に残しておく必要があり
そうだからtagsにフォルダを作成してファイルをコピー
10. svn ci11. commit頻度が細かすぎてコミットログを汚
染する12. commit頻度を下げてまとめていたら、動かな
くなって仕方なくリビジョン戻そうにもネットワークの調子が悪くて作業停止。
13. branchつくってtrunkにmerge?怖いからやらない。
DistributedHoge 20
SVNでのワークフロー8. svn ci9. なんかバージョン的に残しておく必要があり
そうだからtagsにフォルダを作成してファイルをコピー
10. svn ci11. commit頻度が細かすぎてコミットログを汚
染する12. commit頻度を下げてまとめていたら、動かな
くなって仕方なくリビジョン戻そうにもネットワークの調子が悪くて作業停止。
13. branchつくってtrunkにmerge?怖いからやらない。
DistributedHoge 21
SVNでのワークフロー8. svn ci9. なんかバージョン的に残しておく必要があり
そうだからtagsにフォルダを作成してファイルをコピー
10. svn ci11. commit頻度が細かすぎてコミットログを汚
染する12. commit頻度を下げてまとめていたら、動かな
くなって仕方なくリビジョン戻そうにもネットワークの調子が悪くて作業停止。
13. branchつくってtrunkにmerge?怖いからやらない。
DistributedHoge 22
SVNでのワークフロー8. svn ci9. なんかバージョン的に残しておく必要があり
そうだからtagsにフォルダを作成してファイルをコピー
10. svn ci11. commit頻度が細かすぎてコミットログを汚
染する12. commit頻度を下げてまとめていたら、動かな
くなって仕方なくリビジョン戻そうにもネットワークの調子が悪くて作業停止。
13. branchつくってtrunkにmerge?怖いからやらない。
DistributedHoge 23
githubでのワークフローtokyotyrant_php開発日常
DistributedHoge 24
What is github?• http://github.com• Gitのプロジェクトホスティングサー
ビス–CodeReposやcodecheck.inみたいなもの
• Gitの分散性を利用したソーシャルな側面があることが特徴–分散リポジトリならでは–followとかwatchとか
DistributedHoge 25
githubでのワークフロー1. githubでリポジトリ作成
• trunk?branches?tags?なにそれ2. githubのリモートリポジトリからclone
• git clone [email protected]:k1LoW/tokyotyrant_php.git
3. テーマを決めてbranchを作成• git branch rdb• git checkout rdb
4. 編集5. git commit6. 編集7. git commit
DistributedHoge 26
githubでのワークフロー1. githubでリポジトリ作成
• trunk?branches?tags?なにそれ2. githubのリモートリポジトリからclone
• git clone [email protected]:k1LoW/tokyotyrant_php.git
3. テーマを決めてbranchを作成• git branch rdb• git checkout rdb
4. 編集5. git commit6. 編集7. git commit
DistributedHoge 27
githubでのワークフロー1. githubでリポジトリ作成
• trunk?branches?tags?なにそれ2. githubのリモートリポジトリからclone
• git clone [email protected]:k1LoW/tokyotyrant_php.git
3. テーマを決めてbranchを作成• git branch rdb• git checkout rdb
4. 編集5. git commit6. 編集7. git commit
DistributedHoge 28
githubでのワークフロー1. githubでリポジトリ作成
• trunk?branches?tags?なにそれ2. githubのリモートリポジトリからclone
• git clone [email protected]:k1LoW/tokyotyrant_php.git
3. テーマを決めてbranchを作成• git branch rdb• git checkout rdb
4. 編集5. git commit6. 編集7. git commit
DistributedHoge 29
githubでのワークフロー1. githubでリポジトリ作成
• trunk?branches?tags?なにそれ2. githubのリモートリポジトリからclone
• git clone [email protected]:k1LoW/tokyotyrant_php.git
3. テーマを決めてbranchを作成• git branch rdb• git checkout rdb
4. 編集5. git commit6. 編集7. git commit
DistributedHoge 30
githubでのワークフロー1. githubでリポジトリ作成
• trunk?branches?tags?なにそれ2. githubのリモートリポジトリからclone
• git clone [email protected]:k1LoW/tokyotyrant_php.git
3. テーマを決めてbranchを作成• git branch rdb• git checkout rdb
4. 編集5. git commit6. 編集7. git commit
DistributedHoge 31
githubでのワークフロー1. githubでリポジトリ作成
• trunk?branches?tags?なにそれ2. githubのリモートリポジトリからclone
• git clone [email protected]:k1LoW/tokyotyrant_php.git
3. テーマを決めてbranchを作成• git branch rdb• git checkout rdb
4. 編集5. git commit6. 編集7. git commit
DistributedHoge 32
githubでのワークフロー8. いい感じになったのでローカルのマスターリポジト
リにまとめてmerge• git checkout master• git merge –squash rdb• git commit
9. リモートリポジトリにpush• git push origin
10. バージョン的にいい感じなのでtagをつけとく• git tag 0.1• git push –tags 0.1
11. ノリでbranchを作成• git branch qry_bug• git checkout qry_bug
DistributedHoge 33
githubでのワークフロー8. いい感じになったのでローカルのマスターリポジト
リにまとめてmerge• git checkout master• git merge –squash rdb• git commit
9. リモートリポジトリにpush• git push origin
10. バージョン的にいい感じなのでtagをつけとく• git tag 0.1• git push –tags 0.1
11. ノリでbranchを作成• git branch qry_bug• git checkout qry_bug
DistributedHoge 34
githubでのワークフロー8. いい感じになったのでローカルのマスターリポジト
リにまとめてmerge• git checkout master• git merge –squash rdb• git commit
9. リモートリポジトリにpush• git push origin
10. バージョン的にいい感じなのでtagをつけとく• git tag 0.1• git push –tags 0.1
11. ノリでbranchを作成• git branch qry_bug• git checkout qry_bug
DistributedHoge 35
githubでのワークフロー8. いい感じになったのでローカルのマスターリポジト
リにまとめてmerge• git checkout master• git merge –squash rdb• git commit
9. リモートリポジトリにpush• git push origin
10. バージョン的にいい感じなのでtagをつけとく• git tag 0.1• git push –tags 0.1
11. ノリでbranchを作成• git branch qry_bug• git checkout qry_bug
DistributedHoge 36
githubでのワークフロー12. commit頻度がさらに細かくなる。13. なんか動かなくなって仕方なく戻す。という
ことでbranch自体を捨てる。– git checkout master
14. ネットワークの調子が悪いらしい。気にせずcommitを続ける。
15. branchつくってmasterにマージ?Gitの基本。
DistributedHoge 37
githubでのワークフロー12. commit頻度がさらに細かくなる。13. なんか動かなくなって仕方なく戻す。という
ことでbranch自体を捨てる。– git checkout master
14. ネットワークの調子が悪いらしい。気にせずcommitを続ける。
15. branchつくってmasterにマージ?Gitの基本。
DistributedHoge 38
githubでのワークフロー12. commit頻度がさらに細かくなる。13. なんか動かなくなって仕方なく戻す。という
ことでbranch自体を捨てる。1. git checkout master
14. ネットワークの調子が悪いらしい。気にせずcommitを続ける。
15. branchつくってmasterにマージ?Gitの基本。
DistributedHoge 39
githubでのワークフロー12. commit頻度がさらに細かくなる。13. なんか動かなくなって仕方なく戻す。という
ことでbranch自体を捨てる。1. git checkout master
14. ネットワークの調子が悪いらしい。気にせずcommitを続ける。
15. branchつくってmasterにマージ?Gitの基本。
DistributedHoge 40
git-svnでのワークフローある開発者の今の日常
DistributedHoge 41
git-svnでのワークフロー1. ある開発プロジェクトに参加することになっ
たのでsvnリポジトリを作成→メンバーに知らせる
• trunkとbranchesとtagsはディレクトリ分けしておく
2. svnリポジトリからgit svn clone3. テーマを決めてbranchを作成
• git branch calendar• git checkout calendar
4. 編集5. git commit6. 編集7. git commit
DistributedHoge 42
git-svnでのワークフロー1. ある開発プロジェクトに参加することになっ
たのでsvnリポジトリを作成→メンバーに知らせる
• trunkとbranchesとtagsはディレクトリ分けしておく
2. svnリポジトリからgit svn clone3. テーマを決めてbranchを作成
• git branch calendar• git checkout calendar
4. 編集5. git commit6. 編集7. git commit
DistributedHoge 43
git-svnでのワークフロー1. ある開発プロジェクトに参加することになっ
たのでsvnリポジトリを作成→メンバーに知らせる
• trunkとbranchesとtagsはディレクトリ分けしておく
2. svnリポジトリからgit svn clone3. テーマを決めてbranchを作成
• git branch calendar• git checkout calendar
4. 編集5. git commit6. 編集7. git commit
DistributedHoge 44
git-svnでのワークフロー1. ある開発プロジェクトに参加することになっ
たのでsvnリポジトリを作成→メンバーに知らせる
• trunkとbranchesとtagsはディレクトリ分けしておく
2. svnリポジトリからgit svn clone3. テーマを決めてbranchを作成
• git branch calendar• git checkout calendar
4. 編集5. git commit6. 編集7. git commit
DistributedHoge 45
git-svnでのワークフロー1. ある開発プロジェクトに参加することになっ
たのでsvnリポジトリを作成→メンバーに知らせる
• trunkとbranchesとtagsはディレクトリ分けしておく
2. svnリポジトリからgit svn clone3. テーマを決めてbranchを作成
• git branch calendar• git checkout calendar
4. 編集5. git commit6. 編集7. git commit
DistributedHoge 46
git-svnでのワークフロー1. ある開発プロジェクトに参加することになっ
たのでsvnリポジトリを作成→メンバーに知らせる
• trunkとbranchesとtagsはディレクトリ分けしておく
2. svnリポジトリからgit svn clone3. テーマを決めてbranchを作成
• git branch calendar• git checkout calendar
4. 編集5. git commit6. 編集7. git commit
DistributedHoge 47
git-svnでのワークフロー1. ある開発プロジェクトに参加することになっ
たのでsvnリポジトリを作成→メンバーに知らせる
• trunkとbranchesとtagsはディレクトリ分けしておく
2. svnリポジトリからgit svn clone3. テーマを決めてbranchを作成
• git branch calendar• git checkout calendar
4. 編集5. git commit6. 編集7. git commit
DistributedHoge 48
git-svnでのワークフロー8. いい感じになったのでローカルのマスターリ
ポジトリにまとめてmerge• git checkout master• git merge –squash calendar• git commit
9. svnリポジトリにdcommit• git svn dcommit
10. ノリでbranchを作成• git branch bug_fix• git checkout bug_fix
DistributedHoge 49
git-svnでのワークフロー8. いい感じになったのでローカルのマスターリ
ポジトリにまとめてmerge• git checkout master• git merge –squash calendar• git commit
9. svnリポジトリにdcommit• git svn dcommit
10. ノリでbranchを作成• git branch bug_fix• git checkout bug_fix
DistributedHoge 50
git-svnでのワークフロー8. いい感じになったのでローカルのマスターリ
ポジトリにまとめてmerge• git checkout master• git merge –squash calendar• git commit
9. svnリポジトリにdcommit• git svn dcommit
10. ノリでbranchを作成• git branch bug_fix• git checkout bug_fix
DistributedHoge 51
git-svnでのワークフロー11. commit頻度がさらに細かくなる。12. なんか動かなくなって仕方なく戻す。
ということでbranch自体を捨てる。• git checkout master
13. ネットワークの調子が悪いらしい。気にせずcommitを続ける。
14. branchつくってmasterにマージ?git-svnでも基本。
DistributedHoge 52
git-svnでのワークフロー11. commit頻度がさらに細かくなる。12. なんか動かなくなって仕方なく戻す。
ということでbranch自体を捨てる。• git checkout master
13. ネットワークの調子が悪いらしい。気にせずcommitを続ける。
14. branchつくってmasterにマージ?git-svnでも基本。
DistributedHoge 53
git-svnでのワークフロー11. commit頻度がさらに細かくなる。12. なんか動かなくなって仕方なく戻す。
ということでbranch自体を捨てる。• git checkout master
13. ネットワークの調子が悪いらしい。気にせずcommitを続ける。
14. branchつくってmasterにマージ?git-svnでも基本。
DistributedHoge 54
git-svnでのワークフロー11. commit頻度がさらに細かくなる。12. なんか動かなくなって仕方なく戻す。
ということでbranch自体を捨てる。• git checkout master
13. ネットワークの調子が悪いらしい。気にせずcommitを続ける。
14. branchつくってmasterにマージ?git-svnでも基本。
DistributedHoge 55
svnリポジトリでもGitの恩恵を受けられる!
DistributedHoge 56
svnリポジトリでの集中管理もできる!
DistributedHoge 57
ワーキングコピー
git-svn
git svn rebase
git svn dcommitsvnリポジトリ
git commit
Gitリポジトリ
ここらへんがgit-svnだと思う
DistributedHoge 58
git-svn introまとめ• 従来のsvnリポジトリ下でもGitの恩恵を受けられるgit-
svnはすごい!– 正直Gitは万人が理解できるものではないらしい(Joelさんが
言ってた)• 自分もまだ・・・
– TortoiseSVNによるデザイナーへの貢献も大きいのでSVNからは離れにくい
– でも便利なのでせめて自分の作業効率だけでも上げる• 今回のgit-svn紹介は導入部分だけなので、各自苦労し
てみてください– ちなみに自分はgit-svn→Gitの順で触った– Gitは今後主流になるかもしれないのに触らないのは損
• githubも楽しいけどcodecheck.inも楽しいよ!
DistributedHoge 59
ちなみに
DistributedHoge 60
Gitを使っていて思ったこと• branch祭りは楽しい
– テーマを決めたりしてガンガン切る– むしろ使い捨てくらいがちょうどいいと思っている
• masterからいちいちmergeするくらいなら新しいbranch
• git checkoutのときに一気にソースコードが変わる様は楽しい
• git-svnというGitとSVNの橋渡しはあるけれども、リポジトリの考え方は180度変えないとGitには慣れない– でも慣れたら楽しい
• Web+DB Vol.50のGit特集は最強