git-svn intro

60
git-svn intro Kenichirou Oyama (k1LoW)

Upload: kenichirou-oyama

Post on 27-Jun-2015

2.530 views

Category:

Technology


2 download

DESCRIPTION

git-svn intro

TRANSCRIPT

Page 1: git-svn intro

git-svn intro

Kenichirou Oyama (k1LoW)

Page 2: git-svn intro

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")

Page 3: git-svn intro

DistributedHoge 3

What is git-svn?

Page 4: git-svn intro

DistributedHoge 4

What is git-svn?

• GitリポジトリとSVNリポジトリを同期するためのもの

• GitとSVNの利点を享受することができる

Page 5: git-svn intro

DistributedHoge 5

SVN• 基本は1つのリポジトリ• リポジトリからcheckoutしたワーキングコピーで作業

をする– ワーキングコピーはあくまで作業用

• →[edit]→commit→update→[edit]→• 利点:リポジトリが1つなのでソースの作業履歴が1つに

集まる– きっちり集中管理しないといけないときに仕様上そうなってい

るので何も考えなくてよい• 欠点:commitは1つしかないリポジトリにしかできない

– commit権限を持たない人は作業履歴をそのSVN管理化では残すこと(commitすること)ができない→patch?

Page 6: git-svn intro

DistributedHoge 6

SVN

svn co

svn ci

svn up

svnリポジトリ

ワーキングコピー

Page 7: git-svn intro

DistributedHoge 7

Git• 基本は分散した複数のリポジトリ• リポジトリからcloneしたリポジトリで作業をする

– cloneされたリポジトリもcloneしたリポジトリもリポジトリ• →[edit]→commit→push→pull→[edit]→• 利点:それぞれがリポジトリを持つのでそれぞれか作業

履歴を残す(commitする)ことができる– みんな平等。分散。– ネットワークが切れていてもcommitできる。

• 欠点:(プロジェクトの性質によっては)どれがマスターのリポジトリかわからなくなると困る– 運用ルールが大事。

Page 8: git-svn intro

DistributedHoge 8

Git

Gitリポジトリ

git clonegit pushgit pull

Gitリポジトリ

Gitリポジトリ

git commit

Page 9: git-svn intro

DistributedHoge 9

SVNでのワークフローある開発者のかつての日常

Page 10: git-svn intro

DistributedHoge 10

SVNでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up

Page 11: git-svn intro

DistributedHoge 11

SVNでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up

Page 12: git-svn intro

DistributedHoge 12

SVNでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up

Page 13: git-svn intro

DistributedHoge 13

SVNでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up

Page 14: git-svn intro

DistributedHoge 14

SVNでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up

Page 15: git-svn intro

DistributedHoge 15

SVNでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up

Page 16: git-svn intro

DistributedHoge 16

SVNでのワークフロー1. ある開発プロジェクトに参加することになっ

たのでsvnリポジトリを作成→メンバーに知らせる

• trunkとbranchesとtagsはディレクトリ分けしておく

2. svnリポジトリからcheckout3. 編集4. svn up5. svn ci6. 編集7. svn up

Page 17: git-svn intro

DistributedHoge 17

SVNでのワークフロー8. svn ci9. なんかバージョン的に残しておく必要があり

そうだからtagsにフォルダを作成してファイルをコピー

10. svn ci11. commit頻度が細かすぎてコミットログを汚

染する12. commit頻度を下げてまとめていたら、動かな

くなって仕方なくリビジョン戻そうにもネットワークの調子が悪くて作業停止。

13. branchつくってtrunkにmerge?怖いからやらない。

Page 18: git-svn intro

DistributedHoge 18

SVNでのワークフロー8. svn ci9. なんかバージョン的に残しておく必要があり

そうだからtagsにフォルダを作成してファイルをコピー

10. svn ci11. commit頻度が細かすぎてコミットログを汚

染する12. commit頻度を下げてまとめていたら、動かな

くなって仕方なくリビジョン戻そうにもネットワークの調子が悪くて作業停止。

13. branchつくってtrunkにmerge?怖いからやらない。

Page 19: git-svn intro

DistributedHoge 19

SVNでのワークフロー8. svn ci9. なんかバージョン的に残しておく必要があり

そうだからtagsにフォルダを作成してファイルをコピー

10. svn ci11. commit頻度が細かすぎてコミットログを汚

染する12. commit頻度を下げてまとめていたら、動かな

くなって仕方なくリビジョン戻そうにもネットワークの調子が悪くて作業停止。

13. branchつくってtrunkにmerge?怖いからやらない。

Page 20: git-svn intro

DistributedHoge 20

SVNでのワークフロー8. svn ci9. なんかバージョン的に残しておく必要があり

そうだからtagsにフォルダを作成してファイルをコピー

10. svn ci11. commit頻度が細かすぎてコミットログを汚

染する12. commit頻度を下げてまとめていたら、動かな

くなって仕方なくリビジョン戻そうにもネットワークの調子が悪くて作業停止。

13. branchつくってtrunkにmerge?怖いからやらない。

Page 21: git-svn intro

DistributedHoge 21

SVNでのワークフロー8. svn ci9. なんかバージョン的に残しておく必要があり

そうだからtagsにフォルダを作成してファイルをコピー

10. svn ci11. commit頻度が細かすぎてコミットログを汚

染する12. commit頻度を下げてまとめていたら、動かな

くなって仕方なくリビジョン戻そうにもネットワークの調子が悪くて作業停止。

13. branchつくってtrunkにmerge?怖いからやらない。

Page 22: git-svn intro

DistributedHoge 22

SVNでのワークフロー8. svn ci9. なんかバージョン的に残しておく必要があり

そうだからtagsにフォルダを作成してファイルをコピー

10. svn ci11. commit頻度が細かすぎてコミットログを汚

染する12. commit頻度を下げてまとめていたら、動かな

くなって仕方なくリビジョン戻そうにもネットワークの調子が悪くて作業停止。

13. branchつくってtrunkにmerge?怖いからやらない。

Page 23: git-svn intro

DistributedHoge 23

githubでのワークフローtokyotyrant_php開発日常

Page 24: git-svn intro

DistributedHoge 24

What is github?• http://github.com• Gitのプロジェクトホスティングサー

ビス–CodeReposやcodecheck.inみたいなもの

• Gitの分散性を利用したソーシャルな側面があることが特徴–分散リポジトリならでは–followとかwatchとか

Page 25: git-svn intro

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

Page 26: git-svn intro

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

Page 27: git-svn intro

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

Page 28: git-svn intro

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

Page 29: git-svn intro

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

Page 30: git-svn intro

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

Page 31: git-svn intro

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

Page 32: git-svn intro

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

Page 33: git-svn intro

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

Page 34: git-svn intro

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

Page 35: git-svn intro

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

Page 36: git-svn intro

DistributedHoge 36

githubでのワークフロー12. commit頻度がさらに細かくなる。13. なんか動かなくなって仕方なく戻す。という

ことでbranch自体を捨てる。– git checkout master

14. ネットワークの調子が悪いらしい。気にせずcommitを続ける。

15. branchつくってmasterにマージ?Gitの基本。

Page 37: git-svn intro

DistributedHoge 37

githubでのワークフロー12. commit頻度がさらに細かくなる。13. なんか動かなくなって仕方なく戻す。という

ことでbranch自体を捨てる。– git checkout master

14. ネットワークの調子が悪いらしい。気にせずcommitを続ける。

15. branchつくってmasterにマージ?Gitの基本。

Page 38: git-svn intro

DistributedHoge 38

githubでのワークフロー12. commit頻度がさらに細かくなる。13. なんか動かなくなって仕方なく戻す。という

ことでbranch自体を捨てる。1. git checkout master

14. ネットワークの調子が悪いらしい。気にせずcommitを続ける。

15. branchつくってmasterにマージ?Gitの基本。

Page 39: git-svn intro

DistributedHoge 39

githubでのワークフロー12. commit頻度がさらに細かくなる。13. なんか動かなくなって仕方なく戻す。という

ことでbranch自体を捨てる。1. git checkout master

14. ネットワークの調子が悪いらしい。気にせずcommitを続ける。

15. branchつくってmasterにマージ?Gitの基本。

Page 40: git-svn intro

DistributedHoge 40

git-svnでのワークフローある開発者の今の日常

Page 41: git-svn intro

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

Page 42: git-svn intro

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

Page 43: git-svn intro

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

Page 44: git-svn intro

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

Page 45: git-svn intro

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

Page 46: git-svn intro

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

Page 47: git-svn intro

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

Page 48: git-svn intro

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

Page 49: git-svn intro

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

Page 50: git-svn intro

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

Page 51: git-svn intro

DistributedHoge 51

git-svnでのワークフロー11. commit頻度がさらに細かくなる。12. なんか動かなくなって仕方なく戻す。

ということでbranch自体を捨てる。• git checkout master

13. ネットワークの調子が悪いらしい。気にせずcommitを続ける。

14. branchつくってmasterにマージ?git-svnでも基本。

Page 52: git-svn intro

DistributedHoge 52

git-svnでのワークフロー11. commit頻度がさらに細かくなる。12. なんか動かなくなって仕方なく戻す。

ということでbranch自体を捨てる。• git checkout master

13. ネットワークの調子が悪いらしい。気にせずcommitを続ける。

14. branchつくってmasterにマージ?git-svnでも基本。

Page 53: git-svn intro

DistributedHoge 53

git-svnでのワークフロー11. commit頻度がさらに細かくなる。12. なんか動かなくなって仕方なく戻す。

ということでbranch自体を捨てる。• git checkout master

13. ネットワークの調子が悪いらしい。気にせずcommitを続ける。

14. branchつくってmasterにマージ?git-svnでも基本。

Page 54: git-svn intro

DistributedHoge 54

git-svnでのワークフロー11. commit頻度がさらに細かくなる。12. なんか動かなくなって仕方なく戻す。

ということでbranch自体を捨てる。• git checkout master

13. ネットワークの調子が悪いらしい。気にせずcommitを続ける。

14. branchつくってmasterにマージ?git-svnでも基本。

Page 55: git-svn intro

DistributedHoge 55

svnリポジトリでもGitの恩恵を受けられる!

Page 56: git-svn intro

DistributedHoge 56

svnリポジトリでの集中管理もできる!

Page 57: git-svn intro

DistributedHoge 57

ワーキングコピー

git-svn

git svn rebase

git svn dcommitsvnリポジトリ

git commit

Gitリポジトリ

ここらへんがgit-svnだと思う

Page 58: git-svn intro

DistributedHoge 58

git-svn introまとめ• 従来のsvnリポジトリ下でもGitの恩恵を受けられるgit-

svnはすごい!– 正直Gitは万人が理解できるものではないらしい(Joelさんが

言ってた)• 自分もまだ・・・

– TortoiseSVNによるデザイナーへの貢献も大きいのでSVNからは離れにくい

– でも便利なのでせめて自分の作業効率だけでも上げる• 今回のgit-svn紹介は導入部分だけなので、各自苦労し

てみてください– ちなみに自分はgit-svn→Gitの順で触った– Gitは今後主流になるかもしれないのに触らないのは損

• githubも楽しいけどcodecheck.inも楽しいよ!

Page 59: git-svn intro

DistributedHoge 59

ちなみに

Page 60: git-svn intro

DistributedHoge 60

Gitを使っていて思ったこと• branch祭りは楽しい

– テーマを決めたりしてガンガン切る– むしろ使い捨てくらいがちょうどいいと思っている

• masterからいちいちmergeするくらいなら新しいbranch

• git checkoutのときに一気にソースコードが変わる様は楽しい

• git-svnというGitとSVNの橋渡しはあるけれども、リポジトリの考え方は180度変えないとGitには慣れない– でも慣れたら楽しい

• Web+DB Vol.50のGit特集は最強